ZFS Hot Spare не работает

1688
Tristan Vigil

В моем виртуальном компьютере есть следующие настройки пула тестов 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 заменить любой плохой диск в случае обнаружения. Когда вы удаляете диск из vm, говорите 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Устройство становится недоступным, но никогда не заменяется запасным. Есть ли способ заставить мой вариант использования работать?

3
«Sdd» достаточно велик? Также нет смысла иметь двустороннее зеркало с запасным. Просто сделай это трехстороннее зеркало. Поэтому, если вы просто не тестируете запасную замену, ваша конфигурация не имеет смысла. Andrew Henle 7 лет назад 0
@ AndrewHenle Я не планирую делать эту конфигурацию в производственном процессе, я тестирую с зеркалом, потому что в моем тестировании это единственная конфигурация, которая, кажется, удаленно работает с резервной. Я еще не играл с raidz, я планирую сделать это сегодня, но, как выясняется, в Ubuntu есть постоянная ошибка с горячим резервом. Позже я опубликую редактирование своего вопроса сегодня. Спасибо за совет! Tristan Vigil 7 лет назад 0

2 ответа на вопрос

2
Tristan Vigil

вступление

Прежде всего, для тех, у кого такая же проблема в 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ошибки.

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

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

  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.shand и checksum-spare.shвручную, и, судя по времени, затраченному на выполнение, а также неизменному состоянию пула, они, похоже, не работали правильно. Может быть, это потенциальный источник проблемы.

Мои планы

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

Хорошая рецензия. Я думаю, что медленный прогресс с ошибкой заключается в том, что горячие резервы больше не так полезны - единственная ситуация, в которой они хороши, это если у вас есть несколько разделенных пулов с низкой избыточностью, в противном случае вы получите гораздо большую выгоду от добавления диска непосредственно в пул. Помимо raidz1, который я бы больше не использовал сегодня из-за проблемы с отверстием для записи, это оставляет только несколько двусторонних зеркал или полосатых зеркал, где запасные части будут иметь преимущество. user121391 7 лет назад 1
0
user121391

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

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

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

Да, ZED поставляется со скриптами для обработки этого сценария. Смотрите `/ usr / lib / x86_64-linux-gnu / zfs / zed.d / checkum-spare.sh` (может быть в другом месте в Ubuntu, но я сомневаюсь в этом). a CVn 7 лет назад 2

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