ディスクがある場合: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
はスキャン順序を保証しませんよね?そして、これは意味がないと思います。
ありがとう。
さて、あなたは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。しかし悲しいかな。あなたはあなた自身のシステムでそれをすることができます、しかしそれは他のみんなと彼らのスクリプトを混乱させるでしょう...