Kodama's home / tips.

USB フロッピー, USB メモリーなどの利用

USB フロッピーを LINUX で使おうとして困っていませんか?

デバイスの確認

USB 接続のフロッピーやメモリーなどは多分 SCSI ディスクとして認識されているはずなので, 使用するメディアのフォーマットに従って利用する.

SCSIデバイスはscsi0から順に/dev/sda,/dev/sdb,/dev/sdc,…のように連なる. 例えば, scsi0は/dev/sdaのデバイス名に対応し,その第1パーティションは/dev/sda1となる。

/proc/pci で USB コントローラチップを確認できる.

$cat /proc/pci
...
  USB Controller: Intel Corp. 82801CA/CAM USB (Hub #1) (rev 2)

/proc/scsi/scsiを参照すると,接続されたUSB機器のデバイス名を見ることができる

$ cat /proc/scsi/scsi 
Attached devices: 
....略
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: MITSUMI  Model: USB FDD          Rev: 1039
  Type:   Direct-Access                    ANSI SCSI revision: 02

または, root になって cdrecord -scanbus で確認する.

# cdrecord -scanbus
Cdrecord 1.8.1a07 (i686-pc-linux-gnu) Copyright (C) 1995-2000 Jrg Schilling
Using libscg version 'schily-0.1'
....略
scsibus1:
        1,0,0   100) 'MITSUMI ' 'USB FDD         ' '1039' Removable Disk
        1,1,0   101) *
        1,2,0   102) *
        1,3,0   103) *
        1,4,0   104) *
        1,5,0   105) *
        1,6,0   106) *
        1,7,0   107) *

上の例では scsi1 の FDD なので, 次のようにして利用できる

# mount -t vfat /dev/sdb /mnt/floppy

注: UHCI(Universal Host Controller Interface)

mount して使う場合

フロッピーでは /dev/sda, /dev/sdb などを用いる. USB接続のメモリーデバイスなどでは /dev/sda1, /dev/sdb1 などで vfat フォーマットとなっているはず. 後で mtools を用いる方法を説明しますが, こちらの方が基本と考えて下さい.

以下のように使います.

...ディスクを差す
# mount -t msdos /dev/sda /mnt
# ls /mnt
kks.aux*  kks.dvi*  kks.log*  kks.tex*  kks1.tex*
... 使う
# umount /mnt
...アクセスランプが消えているのを確認してディスクを抜く

一般の(root 以外の)利用者にもフロッピーを使わせるなら /etc/fstab で user マウントを許可しておきます.

# /etc/fstab
/dev/sda   /mnt  msdos   user,rw,noexec,noauto 0 0

mtools(mdir,mcopy,mformat など)を使う場合

mtools が使えるようになるので, この方が楽かもしれません.

まず /etc/mtools.conf に以下の様な行を書き加えます.

# USB floppy
drive u: file="/dev/sda" 1.44m

以下のように使います.

...ディスクを差す
# mdir u:
 Volume in drive U has no label
 Volume Serial Number is 4966-088B
 Directory for U:/

sample   txt       673 05-23-2004  17:17 
        1 file(s)               673 bytes
                          1 456 640 bytes free
.... 使う
...アクセスランプが消えているのを確認してディスクを抜く

mtools のコマンド: mattrib mbadblocks mcd mcopy mdel mdeltree mdir mformat mkmanifest mlabel mmd mmount mmove mrd mread mren mtoolstest mtype mwrite

一般の(root 以外の)利用者にもフロッピーを使わせるなら chmod a+rw /dev/sda しておくと良いでしょう.

フォーマット する

低レベルフォーマット と ファイルシステム作成の2段階があります.

低レベルフォーマット

通常のフロッピーディスクなら fdformat /dev/fd0h1440 で低レベルフォーマットしますが, USB フロッピーでは不明です.

ファイルシステム作成

mkfs -t ext2 /dev/hd0 のようにします. 使いたいファイルシステムにあわせて ext2, msdos, minix などを指定します. Windows との共用を考慮するなら msdos にします.

mtools を使えるようにしているなら fdformat コマンドでも良いでしょう.

また, 次の節で説明するように, ディスクイメージのファイルを作っておく方法も良いと思います.

MS-DOS フォーマットのフロッピー イメージを作る方法

下のスクリプトで MS-DOS フォーマットのフロッピーを作成できます. fd1440.msdos というファイルができるので, それ以降は dd if=fd1440.msdos of=/dev/sda だけで良い.

mount -t msdos -o loop fd1440.msdos /mnt のようにしてファイルを mount して細工できるので, いろいろ操作したいなら, この方法が便利です.

#!/bin/sh
# K.Kodama 2004-05-13

####### check here #######
# FLOPPY_DEV=/dev/fd0 # floppy device
FLOPPY_DEV=/dev/sda # USB floppy

FLOPPY_IMG=fd1440.msdos # target image of 1.44M FD with MS-DMS format
MCONF=mtools.conf # mtools config
MDRIVE="m:" # drive name for mtools

FD_IMAGE(){
	echo "Making FD image: ${FLOPPY_IMG}"
	dd if=/dev/zero of=${FLOPPY_IMG} bs=512 count=2880
	echo "drive ${MDRIVE} file=\"${FLOPPY_IMG}\" 1.44m" > ${MCONF}
	export MTOOLSRC=`pwd`/${MCONF}
	mformat ${MDRIVE}
	rm ${MCONF}
}

FD_IMAGE

####### check here #######
#  dd if=${FLOPPY_IMG} of=${FLOPPY_DEV}

Kodama's home / tips.