В моем виртуальном компьютере есть следующие настройки пула тестов 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
Устройство становится недоступным , но никогда не заменяется запасным. Есть ли способ заставить мой вариант использования работать?
источник
sdd
достаточно большой? Также нет смысла иметь двустороннее зеркало с запасным. Просто сделай это трехстороннее зеркало. Поэтому, если вы просто не тестируете запасную замену, ваша конфигурация не имеет смысла.Ответы:
вступление
Прежде всего, для тех, у кого такая же проблема в Ubuntu 16.04, в настоящее время это постоянная ошибка, и, насколько мне известно, она не была исправлена. Вы можете посетить беседу github здесь, чтобы увидеть ошибку, на которую я ссылаюсь. Во-вторых, я пишу этот пост как энтузиаст и средний пользователь Linux, я не разработчик или в настоящее время работаю над Linux как профессия. При этом я предоставлю информацию, которую нашел по этому вопросу, насколько мне известно.
Проблема:
Функциональность горячего резервирования, встроенная в
zfsonlinux
пакет, в настоящее время не работает, как указано на странице руководства.zpool
справочная страница:Примечание. Функционирование «холодного резерва» (запасного не заменяется автоматически) работает, но только в конфигурациях, состоящих из
mirrors
или любой из нихraidz's
. Если у вас есть такая конфигурация:При выходе из строя диска вы не сможете заменить его запасным из-за
pool I/O is currently suspended
ошибки.Попытки решения:
Это список пробных решений, которые я прошел, и результаты получены:
Автоматическая замена ZFS: Оказывается, что согласно
zpool
справочной странице и моему пониманию,autoreplace
функциональность заключается не в замене поврежденного диска на запасной, а в замене самого поврежденного диска любым новым устройством, найденным на его месте.zpool
справочная страница:autoreplace
это хорошо иметь, но для достижения функциональности горячего резерва я не верю, что это необходимо. Я не могу подтвердить это, кроме как через страницу справочника, потому что я не смог заставить запасных работать.ZED.rc: позже я нашел внутри разговора на GitHub , что
ZED_SPARE_ON_CHECKSUM_ERRORS
иZED_SPARE_ON_IO_ERRORS
флаги должны были быть установлены в пределахzed.rc
. Как сказал @ user121391 в своем ответе на этот пост, сервис / демон zed определяет состояние пула и то, что необходимо сделать на основе этого статуса. Вы можете увидеть zed.d на работе, запустивzpool events
. Больше на zed.d о Linux здесь . После установки флагов, перезагрузки и, на всякий случай, перенастройки нового пула, мое тестирование горячего резервирования снова оказалось отрицательным.Скрипты 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 с конфигурацией a
mirrored
илиraidz
(RAID5) в зависимости от производительности, которую я получаю при тестировании (зеркальное отображение будет быстрее, но я хочу увидеть скоростьraidz
) Горячий резерв увеличил бы избыточность обоих этих конфигов. Но, к сожалению, нам придется ждать дальнейшего развитияzfsonlinux
проекта.источник
Быстрый поиск дает следующее :
Похоже, что с ZoL вы также можете использовать ZED , демон событий ZFS, для этого.
источник
/usr/lib/x86_64-linux-gnu/zfs/zed.d/checksum-spare.sh
(может быть в другом месте на Ubuntu, но я в этом сомневаюсь).