1

Если у меня есть диск: sdi, и в /dev/disk/by-id есть три записи:

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 определяет порядок трех записей? Я выполняю команду, и она выбирает ata-WDC_WD6001FSYZ-01SS7B0_WD-WXB1HB4SFS7W . Но я хочу знать как.

Я проверяю код: https://github.com/zfsonlinux/zfs/blob/master/lib/libzfs/libzfs_import.c#L1387

Кажется, это использовать readdir? Но readdir не гарантирует порядок сканирования, верно? И я думаю, что это не имеет смысла.

Благодарю.

1 ответ1

1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .