Назад | Перейти на главную страницу

Когда срабатывает «автоматическая замена» ZFS?

Задний план

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 это понимает.