外部メディアの読み込み構成
USBに外付けHDDやフラッシュメモリなど差し込むとUbuntuでは自動的に認識してくれます。(これはWindowsOSやMachintoshOSと殆ど同じです。)GUIで使用しているときには問題がありませんが、コマンドラインから外部ディバイスを認識するには少しばかり困ったことがあります。外部メディア(外部ストレージとか外部ディバイスとかいいますが...)は、読み込むたびに違ったファイル名で認識されるということです。システムの説明をすると、USBから認識された外部メディアは、/media/以下にデバイスファイルとして認識します。その他のディレクトリと同様に操作が可能であり、ディレクトリとファイルが通常の構成と同じように並んでいる筈です。しかし、この外部メディアは本来は、/dev/以下に認識され、その仮想ディレクトリとして/media/に認識されているわけです。つまり/media/xxxxというディレクトリを削除しても/dev/以下で認識されていれば「仮想的に削除した」というだけであって本来のデータを根こそぎ削除したことにはなりません。逆に/dev/以下を削除(アンマウント)するとシステムがHDDやフラッシュメモリなどを認識しないことになります。
USBに外付けHDDやフラッシュメモリを差し込むと自動的に認識しますが、/dev/以下でどのファイルが外部メディアなのかを確認してみます。
# fdisk -lu以上の結果はUbuntuのシステムが直接使用しているHDDが/dev/sdaとして読み込まれ、そのパーテンションや同系列のHDDなどが/dev/sda1という風に番号が振られて認識されているのがわかります。外付けのHDDメディアは/dev/sdbとなっていて同様に番号が振られています。これらのファイルはメディアの実体そのもの(というと語弊があるのですが...)なので、開いて見たりすることはできません。これらのを開いてみるには外部メディアの場合は、/media/以下に仮想的に認識されるという具合になっています。
ディスク /dev/sda: 250.1 GB, 250059350016 バイト
ヘッド 255, セクタ 63, シリンダ 30401, 合計 488397168 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
Disk identifier: 0xffffffff
デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 63 482399819 241199878+ 83 Linux ←メインのHDD
/dev/sda2 482399820 488392064 2996122+ 5 拡張領域
/dev/sda5 482399883 488392064 2996091 82 Linux スワップ / Solaris
ディスク /dev/sdb: 120.1 GB, 120060444672 バイト
ヘッド 255, セクタ 63, シリンダ 14596, 合計 234493056 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
Disk identifier: 0xdc51853a
デバイス ブート 始点 終点 ブロック Id システム
/dev/sdb1 63 234484739 117242338+ 83 Linux ←外付けHDD
root@lily:/media# ls -l
合計 8
drwxr-xr-x 2 root root 4096 2009-11-13 20:33 b82de5c3-2a78-412e-860e-372279329722何やらわけのわからない名称で認識されています。USBを抜き差ししたりシステムを再起動したりしているうちにこの認識名が変わってしまうことがあります。外付けのHDDに自動的にバックアップなどをとっていたりするとかなり面倒なことになります。
lrwxrwxrwx 1 root root 6 2009-06-24 23:31 cdrom -> cdrom0
drwxr-xr-x 2 root root 4096 2009-06-24 23:31 cdrom0
外部メディアのマウントポジションを固定する
そんなわけで外部メディアのマウントポジション(読み込み先)を固定することができます。つまり、実体として読み込まれたディバイス(/dev/sdb1)を自分の読み込みたい場所に仮想的に配置するということです。上記の通り自動認識においては/media/以下に配置されますが、そのディレクトリを自由に設定できるわけです。ディバイス名もb82de5c3-2a78-412e-8...と意味不明なものになってしまっている(意味はあって、これは認識のIDなのですが...)ので、この名称も固定できます。ディバイスの読み込みを固定するには/etc/fstabがファイルに読み込んだディバイスを指定のディレクトリにマウントします。/etc/fstabを開いて編集します。# /etc/fstab: static file system information.デフォルトではこんな状態になっています。順番に<マウントするブロックディバイスやラベル>、<マウントポイント>、<ファイルシステムの種類>、<マウント時のオプション>、<dumpの必要性>、<fsckでシステム起動時にチャックを行うかどうか>をタブで区切って記述してあります。インストールの方法やHDDのマウントの状態によって皆様それぞれ違うと思いますが、このフォーマットにしたがって外部メディアのマウントポジションを指定すればよいわけです。
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
# /dev/sda1
UUID=84dbafa1-4963-4375-a31e-c597f3f5b7e4 / ext3 relatime,errors=remount-ro 0 1
# /dev/sda5
UUID=f2f81b8c-824a-68b3-89db-5c3506bd47f0 none swap sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0
...(省略)先の/dev/sdb1を/media/diskとして認識するように記述します。UbuntuではHDDなどのメディアのフォーマットはext3がよいのでそれを指定します。(あらかじめフォーマットしておくとよいです。)その他の設定は上記の例と同様で構いません。記述してから保存してファイルを閉じます。
# /dev/sda5
UUID=f2f81b8c-824a-68b3-89db-5c3506bd47f0 none swap sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0
# 外付けHDDのmount pointを指定する
/dev/sdb1 /media/disk ext3 defaults 0 0
このファイルの設定を反映させるには、
# mount -a
という風にaオプションをつけて実行します。/media/を開いて見てみると、
drwxr-xr-x 3 root root 4096 2009-11-30 15:54 b82de5c3-2a78-412e-860e-372279329722となっていて/media/diskで認識されているのがわかります。これでこの指定のポジションからいつでも外部メディアへ読み書きができます。(ちなみにb82de5c3-2a7...というメディアは実態が/dev/sdb1ので/media/sdb1と全く同じものになります。しかしその都度名称が変わってしまう可能性があるので無視して構いません。)
lrwxrwxrwx 1 root root 6 2009-06-24 23:31 cdrom -> cdrom0
drwxr-xr-x 2 root root 4096 2009-06-24 23:31 cdrom0
drwxr-xr-x 3 root root 4096 2009-11-30 15:54 disk
※後日確認してみたら、b82de5c3-2a7..は読み込まれなくなっていました。
うまくマウントできない場合
USBデバイスの抜き差しのタイミングによってはうまくマウントポジションを固定できない場合があります。さもすればroot権限のみでマウントが可能でその他のユーザーでは不可能になっている可能性もあります。以下のことをやってみてください。USBを差したままRebootをかける。
起動後に自動的に認識していなかったら、mount -aコマンドで現在接続されているデバイスを一括マウントしてみる。
それでも駄目で、「マウントポジションがありません。」と叱られたら、
マウントポジションにディレクトリを手動で作ってみてください。
再びmount -aでマウントしてみます。
Rebootすると自動的に認識(乃至、不認識)してくれるので、その状況を確かめてみます。たいていはマウントポジションがどういうわけか自動的に作成されないというのが原因だったります。
fstabを設定後に全く認識されない(自動的にマウントされない)ということがありましたら、マウントポジションにディレクトリを作成しているかどうかを確かめてください。(私自身がこれに一度ハマリました!)例えば、/dev/sdb1を/media/usb_hddに固定マウントさせたい場合は、あらかじめ/media/usb_hddというディレクトリを作成しておく必要があります。(当たり前といえば当たり前。)fstabで指定したディレクトリはディレクトリを作成してくれませんのでご注意。またそこで作成したディレクトリは所有者とパーミッションを的確に指定しておく必要があります。root:root [755]などで作成すると当然のことながらroot権限でないと書き込みができなくなります。通常の所有者とパーミッションと同様なのでご注意。



