Автозамена ZFS недоступен накопитель
В моем виртуальном компьютере есть следующие настройки пула тестов 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
устройство становится недоступным, но никогда не заменяется запасным. Есть ли способ заставить мой вариант использования работать?
1 ответ
вступление
Прежде всего, для тех, у кого такая же проблема в 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.
Примечание. Функционирование "холодного резерва" (запасного не заменяется автоматически) работает, но только в конфигурациях, состоящих из 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
ошибка.
Попытки решения:
Это список пробных решений, которые я прошел, и результаты получены:
Автоматическая замена ZFS: получается, что согласно
zpool
man-страница и мое понимание этого,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
это хорошо иметь, но для достижения функциональности горячего резерва я не верю, что это необходимо. Я не могу подтвердить это, кроме как через страницу справочника, потому что я не смог заставить запасных работать.ZED.rc: Позже я узнал из разговора на github, что
ZED_SPARE_ON_CHECKSUM_ERRORS
а такжеZED_SPARE_ON_IO_ERRORS
флаги должны быть установлены в пределахzed.rc
, Как сказал @user121391 в своем ответе на этот пост, сервис / демон zed определяет состояние пула и то, что необходимо сделать на основе этого статуса. Вы можете увидеть zed.d на работе, запустивzpool events
, После установки флагов, перезагрузки и, на всякий случай, перенастройки нового пула, мое тестирование горячего резервирования снова оказалось отрицательным.Скрипты 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
проект. v