3

В моем виртуальном компьютере есть следующие настройки пула тестов ZFS:

    NAME        STATE     READ WRITE CKSUM
    pool        DEGRADED     0     0     0
      mirror-0  DEGRADED     0     0     0
        sdb     ONLINE       0     0     0
        sdc     ONLINE       0     0     0
    spares
      sdd       AVAIL

Я пытаюсь проверить возможность замены диска, который автоматически становится недоступным в пуле zfs. Например, если по какой-либо причине диск извлекается из системы, запасное погружение может занять место сразу после извлечения диска. Я настроил spare диск и, исходя из прочитанного мною, я понимаю, что это должно достичь моей цели. Я также установил флаг autoreplace on чтобы zfs заменил любой неисправный диск в случае его обнаружения. Когда вы удаляете диск из виртуальной машины, произнесите sdb и перепроверьте состояние zfs, это выглядит следующим образом:

    NAME        STATE     READ WRITE CKSUM
    pool        DEGRADED     0     0     0
      mirror-0  DEGRADED     0     0     0
        sdb     UNAVAIL      0     0     0
        sdc     ONLINE       0     0     0
    spares
      sdd       AVAIL

Устройство sdb становится недоступным, но никогда не заменяется запасным. Есть ли способ заставить мой вариант использования работать?

2 ответа2

2

вступление

Прежде всего, для тех, у кого такая же проблема в Ubuntu 16.04, в настоящее время это постоянная ошибка, и, насколько мне известно, она не была исправлена. Вы можете посетить беседу github здесь, чтобы увидеть ошибку, на которую я ссылаюсь. Во-вторых, я пишу этот пост как энтузиаст и средний пользователь Linux, я не разработчик или в настоящее время работаю над Linux как профессия. При этом я предоставлю информацию, которую я нашел по этому вопросу, насколько мне известно.

Проблема:

Функциональность горячего резервирования, встроенная в пакет zfsonlinux , в настоящее время не работает, как указано на странице руководства. Страница zpool :

Hot Spares
   ZFS allows devices to be associated with pools as "hot spares".
   These devices are not actively used in the pool, but when an active
   device fails, it is automatically replaced by a hot spare.

Примечание. Функционирование Cold Spare (запасное устройство не заменяется автоматически) работает, но только в конфигурациях, состоящих из mirrors или любого из raidz's . Если у вас есть такая конфигурация:

NAME      STATE     READ WRITE CKSUM
pool      ONLINE       0     0     0
  sdb     ONLINE       0     0     0
  sdc     ONLINE       0     0     0
spares
  sdd     AVAIL

При выходе из строя диска вы не сможете заменить его запасным из-за того, что в pool I/O is currently suspended ошибка.

Попытки решения:

Это список пробных решений, через которые я прошел, и полученные результаты:

  1. ZFS автоматически заменить: Получается, что согласно странице zpool людей и моего пониманию его, функциональность autoreplace заменить не заменить поврежденный диск с запасным, а заменить сам поврежденный диск с любым новым устройством нашли на его месте. Страница zpool :

    If set to "on", any new device, found in the same physical location
    as a device that previously belonged to the pool, is automatically 
    formatted and replaced.
    

    autoreplace хороша, но для достижения функциональности горячего резерва я не верю, что это необходимо. Я не могу подтвердить это, кроме как через страницу справочника, потому что я не смог заставить запасных работать.

  2. ZED.rc: Позже я узнал из разговора на github, что флаги ZED_SPARE_ON_CHECKSUM_ERRORS и ZED_SPARE_ON_IO_ERRORS необходимо установить в zed.rc Как сказал @ user121391 в своем ответе на этот пост, сервис / демон zed определяет состояние пула и то, что необходимо сделать на основе этого статуса. Вы можете увидеть zed.d на работе, запустив zpool events . Больше на zed.d на linux здесь . После установки флагов, перезагрузки и, на всякий случай, перенастройки нового пула, мое тестирование горячего резерва снова оказалось отрицательным.

  3. Скрипты ZED.d: В комментарии @Michael Kjörling он упомянул некоторые скрипты, упакованные с ZED, которые написаны, чтобы помочь в сценарии горячего резервирования. Я действительно нашел сценарии, расположенные в /etc/zfs/zed.d . Вы можете просмотреть эти скрипты на странице github здесь . Из моего понимания zed.d, когда событие запускается, демон ZED запускает один из этих сценариев в зависимости от его состояния. Это , как говорится я пытаюсь запустить io-spare.sh и checksum-spare.sh вручную и , судя по времени , когда они приняли для выполнения, а также неизменное состояние бассейна, они , похоже , не должны быть запущены правильно. Может быть, это потенциальный источник проблемы.

Мои планы

Насколько мне известно, для пользователей Ubuntu 16.04 ZFS в настоящее время нет решения этой проблемы. Я планирую продолжать использовать ZFS с конфигурацией mirrored или raidz(RAID5) в зависимости от производительности, которую я получаю при тестировании (зеркальное отображение будет быстрее, но я хочу видеть скорость raidz). Горячий резерв увеличил бы избыточность оба эти конфига, но, к сожалению, нам придется подождать до дальнейшей разработки проекта zfsonlinux .

0

Быстрый поиск дает следующее:

В [Open] Solaris это обрабатывается демоном событий. Автозамена вкл / выкл просто говорит демону, стоит ли делать замену. В FreeBSD настройка автозамены по умолчанию ничего не делает - вам нужно написать правило devd для обработки фактической замены. Я не уверен, что Linux делает, но я уверен, что он может быть добавлен в systemd

Похоже, что с ZoL вы также можете использовать ZED, демон событий ZFS, для этого.

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