web-dev-qa-db-ja.com

/ dev / disk / by-idのzpoolインポート順序

ディスクがある場合:sdi、および/dev/disk/by-idに3つのエントリがあります。

scsi-SATA_WDC_WD6001FSYZ-_WD-WXB1HB4SFS7W -> ../../sdi
ata-WDC_WD6001FSYZ-01SS7B0_WD-WXB1HB4SFS7W -> ../../sdi
wwn-0x50014ee004032d28 -> ../../sdi

今はzpool import -d /dev/disk/by-id zpoolnameを使用しています。 zpoolは3つのエントリの順序をどのように決定しますか?コマンドを実行すると、ata-WDC_WD6001FSYZ-01SS7B0_WD-WXB1HB4SFS7Wが選択されます。しかし、私はその方法を知りたいです。

コードを確認します: https://github.com/zfsonlinux/zfs/blob/master/lib/libzfs/libzfs_import.c#L1387

readdirを使用しているようです?しかし、readdirはスキャン順序を保証しませんよね?そして、これは意味がないと思います。

ありがとう。

2
黃健瑋

さて、あなたはreaddirを使用するコードを見てきましたが、これはエントリが読み取られる順序を保証するものではありません。

しかし、最後は関係ありません。

ZFSは、デバイスノードが何らかの方法で参照されているかどうかを気にしません。それが気にするのは、ディスク上のデータがそれを介してアクセス可能かどうかです。そうでない場合、その特定のディレクトリエントリはとにかくプールインポートの候補にはならないので、違いはありません。

唯一の理由なぜ気にするのかは、特定の名前をzpool status出力に表示したい場合です。その場合、/ dev/disk/by-id(すでに述べたように、同じパーティションを参照する方法は複数あります)からインポートするのではなく、/ etc/zfs/vdev_idを設定する必要があります。 confを実行してから、/ dev/disk/by-vdevからインポートします。 (おそらく、最初にudevadm triggerを再実行する必要があります。)

一般に、実装の詳細を実際に使用する場合を除いて、実装の詳細を気にしないでください。次のバージョンでは、表示している動作が完全に変わる可能性があります。代わりに、文書化されたインターフェースを使用して、目的の効果を取得してください。

もちろん、誰かがタイプを別のパスコンポーネントに入れていれば、これは回避できたはずです。たとえば、/ dev/disk/by-id/scsi/SATA_WDC_WD6001FSYZ-_WD-WXB1HB4SFS7W、/ dev/disk/by -代わりに、id/ata/WDC_WD6001FSYZ-01SS7B0_WD-WXB1HB4SFS7Wおよび/ dev/disk/by-id/wwn/0x50014ee004032d28。しかし悲しいかな。あなたはあなた自身のシステムでそれをすることができます、しかしそれは他のみんなと彼らのスクリプトを混乱させるでしょう...

1
a CVn