ディスクのUUIDに基づいてUSBドライブを/media
にマウントしたい。 udevルールファイルでusbドライブのUUIDを使用するにはどうすればよいですか。また、UUID番号をフォルダー名として使用してusbドライブをマウントするudevルールとは何ですか。
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ファイルシステムをマウントすることです。
大まかな解決策が頭に浮かびます。 UUIDで識別される対応するfstabエントリを設定します。また、udevルールでは、新しいsd *デバイスが追加されるたびにmount -a
を実行します。