Итак, вы посмотрели код, который использует 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 вместо этого. Но увы. Вы могли бы сделать это в своей собственной системе, но это спутало бы всех остальных и их сценарии ...