パーティションの種類に応じて所有権と権限を設定できるように、udev(マスターブートレコードの1バイトフィールド)からパーティションタイプにアクセスしようとしています。もちろん、問題は、所有者などを設定しようとしている間に、sda1
パーティションテーブルが実際に親テーブルの一部であることですsda
。 (もちろん実際にはsdaだけでなく多くのディスクがあります)
各ディスクのudevデータベースエントリにインポートされたすべてのプライマリパーティションのパーティションタイプをインポートしました。これにより、各ディスクに可能な各1次パーティションに1つずつ4つのENVエントリが追加されます。以下のように見えますudevadmin info --query=all
。
E: LOCAL_PARTTYPE_P1=fd
E: LOCAL_PARTTYPE_P2=da
E: LOCAL_PARTTYPE_P3=00
E: LOCAL_PARTTYPE_P4=00
IMPORT{parent}
その後、以下にある .partition number(1–4) を使用できますATTR{partition}
。問題はタイプを取得することです。これ分割。
これをする必要があるようですが、うまくENV{LOCAL_PARTTYPE}="$env{LOCAL_PARTTYPE_P$attr{partition}}"
いきません。先行 $ を削除すると、生成された名前が正確になり、udev は間接検索を実行しません。
私が見つけた唯一の方法は、次のような厄介な行です。これがIMPORT{program}="/bin/sh -c 'echo LOCAL_PARTTYPE=$$LOCAL_PARTTYPE_P$attr{partition}'"
機能する理由は、ENVエントリがudevが実行するプログラムに環境変数として渡され、シェルがすぐに拡張してエコーできるようにするためです。
すべての可能なパーティション番号に対してすべてをコピーすることもできますが(プライマリパーティションのみを使用するために可能です)、気分が悪くなります。
$ATTR{partition}=="1", $ENV{LOCAL_PARTTYPE_P1}=="da", OWNER="grid", ...
$ATTR{partition}=="2", $ENV{LOCAL_PARTTYPE_P2}=="da", OWNER="grid", ...
⋮
これを行うための良い方法はありますか?