autoreplace
является задокументированный вроде следующего:
autoreplace = on | выключен Управляет автоматической заменой устройства. Если установлено значение «off», замену устройства должен инициировать администратор с помощью команды «zpool replace». Если установлено значение «on», любое новое устройство, обнаруженное в том же физическом месте, что и устройство, которое ранее принадлежало пулу, автоматически форматируется и заменяется. Поведение по умолчанию - «выключено». На это свойство также можно ссылаться по сокращенному имени столбца «заменить».
Ниже приводится текущий статус этого параметра в интересующем меня пуле:
root@[...]:/# zpool get autoreplace zfs-pool
NAME PROPERTY VALUE SOURCE
zfs-pool autoreplace on local
Так что вроде включен.
Один диск был удален из-за ошибок, связанных с S.M.A.R.T., и ZFS правильно опознала это устройство как недоступное. Зеркало, в котором использовался диск, заменено на DEGRADED
и т.д. Поскольку у меня было несколько запасных дисков, я использовал zpool replace zfs-pool FAULTY_DISK SPARE_DISK
чтобы временно поставить одну запасную. Это необходимо, потому что с UB 16.04 я использую, автоматическое использование запасных частей не работает должным образом или вообще не работает.
После того, как зеркало снова синхронизировалось и новый диск был физически присоединен, я перезапустил систему, потому что в противном случае используемые контроллеры препятствуют доступу к новому диску. Во время запуска контроллеры распознают новые диски, спрашивают, должны ли они быть включены или нет, и в первом случае новый диск будет доступен для ОС впоследствии. Диск был инициализирован, разделы созданы и т. Д. И был полностью доступен, как и ранее неисправный, в том же физическом слоте. Важно то, что ОС использовала то же имя для диска, что и раньше: /dev/sdf
и /dev/disk/by-path/pci-0000:15:00.0-scsi-0:1:0:1-part*
Тем не менее, ZFS не использовала новый диск автоматически для замены прежнего. Несмотря на то, что в выводе состояния пула упоминается серийный номер старого диска как отсутствующего и путь, который он имел в прошлом, что было таким же, как и у нового диска, уже полученного тем временем. Мне нужно было оформить замену нового диска вручную с помощью zpool replace zfs-pool pci-0000:15:00.0-scsi-0:1:0:1-part3
. Это заставило ZFS поместить новый диск в правильное зеркало из-за того же пути, и после перенастройки резервный диск также был автоматически удален.
NAME STATE READ WRITE CKSUM
zfs-pool DEGRADED 0 0 0
mirror-0 ONLINE 0 0 0
pci-0000:05:00.0-scsi-0:1:0:0-part3 ONLINE 0 0 0
pci-0000:15:00.0-scsi-0:1:0:0-part3 ONLINE 0 0 0
mirror-1 DEGRADED 0 0 0
pci-0000:05:00.0-scsi-0:1:0:1-part3 ONLINE 0 0 0
spare-1 DEGRADED 0 0 0
replacing-0 DEGRADED 0 0 0
11972718311040401135 UNAVAIL 0 0 0 was /dev/disk/by-path/pci-0000:15:00.0-scsi-0:1:0:1-part3/old
pci-0000:15:00.0-scsi-0:1:0:1-part3 ONLINE 0 0 0 (resilvering)
pci-0000:15:00.0-scsi-0:1:0:3-part3 ONLINE 0 0 0
mirror-2 ONLINE 0 0 0
pci-0000:05:00.0-scsi-0:1:0:2-part3 ONLINE 0 0 0
pci-0000:15:00.0-scsi-0:1:0:2-part3 ONLINE 0 0 0
spares
pci-0000:05:00.0-scsi-0:1:0:3-part3 AVAIL
pci-0000:15:00.0-scsi-0:1:0:3-part3 INUSE currently in use
Хотя используемая команда является документом для работы таким образом, мне интересно, почему это было необходимо с autoreplace
включен? Разве это не должно было сделать этот шаг сразу после успешного разбиения нового диска? Или это свойство autoreplace
нужно, чтобы выданная команда вообще работала? Не задокументировано полагаться на этот параметр:
zpool replace [-f] пул старое_устройство [новое_устройство] [...] new_device требуется, если пул не является избыточным. Если new_device не указан, по умолчанию используется old_device. Эта форма замены полезна после того, как существующий диск вышел из строя и был физически заменен. В этом случае новый диск может иметь тот же путь / dev / dsk, что и старое устройство, даже если на самом деле это другой диск. ZFS это понимает.