Floppy Disk , CD-ROM ,SD メモリーなどを読み書きする方法のメモです。
フロッピーディスク , CD-ROM ,SD メモリーなどを Linux で利用するためには, フロッピーディスク や CD-ROM などをパソコンのドライブに入れた後,マウント しなければなりません。 この マウント の方法も自分で mount コマンドを実行する方法, autofs により自動的にマウントする方法, フロッピーディスクなどの場合は mtools を利用する方法と,色々あります。
先ず マウント の意味について説明しておきます。
Linux ( Unix ) ではハードディスクもフロッピーディスクもファイルを入れる記憶装置の一部であり, どの記憶装置を利用しているかに関係無く, ファイルシステムは常に / で始まり,その下に /etc とか /home とか /home/ashida などが作られていきます。 このディレクトリーツリーが適当に分割されてハードディスクやフロッピーディスクに割り当てられています。 この割り当ての仕方は /etc/fstab というファイルに書かれています。 一般ユーザーでも /etc/fstab を読むことはできますから,見たことのない人は一度読んでみるとよいでしょう。
/dev/hda1 /mnt/dosc vfat defaults 0 0 /dev/hda2 /mnt/dosd vfat defaults 0 0 /dev/hda3 / ext2 defaults 1 1 /dev/hda5 /home ext2 defaults 1 2 /dev/cdrom /mnt/cdrom iso9660 noauto,owner,ro 0 0 /dev/fd0 /mnt/floppy auto noauto,owner 0 0 none /proc proc defaults 0 0 none /proc/bus/usb usbdevfs defaults 0 0 none /dev/pts devpts gid=5,mode=620 0 0 /dev/hda6 swap swap defaults 0 0
さて, マウント というのはハードディスクやフロッピーディスクなどの記憶装置をディレクトリーツリーの一部に割り当てる操作のことです。 アンマウント は マウント で設定された割り当てを解除することです。
普通はパソコンを起動するとハードディスクのそれぞれのパーティションが /etc/fstab の記述に従ってディレクトリーツリーに自動的に マウント されます。 上の fstab の例ですと,オプションが defaults になっている記憶装置は起動時に マウント されます。
ところで,フロッピーディスク と CD-ROM は常にメディアがドライブに入っているとは限りません。 ですから起動時には マウント しないように設定されています。オプションに noauto がついていますね。
上記の設定では CD-ROM やフロッピーディスクをマウントしたりアンマウントしたりできるのは root だけです。 個人的に Linux を利用する場合には一般ユーザーの権限で CD-ROM やフロッピーディスクをマウントしたいことが多いでしょう。
一般のユーザー権限でマウント,アンマウントを実行できるようにするには, /etc/fstab の設定で owner と書いてある部分を user か users に変更します。
CD-ROM ドライブに CD-ROM を入れるとブーンという音がして勢いよく回転しだしますね。 ここで一呼吸おいて回転が安定するまで待ちましょう。 あわててマウントしようとするとマウントに失敗することがあります。 回転音が落ち着いたら kterm などのコマンドラインで
mount /mnt/cdrom
と入力します。 これで /mnt/cdrom というディレクトリーの中に CD-ROM の中身が見えるようになっているはずです。
CD-ROM の利用が終わっても,いきなりドライブからCD-ROM を取り出してはいけません。 (取り出せないと思う) 取り出す前にアンマウントしなければなりません。コマンドラインで
umount /mnt/cdrom
と入力して下さい。 これで CD-ROM を取り出せるようになったはずです。
ちなみに, CD-ROM を取り出すには CD-ROM ドライブのボタンを押してもよいですが, コマンドラインで eject を実行するとトレイが出てくると思います。
最近のノートパソコンは CD-ROM ドライブが内蔵されていなくて, 必要な時にUSBで接続するものも多いようです。
私の環境で USB CD-ROM ドライブを接続して root になって /var/log/message を読んでみると, 例えば次のようなログが記録されます。
Aug 24 22:33:46 hostname kernel: hub.c: new USB device 00:07.2-1, assigned address 4 Aug 24 22:33:46 hostname kernel: usb.c: USB device 4 (vend/prod 0x4da/0xd0d) is not claimed by any active driver. Aug 24 22:33:46 hostname murasaki.usb[2631]: usb device is added Aug 24 22:33:46 hostname murasaki.usb[2631]: vendor:0x4da product:0xd0d Dclass:0x0 Dsubclass:0x0 Dprotocol:0x0 Iclass:0x8 Isubclass:0x2 Iprotocol:0x50 Aug 24 22:33:47 hostname murasaki.usb[2631]: MATCH(usb-storage) -> match_flags:0x380 vendor:0x0 product:0x0 Dclass:0x0 Dsubclass:0x0 Dprotocol:0x0 Iclass:0x8 Isubclass:0x2 Iprotocol:0x50 Aug 24 22:33:47 hostname murasaki.usb[2631]: Loading usb-storage Aug 24 22:33:47 hostname kernel: SCSI subsystem driver Revision: 1.00 Aug 24 22:33:47 hostname kernel: Initializing USB Mass Storage driver... Aug 24 22:33:47 hostname kernel: usb.c: registered new driver usb-storage Aug 24 22:33:47 hostname kernel: scsi0 : SCSI emulation for USB Mass Storage devices Aug 24 22:33:47 hostname kernel: usb-uhci.c: interrupt, status 3, frame# 1570 Aug 24 22:33:47 hostname kernel: Vendor: GENERIC Model: CDRCB03 Rev: 1.04 Aug 24 22:33:47 hostname kernel: Type: CD-ROM ANSI SCSI revision: 02 Aug 24 22:33:47 hostname kernel: USB Mass Storage support registered.
このログを見ると,どうやら SCSI 機器として認識されたようですが,残念ながらデバイス名までは分かりません。
実は私の環境では USB CD-ROM ドライブは /dev/scd0 に割り当てられます。 ですから root になって,コマンドラインで
mount -t iso9660 -r /dev/scd0 /mnt/cdrom
を実行すればマウントできます。(アンマウントは umount /mnt/cdrom)
毎回 root になってマウントするのは面倒なので,/etc/fstab の中に以下の行を書いておきます。
/dev/scd0 /mnt/cdrom iso9660 noauto,user,ro 0 0
これで一般ユーザーのままで mount /mnt/cdrom を実行すればマウントできます。
フロッピーディスクの場合にも CD-ROM と同じようにすればマウントできます。
mount /mnt/floppy
また,ディスクを取り出す前には必ずアンマウントしなければなりません。
umount /mnt/floppy
特にフロッピーディスクに何かを書き込んだ場合には, アンマウントせずに取り出すと書き込みが正しく行われない可能性があります。 必ず取り出す前にはアンマウントしましょう。
USB 接続のフロッピーディスクドライブは USB 接続の CD-ROM ドライブと同じようにすれば利用できます。 ドライブを接続すると,私の環境では /var/log/messages に以下のようなログが書かれます。
Aug 25 10:26:52 hostname kernel: hub.c: new USB device 00:1d.0-1, assigned address 3 Aug 25 10:26:52 hostname kernel: usb.c: USB device 3 (vend/prod 0x57b/0x0) is not claimed by any active driver. Aug 25 10:26:52 hostname murasaki.usb[1334]: usb device is added Aug 25 10:26:52 hostname murasaki.usb[1334]: vendor:0x57b product:0x0 Dclass:0x0 Dsubclass:0x0 Dprotocol:0x0 Iclass:0x8 Isubclass:0x4 Iprotocol:0x0 Aug 25 10:26:52 hostname murasaki.usb[1334]: MATCH(alias-sd) -> match_flags:0x3 vendor:0x57b product:0x0 Dclass:0x0 Dsubclass:0x0 Dprotocol:0x0 Iclass:0x0 Isubclass:0x0 Iprotocol:0x0 Aug 25 10:26:52 hostname murasaki.usb[1334]: MATCH(usb-storage) -> match_flags:0xf vendor:0x57b product:0x0 Dclass:0x0 Dsubclass:0x0 Dprotocol:0x0 Iclass:0x0 Isubclass:0x0 Iprotocol:0x0 Aug 25 10:26:52 hostname murasaki.usb[1334]: MATCH(usb-storage) -> match_flags:0x380 vendor:0x0 product:0x0 Dclass:0x0 Dsubclass:0x0 Dprotocol:0x0 Iclass:0x8 Isubclass:0x4 Iprotocol:0x0 Aug 25 10:26:52 hostname murasaki.usb[1334]: Dependence(usb-storage) was found Aug 25 10:26:52 hostname murasaki.usb[1334]: Dependence(scsi_mod) was found Aug 25 10:26:52 hostname murasaki.usb[1334]: Dependence(sd_mod) was found Aug 25 10:26:52 hostname murasaki.usb[1334]: Loading usb-storage Aug 25 10:26:52 hostname murasaki.usb[1334]: Loading scsi_mod Aug 25 10:26:52 hostname murasaki.usb[1334]: Loading sd_mod Aug 25 10:26:52 hostname kernel: SCSI subsystem driver Revision: 1.00 Aug 25 10:26:52 hostname kernel: Initializing USB Mass Storage driver... Aug 25 10:26:52 hostname kernel: usb.c: registered new driver usb-storage Aug 25 10:26:52 hostname kernel: scsi0 : SCSI emulation for USB Mass Storage devices Aug 25 10:26:52 hostname kernel: Vendor: Y-E DATA Model: USB-FDU Rev: 6.01 Aug 25 10:26:52 hostname kernel: Type: Direct-Access ANSI SCSI revision: 02 Aug 25 10:26:52 hostname kernel: USB Mass Storage support registered. Aug 25 10:26:52 hostname kernel: Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0 Aug 25 10:26:52 hostname kernel: usb-uhci.c: interrupt, status 3, frame# 1840 Aug 25 10:26:53 hostname kernel: SCSI device sda: 2880 512-byte hdwr sectors (1 MB) Aug 25 10:26:53 hostname kernel: sda: Write Protect is off Aug 25 10:26:53 hostname kernel: sda: sda1 sda2 sda3 sda4
ログの最後のあたりを見ると,どうやら SCSI 機器として認識され,/dev/sda が割り当てられたようです。 実際,root になってコマンドラインで
mount -t auto /dev/sda /mnt/floppy
を実行することでマウントできました。(アンマウントは umount /mnt/floppy)
USB で接続するブロックデバイスがフロッピーディスクドライブ1台だけならば, /etc/fstab に以下のように記入しておけば一般ユーザーでもマウントできるようになります。
/dev/sda /mnt/floppy auto noauto,user,rw 0 0
しかし,USB で接続するハードディスクも利用する場合には注意が必要です。
USB で接続するハードディスクも SCSI 機器として認識され/dev/sda などが割り当てられます!
USB接続フロッピーディスクドライブとUSB接続ハードディスクドライブを両方同時に使う場合には, 先に接続した方が /dev/sda になり,後から接続した方が /dev/sdb になります。
USB接続の機器を色々持っていて,必要に応じて接続する場合には /etc/fstab には記入しないで, その都度 root になって適切なコマンドでマウントした方がよいでしょう。
なお,USBハードディスクの利用方法は別のページに書いておきました。
SDメモリーや CF ( Compact Flash ) などは PC カードアダプターに差し込んで, ノートパソコンなどの PC カードスロットに PC カードアダプター毎差し込んで利用することが多いと思います。
Vine Linux 2.1.5 のころは PC カードをスロットに差し込むと自動的に認識されて /mnt/card にマウントされ, 直ちに読み書きできるようになりました。
ところが Vine Linux 2.6 になったら,カードの認識はされますが,何故か自動的にマウントされることはなくなりました。 /etc/pcmcia の下の設定ファイルを修正すれば自動的にマウントするようになるのかもしれませんが, SDメモリーなどはめったに利用しないので,まだ調べていません。
自分でマウントするには root になってから,以下のようにします。
mkdir /mnt/card
Jan 6 12:37:26 hostname cardmgr[702]: socket 0: ATA/IDE Fixed Disk
Jan 6 12:37:26 hostname kernel: cs: memory probe 0xa0000000-0xa0ffffff: clean.
Jan 6 12:37:27 hostname cardmgr[702]: executing: 'modprobe ide-cs'
Jan 6 12:37:30 hostname kernel: hdc: Memory Card Adapter, CFA DISK drive
Jan 6 12:37:30 hostname kernel: ide1 at 0x100-0x107,0x10e on irq 3
Jan 6 12:37:30 hostname kernel: hdc: attached ide-disk driver.
Jan 6 12:37:30 hostname kernel: hdc: task_no_data_intr: status=0x51 { DriveReady SeekComplete Error }
Jan 6 12:37:30 hostname kernel: hdc: task_no_data_intr: error=0x04 { DriveStatusError }
Jan 6 12:37:30 hostname kernel: hdc: 250880 sectors (128 MB) w/1KiB Cache, CHS=980/8/32
Jan 6 12:37:30 hostname kernel: hdc: hdc1
Jan 6 12:37:30 hostname kernel: ide_cs: hdc: Vcc = 3.3, Vpp = 0.0
mount -t vfat /dev/hdc1 /mnt/card
読み書きが終わったら取り出す前にアンマウントします。
umount /mnt/card
なお,PC カードをスロットに差し込むとピピッという音がすると思います。 この音が聞こえた場合にはカードがちゃんと認識されています。 もし,ピッブッという音がしたなら,その場合はカードの認識に失敗しています。 SDメモリーや CF の場合には PC カードの認識に失敗したことはないので, カードの認識に失敗した場合の対処法は省略します。 (無線 LAN カードを認識させるのに手間取ったことはありますが。)
autofs を利用すると CD-ROM やフロッピーディスクを自動的にマウント,アンマウントしてくれます。 こう書くと,とても便利そうに聞こえますが,実は私はほとんど利用していません。
autofs の設定ファイルは /etc/auto.master と /etc/auto.misc です。
/etc/auto.masterの例
# $Id: auto.master,v 1.2 1997/10/06 21:52:03 hpa Exp $
# Sample auto.master file
# Format of this file:
# mountpoint map options
# For details of the format look at autofs(8).
/misc /etc/auto.misc --timeout=60
/etc/auto.miscの例
# $Id: auto.misc,v 1.2 1997/10/06 21:52:04 hpa Exp $
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# Details may be found in the autofs(5) manpage
#kernel -ro,soft,intr ftp.kernel.org:/pub/linux
cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
# the following entries are samples to pique your imagination
#boot -fstype=ext2 :/dev/hda1
floppy -fstype=auto :/dev/fd0
#floppy -fstype=ext2 :/dev/fd0
#e2floppy -fstype=ext2 :/dev/fd0
#jaz -fstype=ext2 :/dev/sdc1
#removable -fstype=ext2 :/dev/hdd
Vine Linux ではデフォールトで autofs のデーモンが起動しているはずです。
さて,フロッピーディスクを挿入してコマンドラインで ls /misc を実行してみて下さい。 /misc 以下には何もないように見えるはずです。
実は autofs は実際に ls や cd で,そのディレクトリーをアクセスしようとした時に 初めてマウントされるのです!
次にコマンドラインで ls /misc/floppyを実行してみて下さい。 フロッピーディスクの中身が表示されているはずです。 ここで再び ls /misc を実行すると,今度はもうマウントされていますから, /misc/floppy というディレクトリーが見えるはずです。
このまま何もせずに60秒間ほうっておくと,自動的にアンマウントされて,ls /misc としても何も見えなくなります。 もちろん再び ls /misc/floppy とすれば,自動的にマウントされてフロッピーの中身が見えます。 ちなみに,cd /misc/floppy でカレントディレクトリーを /misc/floppy に移して作業している間は, もちろん自動的にアンマウントされたりはしません。
このように,autofs を利用すると,一々自分でマウントやアンマウントをしなくて済むので, とても便利そうなのですが,実はそれ程便利でもありません。 私はファイルの操作はほとんどファイルマネジャーの FileRunner を使ってすませているのですが, ファイルマネジャーでディレクトリーを表示させて移動していくのでは, 普通にやったのでは /misc 以下のディレクトリーに移動できないのです。 つまりファイルマネジャーで /misc 以下のディレクトリーを表示させても ls /misc を実行したのと同じですから, この段階では /misc/floppy は存在しないわけです。 ファイルマネジャーで /misc/floppy を表示させるためには,FileRunner のディレクトリー名ところに /misc/floppy と 自分で入力してやらなければならないのですね。 それでもコマンドラインでマウントコマンドを実行するより簡単ではあるのですが, 放っておくと勝手にアンマウントされるというのが,どうも気持ち悪くて ..... 。
mtools は MS-DOS のファイルを Linux で操作するためのツールの集まりです。 mtools というコマンドがあるのではなく,色々なコマンドの総称が mtools です。 マウントやアンマウントは必要な時に自動的に行われます。 また,フロッピーディスクをパソコンのドライブに差し込めば, ただちに一般ユーザーで読み書きできます。 そういう点は楽ですが,いずれもコマンドラインで実行するコマンドなので, ファイルマネージャーのような GUI で実行することはできません。
ちなみに,私は mtools のコマンドを実際に使ったことはありません。 このページを書くために簡単なチェックはしていますが, 以下の内容は一切無保証です。
設定ファイルは /etc/mtools.conf です。
/etc/mtools.confの例
# Example mtools.conf files. Uncomment the lines which correspond to
# your architecture and comment out the "SAMPLE FILE" line below
# Linux floppy drives
drive a: file="/dev/fd0" exclusive 1.44m mformat_only
drive b: file="/dev/fd1" exclusive 1.44m mformat_only
# First SCSI hard disk partition
#drive c: file="/dev/sda1"
# First IDE hard disk partition
#drive c: file="/dev/hda1"
(以下省略)
/etc/mtools.conf を見ると ZIP なども扱えるようです。 必要な設定行の # を削除して デバイス名を適当に自分の環境に合わせて書き換えればよいでしょう。
コマンドの名前は基本的に MS-DOS のコマンド名の前に m がつけられています。 代表的なコマンドを以下にあげます。詳しくは jman mtools などで調べて下さい。
| コマンド | 意味 | 例 |
| mcd | ディレクトリーの移動 | mcd a:q |
| mcopy | ファイルのコピー | mcopy file1 a: |
| mdel | ファイルの削除 | mdel a:file1 |
| mdeltree | ディレクトリーの削除 | mdeltree a:dir1 |
| mdir | ディレクトリー一覧 | mdir a: |
| mformat | フォーマット | |
| mmd | ディレクトリーの作成 | mmd a:dir1 |
| mmove | ファイルの移動 | |
| mren | ファイルの名前の変更 |
試しに一般ユーザーでフロッピーディスクを挿入して, コマンドラインで mcopy file.txt a: を実行したら, ちゃんとファイルをフロッピーディスクに書き込めました。 マウントやアンマウントを意識する必要も,アクセス権を意識する必要もないようです。
まあ,MS-DOS にはそんなもの初めから無いんだけど ... 。
フロッピーディスクのフォーマットには物理フォーマットと論理フォーマットという2種類があり, フロッピーディスクを利用するためには両方のフォーマットが行われている必要があります。
と言っても,フロッピーディスクを購入した時点で既に MS-DOS 用に両方のフォーマットが行われていると思うので,普通はそのまま使えます。 自分でフォーマットする場合も,物理フォーマットは既に行われていますから, 論理フォーマットだけを実行すればよいはずです。(多分)
なお,私は Linux にしてからはフロッピーディスクをほとんど使わないので, Linux 上でフロッピーディスクをフォーマットしたことはありません。 以下は Vine Linux のユーザーガイドに書いてある内容を書き写しただけであり, 自分で試してはいません。
物理フォーマットの仕方
コマンドラインで以下を実行する。
fdformat /dev/fd0H1440
論理フォーマットの仕方
コマンドラインで以下を実行する。
mformat a:
または
/sbin/mkfs.msdos /dev/fd0