udev ルールを使用して、ルールから単一のデバイスを除外することは可能ですか?
たとえば、5 台のハードディスクが接続されていて、1 台を除くすべてのハードディスクにカスタム名を作成したいのですが、それは可能ですか?
また、sdz の後のカーネル名ディスクは 2 文字で命名されます。sdaa、sdab、sdqr などです。sda1、sdb2 などにパーティションを含めたくないので、これに問題があります。すべての文字をワイルドカードにして、すべての数字をワイルドカードにすることはできますか?
例:
KERNEL=="sd??", NAME="test/Disk%n", ATTRS{ID_SERIAL_SHORT}!="xxxx"
答え1
たとえば、5 台のハードディスクが接続されていて、1 台を除くすべてのハードディスクにカスタム名を作成したいのですが、それは可能ですか?
GOTO
ルールをスキップするには、次のものを使用できます。ENV{ID_SERIAL_SHORT}=="xxxx|yyyy|zzzz", GOTO="custom_names_end" ENV{ID_MODEL}=="blahblah", GOTO="custom_names_end" KERNEL=="sd*", ENV{DEVTYPE}=="disk", SYMLINK+="test/Disk%n" LABEL="custom_names_end"
ID_SERIAL_SHORT
は属性ではないことに注意してください。これは udev の「環境」変数なので、一致させるにENV{}
はENVS{}
または を使用する必要があります。属性は sysfs から直接読み取られます。また、最近の udev バージョンではデバイス名の変更が禁止されており、カスタム シンボリック リンクのみを追加できることにも注意してください。
また、sdz の後のカーネル名ディスクは 2 文字で命名されます。sdaa、sdab、sdqr などです。sda1、sdb2 などにパーティションを含めたくないので、これに問題があります。すべての文字をワイルドカードにして、すべての数字をワイルドカードにすることはできますか?
間違ったアプローチをしています。ディスクを一致させたいがパーティションを一致させたくない場合は、まさにそれをする:
カーネル=="sd*",ENV{DEVTYPE}=="ディスク"、…
値はおよび
DEVTYPE
で確認できます。udevadm info /dev/sda
udevadm info /dev/sda1