udevを使用してパーティションにe2labelを設定するには?

udevを使用してパーティションにe2labelを設定するには?

ディスクを挿入するときに自動的にパーティションにラベルを割り当てたいと思います。私の作業方法は、次のような新しいudevルールを作成することです。

KERNEL=="sd[a-z][0-9]", KERNELS=="ata[12]", SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="ext4", ENV{ID_FS_LABEL}=="", ACTION=="add", RUN+="/bin/sh -c 'sudo e2label %E{DEVNAME} TEST_LABEL'"

このルールは、ファイルシステムが認識されext4、現在e2labelが空であることを確認します""。 udevルールのすべての条件が満たされると、sudo e2label %E{DEVNAME} TEST_LABELコマンドが実行されます。

これはうまくいきます。ほとんど?ディスクを挿入して割り当てタグ検証を使用したときにe2labelすでに割り当てられていることがわかりましたTEST_LABEL。ちなみにタグを確認してみると、そのlsblk -fセクションLABELは空です。タグを検証する他のudevルールTEST_LABELも、優先順位が低い場合でも実行されません。その後、ディスクを取り外して再挿入すると、実行時にラベルが表示され、lsblk -f他のudevルールが実行されます。

なぜこれですか?私が何を間違っているのか、何を理解していないのですか?

ベストアンサー1

udevは各ジョブ/ルールのタグを読み取らず、60-persistent-storage.rules使用時に一度読み取った後、blkidデバイスが変更されない限り更新しません。したがって、ラベルを変更した後に実行されたルールは、から取得した(現在は使用されていない)値を引き続き使用します60-persistent-storage.rules。これがlsblk新しいタグが表示されない理由でもあります。lsblkudevデータベースを使用してこの情報を取得すると、デバイスは検索されません(これを使用する必要がありますblkid -p)。したがって、ルールでデバイスを再スキャンするか、ID_FS_LABEL新しいID_FS_LABEL_ENCラベルに設定する必要があります。

ところで。通常、実行するとe2fslabeludev変更イベントが生成されるため、udevはデバイスを再スキャンします。 udevはinotifyを使用してデバイスのメタデータの変更を監視しますが、ルールに従ってデバイスを変更するとこれは発生しません(そうしないと、次のことが発生する可能性があります)。無限エラー)毎回新しい変更イベントを生成する変更イベントループ)。

おすすめ記事