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


13

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

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


1
警告2019:systemdを使用する最新のデスクトップLinuxシステムでは、udevルールは通常のユーザー名前空間にファイルシステムをマウントしません。つまり、udevルールでmountコマンドを使用してファイルシステムをマウントすることはできません。さらに、これらのシステムでは、ヒューズ(ユーザーファイルシステム)システムがデスクトップアイコンを介してUSBマウントを処理するように構成されているため、fstabルールを使用して手動でマウントすると、ヒューズシステムとある程度競合します。ヘッドレスサーバーにUUIDでUSBファイルシステムを自動的にマウントするには、systemdヒューズ構成を削除し、udevルールを使用してワンショットマウントサービスをトリガーするのが最善です。
ジョナサンベンアブラハム

最近のDebianでテストされたfstab、systemd、automountを使用してこのソリューションを参照してください:unix.stackexchange.com/a/347007/31228
Jonathan Ben-Avraham

回答:


14

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


1
理解するのに少し時間がかかった重要なポイントの1つ:環境変数と照合するにはそれらの変数を設定した後でルールを適用する必要があります。これを実現するには.rulesファイル名が60より大きい数字で始まる必要があります
ali_m 2014年

@ali_m:ありがとう、私はあなたの情報を答えに加えました。
Perseids、2014年

Ubuntu 18.04では、一部のudevadmコマンドは/ dev / sdXX(たとえば、udevadm info)を指すことができ、その他は何らかの理由(たとえば、udevadm test)で/ sys / block / sdXXを指す必要があります。
グレッグベル

0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.