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

Фон

автозамена задокументирована следующим образом:

autoreplace = on | выкл. Управляет автоматической заменой устройства. Если установлено значение «off», замену устройства должен инициировать администратор с помощью команды «zpool replace». Если установлено значение «on», любое новое устройство, обнаруженное в том же физическом месте, что и устройство, которое ранее принадлежало пулу, автоматически форматируется и заменяется. Поведение по умолчанию - «выключено». На это свойство также можно ссылаться по сокращенному имени столбца, «заменить».

Ниже приводится текущий статус этого параметра в интересующем меня пуле:

root@[...]:/# zpool get autoreplace zfs-pool
NAME      PROPERTY     VALUE    SOURCE
zfs-pool  autoreplace  on       local

Похоже, что он включен.

] Наблюдения

Один диск был удален из-за ошибок, связанных с SMART, и 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 необходимо для работы выданной команды? Не указано в документации, чтобы полагаться на этот параметр:

zpool replace [-f] pool old_device [new_device] [...] new_device требуется, если пул не является избыточным. Если new_device не указан, по умолчанию используется old_device. Эта форма замены полезна после того, как существующий диск вышел из строя и был физически заменен. В этом случае новый диск может иметь тот же путь / dev / dsk, что и старое устройство, даже если на самом деле это другой диск. ZFS распознает это.

4
задан 3 September 2020 в 09:02
1 ответ

ZFS зависит от ZED для обработки автоматической замены неисправных/отключенных дисков, поэтому вы должны быть уверены, что ZED работает . Однако последние выпуски ZED 0.8.x содержат ошибку, которая не позволяет ZFS автоматически разбивать замененный диск на разделы. Обратите внимание, что этой ошибки нет в выпусках 0.7.x ZFS/ZED.

РЕДАКТИРОВАТЬ: некоторые ответы основаны на ваших комментариях ниже:

  • выполняет ли ZED автоматическую замену каким-либо образом «внутри» или необходимы сценарии, например, для использования «горячих» резервов и других действий? ZED выполняет автозамену внутри своего FMA (агент управления неисправностями ). Другими словами, в каталоге агента не требуется никакого сценария.Эти сценарии обычно запускаются после FMA и должны запускать последующие действия, такие как запуск очистки, запись в системный журнал и т. д.

  • где я могу найти подробности об автоматическом разбиении на разделы, применяемом в случае автозамены? Я перенаправляю в ZFS отдельные разделы, а не целые диски. автоматическое разбиение на разделы работает только при передаче всего диска в ZFS (обратите внимание, что это сама ZFS, а не ZED, для разбиения затронутых дисков). При передаче существующих разделов в ZFS (т.е. с использованием sda1 в качестве vdev) таблица разделов вообще не затрагивается.

4
ответ дан 2 September 2020 в 17:34

Теги

Похожие вопросы