パーティション化されていないローカルディスクにudevルールを適用するには?

パーティション化されていないローカルディスクにudevルールを適用するには?

udevで次の設定を作成しました。

KERNEL=="sdd", SYMLINK+="QUORUML", OWNER="test", GROUP="gtest", MODE="0660"
KERNEL=="sde", SYMLINK+="QUORUMR", OWNER="test", GROUP="gtest", MODE="0660"

その後、別のディスクを追加したところ、新しいディスクが、/dev/sde既存のディスクに/dev/sdeなって/dev/sdf名前がにsde変わり、上記のudevルールが間違っていましたsdf。ディスクが正しいかどうかを確認するには?他のIDはありませんか?このようなことを試しましたが、blkidパーティションがないため、IDは返されません。

[root@dbnode1 rules.d]# blkid /dev/sdd
[root@dbnode1 rules.d]#

似たようなものを探しています。 iscsiディスクがある場合は、iscsi IDを使用してこれを実行できます。

KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="360014054187384e668f45e58d036f19a", SYMLINK+="disk4", OWNER="xxxx", GROUP="xxxx", MODE="0660"

答え1

とにかく一致する必要がありますSUBSYSTEM=="block", ENV{ID_SERIAL}=="xxx"(メーカー/モデルとシリアル番号)。またはENV{ID_SERIAL_SHORT}(シリアル番号のみ)。またはENV{ID_WWN}(ドライブのグローバルに一意の識別子)。またはENV{ID_PART_TABLE_UUID}

私はこれを使用する傾向がありますが、ID_SERIAL_SHORTこれは私の要件に十分固有のものです(ドライブメーカーはシリアル番号を再利用しない傾向があり、メーカーごとにシリアル番号スタイルが異なります)。そして、ドライブを簡単に識別できるように接着ラベルに印刷します。私の運転に。ホットスワップ可能なベイ。私はWWNを使用しません。私の考えでは、WWNがあまりにも似ていて、互いに区別するのが難しいからです。

デバイス名は再起動後も持続するという保証はありません。多くの場合、数ヶ月または数年間同じままですが、それに頼ることは安全ではありません。カーネル開発者は、次回の起動時に変更されないという保証がないことを何度も文書化して言及しました。なぜ?ドライブが死ぬ可能性があるため(またはカーネルがデバイスを検索している間に回転または応答するのに時間がかかる)、ドライブを追加または削除することができ、新しいカーネルバージョンが異なる順序でデバイスを検出したり、他の多くの理由でデバイスを検出できます。これがおすすめの理由ですたくさんもう数年が経ちました。「で/dev/sdX名を使用しないでください/etc/fstab。UUIDまたはLABELを使用してください。」。 udevルールにも同じアドバイス(固有の識別子を使用)が適用されます。

特定のドライブのプロパティを見つけるために使用できますudevadm info /dev/sdX。そこには興味深く便利なプロパティ/プロパティがたくさんありますが、今はシリアル番号にのみ興味があります。

たとえば、私のシステムには8TB Seagateハードドライブがあります。現在、次のように/dev/sda短いシリアル番号を見つけます。

$ udevadm info -q property --property=ID_SERIAL_SHORT /dev/sda 
ID_SERIAL_SHORT=ZA9EL9YL

udevルールで次のように使用するには:

SUBSYTEM=="block", ENV{ID_SERIAL_SHORT}=="ZA9EL9YL", SYMLINK+="QUORUML", OWNER="test", GROUP="gtest", MODE="0660"

==最初の2つのプロパティの場合、割り当てではなく比較です(参考資料、man 7 udev特にOperatorsサブセクションを参照)。

完全なシリアル番号やモデルなどを知りたい場合は、次のものを使用できます。

$ udevadm info -q property --property=ID_SERIAL /dev/sda 
ID_SERIAL=ST8000VN0022-2EL112_ZA9EL9YL

udevルールは次のとおりです。

SUBSYTEM=="block", ENV{ID_SERIAL}=="ST8000VN0022-2EL112_ZA9EL9YL", SYMLINK+="QUORUML", OWNER="test", GROUP="gtest", MODE="0660"

特定のデバイス(またはデバイスタイプ)に対してudevルールを作成する場合は、後でudevadm info /dev/name参照するときに必要な場合に備えて、ルールファイルにコメントアウトされた出力バージョンを追加すると便利です。コメントのために#


ただし、必要に応じawkて、次のツールを使用して属性名なしで値を個別に抽出できますcut

$ udevadm info -q property --property=ID_SERIAL_SHORT /dev/sda | awk -F= '{print $2}'
ZA9EL9YL

$ udevadm info -q property --property=ID_SERIAL_SHORT /dev/sda | cut -d= -f2
ZA9EL9YL

関連情報