同じ取り付けポイントに代替装置を取り付ける(他の取り付けオプションを含む)

同じ取り付けポイントに代替装置を取り付ける(他の取り付けオプションを含む)

ホットスワップ可能なドライブベイを搭載したサーバー(Ubuntu 14.04を実行)があります。私は通常、大規模な科学データセットを転送する複数のハードドライブの1つを取り付けるためにホットスワップ可能なベイを使用しています。これらのディスクの中には、他のマウントオプション(他のファイルシステム、SSD対HDDなど)が必要です/etc/fstab

このデータバッチ処理とバックアップのためのスクリプトの一部を簡素化するために、現在接続されているホットスワップ可能ディスクの1つに対して常に同じマウントポイントを使用するようにサーバーを構成したいと思います。

私は次のようなものを私の中に入れてみましたfstab

UUID=<disk A>  /common_mount_point  ext4   defaults,discard,noatime  0 0
UUID=<disk B>  /common_mount_point  btrfs  defaults,compress=lzo     0 0    

これはディスク A をマウントしようとすると正常に動作しますが、ディスク B をマウントしようとするたびにエラーが発生します。

mount: special device UUID=<disk B> does not exist

この 2 行の順序を変更すると反対が発生するため、その特定のマウントポイントをmount参照する最初の行だけを探しているように見え、関連するfstabファイルシステム記述子が見つからないとエラーが発生します。

マウント操作の1つが成功するまで、同じマウントポイントに複数の異なるUUIDを順番にマウントしようとするbashスクリプトを書くことができると思いますが、よりエレガントなソリューションを期待しています.

アップデート1

sudo mount -a興味深いことに、代わりに呼び出すと、mount /common_mount_pointディスクBは正常にマウントされますが、ディスクAのUUIDが見つからないというエラーメッセージが表示され続けます。したがって、mount -a同じマウントポイントを使用する複数のエントリが試みられますが、これを行うためにfstab必ずしもそうではありません。sudo

この行動は以下に関連しているようです。この報告されたエラーここでmountallは、これv2.50で修正されたようです。。 Trustyリポジトリの最新バージョンはまだ2.49なので、最新バージョンのPPAを見つけることができるかどうかを見てみましょう。

アップデート2

inの代わりに呼び出されたときにのみ呼び出されmountallたため、inのエラーは関連性がないことがわかりました。mountall実際、出力によると、私はすでにv2.53を実行しています(v2.49と言っていますが)。これはおそらく、複数の行が同じマウントポイントを参照しようとするという事実を説明します。mount -amount /common_mount_pointmountalldpkg -s mountallmountall --versionsudo mount -afstab

答え1

udev と同じデバイス名を使用してください。

/etc/fstabUUID をリストするのではなく、デバイス名をリストし、すべてのデバイスに同じデバイス名を使用するように udev を設定できます。次のファイルにこのような行を置きます/etc/udev/rules.d

KERNEL=="sd*", ATTRS{serial}=="123456798", NAME="one_of_my_disks%n"

または

KERNEL=="sd*", ATTRS{serial}=="123456798", SYMLINK+="one_of_my_disks%n"

udevadm info -a -n sdb上記の例のように一致するディスクのプロパティを確認するには、実行してください。ATTRS{serial}=="123456798"複数のプロパティしか使用できませんが、すべて同じセクションにある必要があります。

その後、ブロックデバイス/etc/fstabとして使用されます。/dev/one_of_my_disks

ディスクのレイアウトが異なる場合、状況はさらに複雑になります。ファイルシステムタイプに使用できますauto。これはほとんどのタイプで機能します。ただし、別のパーティション番号またはマウントオプションが必要な場合は、別のfstabエントリが必要です。fstabシステムがディスクを検出したら、実行中のudevエントリによって呼び出されるスクリプトを動的に編集することでこの問題を解決できます。たとえば、次のudevルールを使用します。

KERNEL=="sd*", ATTRS{serial}=="123456798", ENV{FSTAB4}="compress=lzo", NAME="one_of_my_disks%n", RUN+="/usr/local/sbin/fstab_update_my_disk"

そして次のfstab_update_my_diskスクリプト(テストされていません):

#!/bin/sh
/usr/bin/sed -i -e '/^\/dev\/one_of_my_disks1/ s/\([^ \t][^ \t]*[ \t][ \t]*[^ \t][^ \t]*[ \t][ \t]*[^ \t][^ \t]*[ \t][ \t]*\)[^ \t][^ \t]*/\1'"$FSTAB4"'/'

udevを使用すると、マウントポイントは重要ではありません。

別のアプローチは、デバイス名とマウントポイントが異なる別々のfstabエントリを維持することです。ただし、udevRUNフックを使用してマウントポイントを指すシンボリックリンクを更新します。

KERNEL=="sd*", ATTRS{serial}=="123456798", RUN+="/bin/ln -snf /media/disk1 /media/one_of_my_disks"

関連情報