/media
ディスクのUUID に基づいてUSBドライブをマウントしたい。udevルールファイルでusbドライブのUUIDを使用するにはどうすればよいですか?udevルールとは何ですか?UUID番号をフォルダー名として使用してusbドライブをマウントします。
このblkid
コマンドは、マウント時にのみディスクのUUIDを出力します。
/media
ディスクのUUID に基づいてUSBドライブをマウントしたい。udevルールファイルでusbドライブのUUIDを使用するにはどうすればよいですか?udevルールとは何ですか?UUID番号をフォルダー名として使用してusbドライブをマウントします。
このblkid
コマンドは、マウント時にのみディスクのUUIDを出力します。
回答:
UUIDはudevから直接アクセスできませんが、少なくともFedoraとUbuntuでは環境変数として設定されています(ENV
)。を呼び出すと、デバイスのすべての環境変数を読み取ることができますudevadm info /dev/sdc
。たとえば、外付けドライブのNTFSの場合:
$ udevadm info /dev/sdc2
P: /devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host7/target7:0:0/7:0:0:0/block/sdc/sdc2
N: sdc2
[…]
E: ID_FS_TYPE=ntfs
E: ID_FS_USAGE=filesystem
E: ID_FS_UUID=4A6F2ABC1232FA37
[…]
E:
前にあるものはすべて環境変数として設定されます。
と照合できENV{ID_FS_UUID}=="4A6F2ABC1232FA37"
ます。最初のフィルターとしてKERNEL=="sd?2"
、正しいパーティション番号のブロックデバイスのみを処理していることを確認するために照合します。完全なルールは次のようになります。
KERNEL=="sd?2", ENV{ID_FS_UUID}=="4A6F2ABC1232FA37", RUN+="/usr/bin/logger --tag my-manual-usb-mount Mounting the device with UUID 4A6F2ABC1232FA37", RUN+="/usr/bin/mount [Your mount options here]"
loggerコマンドは、ルールが実際に実行されたことを表明するのに役立ちます。次に、を使用して、ルールに構文エラーが含まれていないことを確認する必要がありますudevadm test /dev/sdc2
。ルールファイルが出力にリストされ、その横にエラーメッセージが表示されないはずです。これで、デバイスのすべてのルールをトリガーして、ルールが計画どおりに機能するかどうかを確認できますsudo udevadm trigger /dev/sdc2
。ルールが一致した場合、システムログ(/var/log/syslog
または経由journalctl -b
)でカスタムログメッセージが見つかります。
編集: ali_mは、環境変数が以前のルールによって設定され、.rules
ファイルに十分な辞書編集順序がある場合にのみアクセス可能であることを指摘しました。「60」から始めれば十分です。個人的には、ルールを "zz"(可能な場合)で始めて、一目で定義済みのルールと区別しています。
RUN
コマンドなどでUUIDを使用するUdevには、非常に強力な変数および属性置換構文があります。具体的には、のすべての出現が$env{ID_FS_UUID}
ドライブのUUIDに置き換えられます。したがって、デバイスをマウントするには、/media/
UUID
次のルールを使用できます。
KERNEL=="sd??", RUN+="/usr/bin/mkdir /media/$env{ID_FS_UUID}", RUN+="/usr/bin/mount $devpath /media/$env{ID_FS_UUID}"
代わりにudiskを構成することをお勧めしますが、解決したい問題空間に特化しています。出発点としてhttps://wiki.archlinux.org/index.php/udisks#udisks2:_mount_to_.2Fmediaを参照してください。
/etc/fstab
またはudisksの代わりにudevを使用してデバイスをマウントする実際の使用例は、zfsファイルシステムをマウントすることです。
.rules
ファイル名が60より大きい数字で始まる必要があります。