LoginSignup
21
17

More than 5 years have passed since last update.

USBメモリを指すポートによって、マウント先を固定する方法

Last updated at Posted at 2014-09-12

 皆様、お疲れ様です。

 Raspberry Piなどで車載カメラを運用していると、USBメモリの容量が気になり、何本かのUSBメモリを使いまわしたりしたくなりますよね。
 あと、バックアップメディア(外付けHDDとか?)を曜日ごとに変えていて、マウント先は固定しておきたい、ってことありますよね。
 そういう人向けの手順です。

1) デバイスの指定には何が使えるの?

 通常、mount ではマウント元に/dev 直下にあるデバイスファイル名を指定します。
 また、/dev/disk/by-uuid以下のUUIDを使用することもあるでしょう。

2) なんでUUIDを使用しないの?

 UUID,便利ですよね。「到底誰とも重複することはない」一意なタグを割り当ててくれるので、「特定の機器」を間違いなく判別するのには便利です。
 でも、このUUIDの困ったところは「メディアをフォーマットするとUUIDが変わっちゃう」ことにあります。

UUIDの変化
yuki@Utsusemi ~ $ ls -al /dev/disk/by-uuid/ | grep sdc
lrwxrwxrwx 1 root root  10  5月  8 02:39 386A-8A21 -> ../../sdc1
yuki@Utsusemi ~ $ ls -al /dev/disk/by-uuid/ | grep sdc
lrwxrwxrwx 1 root root  10  5月  8 02:42 0739-057D -> ../../sdc1
yuki@Utsusemi ~ $ ls -al /dev/disk/by-uuid/ | grep sdc
lrwxrwxrwx 1 root root  10  5月  8 02:43 0AF2-6192 -> ../../sdc1

 同じデバイスなのですが、フォーマットするたびに、386A-8A21だったり、0739-057Dだったり、0AF2-6192だったりするのです。
 私の場合、Raspberry Piとmotionの組み合わせで車載カメラを作ってます。 USBメモリをフォーマットしたり、2本使いまわしたりするばあい、UUIDでは指定しにくいのです。
 ちなみに「特定の機器」を間違いなく判別したいのなら、UUIDだけでなく機器本体の固有ID(型番/シリアル番号の組み合わせ)も使えると思いますよ(補足で後述します)。

3) ボリュームラベルを固定しておいたらいいんじゃないの?

 ボリュームラベル,便利(ry
 これも「特定の機器」を人が判別するのには便利なのですが、曜日ごとにUSBメモリを交換する場合だと、全部「BACKUP」とかつけちゃいがちです。これ、何曜日のバックアップ用なの? とかわからなくなります。

4) 接続ポートごとにマウント先を固定したら便利じゃない?

 というわけで、USBの接続ポートごとにマウント先を固定しておけば、いいんじゃないの? と思いつきました。
 それは/dev/disk/by-pathを見てやればわかります。
 レッドハット社の25.3. 永続的な命名 によると by-path は各種デバイスの接続先ポートを一意に決めてくれます。

5) ではやってみよう。

 事前に、「どのポートがどのようなIDで割り当てられているか?」を確認しておきます。

/dev/disk/by-pathの割り当て状況
yuki@Utsusemi ~ $ ls -al /dev/disk/by-path
合計 0
drwxr-xr-x 2 root root 120  5月  8 02:42 .
drwxr-xr-x 6 root root 120  5月  8 02:04 ..
lrwxrwxrwx 1 root root   9  5月  8 02:42 pci-0000:00:12.2-usb-0:1:1.0-scsi-0:0:0:0 -> ../../sdc
lrwxrwxrwx 1 root root  10  5月  8 02:43 pci-0000:00:12.2-usb-0:1:1.0-scsi-0:0:0:0-part1 -> ../../sdc1
lrwxrwxrwx 1 root root   9  5月  8 02:04 pci-0000:00:12.2-usb-0:3:1.0-scsi-0:0:0:0 -> ../../sdb
lrwxrwxrwx 1 root root  10  5月  8 02:04 pci-0000:00:12.2-usb-0:3:1.0-scsi-0:0:0:0-part1 -> ../../sdb1

これを見ると、pci-0000:00:12.2-usb-0:1:1.0-scsi-0:0:0:0-part1 というのが、/dev/sdc1と紐付いていることがわかります。
 そこで、マウント先を作っておいてから、/etc/fstabに次のように記述します。

/etc/fstab
/dev/disk/by-path/pci-0000:00:12.2-usb-0:3:1.0-scsi-0:0:0:0-part1   /media/test vfat        defaults,user   0   0

 上記の場合、特定のUSBポートに差し込んだUSBメモリは/media/testにマウントします。

[補足]

 機器の固有のIDということなら、by-idでもいいと思いますよ。
 by-id はUUIDと似ているのですが、各デバイスに固有のID(WWID)となります。
 機器のシリアルナンバーなどを元に生成しているので、世界に一つだけのデバイスを指定できます。
 下の出力結果を見てもらってもわかるように、パーテイションの指定も可能です。

/dev/disk/by-idの出力結果
yuki@Utsusemi ~ $ ls -l /dev/disk/by-id
合計 0
lrwxrwxrwx 1 root root  9  5月  8 02:42 usb-TDK_LoR_TF10_0703419C9446E306-0:0 -> ../../sdc
lrwxrwxrwx 1 root root 10  5月  8 02:43 usb-TDK_LoR_TF10_0703419C9446E306-0:0-part1 -> ../../sdc1
lrwxrwxrwx 1 root root  9  5月  8 02:04 usb-TDK_LoR_TF10_0703419CA2473709-0:0 -> ../../sdb
lrwxrwxrwx 1 root root 10  5月  8 02:04 usb-TDK_LoR_TF10_0703419CA2473709-0:0-part1 -> ../../sdb1

あと、上述の25.3. 永続的な命名 によれば、by-path の識別子が指し示すポートは必ずしも永続的ではないようです。
例えば、物理的な構成が変わったりとか、起動時のバスアダプタなどの検出タイミングによっては変化する可能性があったりとかで、確実さは乏しいと思います。
うっかりすると、書き込んじゃまずいデバイスを書き換えてしまったりとかするかもしれません。
ので、自己責任でおねがいしますね。

21
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
17