SDカードリーダーのシリアル番号に基づいてudevルールを使用してブロックデバイス名を設定する方法

SDカードリーダーのシリアル番号に基づいてudevルールを使用してブロックデバイス名を設定する方法

sdcardリーダーがあり、ブロックデバイス名を/dev/sdcard2に設定しようとすると、そのパーティションの名前は/dev/sdcard2p1 /dev/sdcard2p2 /dev/sdcard2p3...(カードリーダーに挿入されている項目によって異なります)になります。特定のカードにのみ適用されます)

この規則は、この特定のSDカードリーダー(シリアル番号で区切られている)に接続されているすべてのSDカード(異なる数のパーティションを含む)に適用する必要があり、挿入されたSDカードを指すブロックデバイスにはこれらの名前が必要です。

SDカードリーダーのシリアル番号はID_SERIAL_SHORT = 20210500010790です。

したがって、上記のようにブロックデバイス名を設定するudevルールを作成したいと思います。

私はこのルールを試してみました。

KERNEL=="sd*", ACTION=="add", ENV{ID_SERIAL_SHORT}=="20210500010790", SYMLINK+="sdcard2%n"

ところで動作しません。私が何を間違っているのでしょうか?

出力は次のとおりですudevadm monitor --environment --udevペーストビン

更新:いくつかの解決策が見つかりました。

ACTION=="add", SUBSYSTEM=="block", ATTRS{serial}=="20210500010790", ENV{DEVTYPE}=="disk", SYMLINK+="sdcard2"
ACTION=="add", SUBSYSTEM=="block", ATTRS{serial}=="20210500010790", ENV{DEVTYPE}=="partition", SYMLINK+="sdcard2p%n"

ATTRSでは動作しますが、ENVでは動作しません。しかし、その理由は何ですか?

関連情報