web-dev-qa-db-ja.com

udevルールでUUIDを使用し、usbドライブを/ media / $ UUIDにマウントします

ディスクのUUIDに基づいてUSBドライブを/mediaにマウントしたい。 udevルールファイルでusbドライブのUUIDを使用するにはどうすればよいですか。また、UUID番号をフォルダー名として使用してusbドライブをマウントするudevルールとは何ですか。

blkidコマンドは、ディスクのUUIDを出力しますが、マウント時のみです。

13
Talespin_Kit

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:が前に付いているものはすべて、環境変数として設定されます。

UUIDとの照合

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ファイルシステムをマウントすることです。

14
Perseids

大まかな解決策が頭に浮かびます。 UUIDで識別される対応するfstabエントリを設定します。また、udevルールでは、新しいsd *デバイスが追加されるたびにmount -aを実行します。

0
waTer