特定のHDDを特定のマウントポイントにマウントする
ちょっと填ったのでメモ。
一般的な環境ではあまりないかもしれないけど、Linuxマシンに複数台のHDDを接続している場合*1、システム起動時に必ずしも前回起動時と同じ順序でHDDが認識されるとは限らないため、単純にfstabにデバイスのマウントリストを記述しただけでは、各マウントポイントに対して前回起動時とは異なるデバイスやパーティション領域がマウントされてしまうことがあります。
これを防ぐには、各パーティションに対してボリュームラベルを設定する、あるいはパーティション作成時に各領域に対して設定される一意の識別子(UUID*2)を指定してマウントする、という二つの手法がありますが*3、これらの手法を各ディストリビューション共通でまとめたページが見あたらなかったので纏めておきます。
注意
ボリュームラベルを指定する場合
これはWindowsにおけるボリュームラベルと同じような概念で、各領域に対して一意の名前を付けてやることで、領域を特定するというものです。台数が少ないうちは覚えやすい名前を指定してやればよいのですが、台数が増えてくると名前と物理デバイスの対応管理が難しくなるのが難点で、万一名前の重複が起こるとデバイスの競合が起こってしまいます。
まずは領域に対してディスクラベルを設定。e2labelコマンドは
# e2label Usage: e2label device [newlabel]
ですので、
# e2label /dev/sdb1 test
とかてきとーに設定してやります。
で、/etc/fstabを編集。
# vi /etc/fstab [/etc/fstab] ------------------------------------------ /dev/sda1 / ext3 defaults 0 0 LABEL=test /testvolume ext3 defaults 0 0 ... ------------------------------------------
で再起動すればちゃんと動作するはず。
UUIDで指定する
各領域のUUIDを確認するには、tune2fsコマンドを使います。こちらは各デバイスの名前を覚えにくいのが難点ですが、名前の衝突が起こらないことはシステムが保証してくれるため、一度設定してしまえば増設時にも特に気にする必要がないのが利点。
# tune2fs tune2fs 1.38 (30-Jun-2005) Usage: tune2fs [-c max_mounts_count] [-e errors_behavior] [-g group] [-i interval[d|m|w]] [-j] [-J journal_options] [-l] [-s sparse_flag] [-m reserved_blocks_percent] [-o [^]mount_options[,...]] [-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label] [-M last_mounted_dir] [-O [^]feature[,...]] [-T last_check_time] [-U UUID] device
詳しくはmanpageを。単に情報を表示するだけなら、 -l オプションを付ければよいので
# tune2fs -l /dev/sdb1 tune2fs 1.38 (30-Jun-2005) Filesystem volume name: test Last mounted on: <not available> Filesystem UUID: ac518bcf-****-d72c-bbe5-************ Filesystem magic number: 0x**** Filesystem revision #: 1 (dynamic) Default mount options: (none) Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux ....
というように表示されます。ここで表示された情報の、 Filesystem UUID が目的のUUIDなので、これを控えます。
で、/etc/fstabを編集。
# vi /etc/fstab [/etc/fstab] --------------------------------------------------------------------------------- /dev/sda1 / ext3 defaults 0 0 UUID=ac518bcf-****-d72c-bbe5-************ /testvolume ext3 defaults 0 0 ... ---------------------------------------------------------------------------------
で再起動すればちゃんと動作するはず。
余談
- Ubuntu限定*4で、/lib/udev/vol_id というコマンドがあり、これにデバイス名(/dev/sd*n)を与えてやれば自動的にUUID/Label等に限定された情報を返してくれます。
- 一般ユーザーで一時的にマウントする場合では上記の手法が使えないので、
$ ls -l /dev/disk/by-uuid
をしてやると、各領域に対するUUID情報を返してくれます。というかこっちの方が簡単かもしれない。
- blkid というコマンドでも各デバイスに対するUUIDを取得可能。これも一般ユーザー権限で動作可。詳細は次章参照。
blkid
$ blkid -h blkid 1.0.0 (12-Feb-2003) usage: blkid [-c <file>] [-hl] [-o format] [-s <tag>] [-t <token>] [-v] [-w <file>] [dev ...] -c cache file (default: /etc/blkid.tab, /dev/null = none) -h print this usage message and exit -s show specified tag(s) (default show all tags) -t find device with a specific token (NAME=value pair) -l lookup the the first device with arguments specified by -t -v print version and exit -w write cache to different file (/dev/null = no write) dev specify device(s) to probe (default: all devices)