тестирование ZFS – как уничтожить UNAVAIL пул без перезагрузки

Вопрос или проблема

Я тестирую ZFSonLinux, и у меня есть экспериментальный пул с именем usbcka. В нем только тестовые данные. Я симулирую сбой оборудования, чтобы определить поведение в этом сценарии. Я знаю, что эта конфигурация не имеет избыточности, и это принимается как риск (решение не было принято мной). ИСПРАВЛЕНИЕ: дополнительная информация: ОС будет находиться на избыточном хранилище.

root@carbon:~# zpool status -xv
  pool: usbcka
 состояние: UNAVAIL
 статус: Одно или несколько устройств неисправны в ответ на сбои ввода-вывода.
 действие: Убедитесь, что затронутые устройства подключены, затем выполните 'zpool clear'.
   см.: http://zfsonlinux.org/msg/ZFS-8000-HC
  сканирование: не запрашивалось
конфигурация:

    ИМЯ        СОСТОЯНИЕ     ЧТЕНИЕ ЗАПИСЬ CHECKSUM
    usbcka      UNAVAIL      0     0     0  недостаточно реплик
      usb1      ВКЛЮЧЕНО       0     0     0
      usb2      НЕИСПРАВНО      0     0     0  слишком много ошибок

ошибки: Список ошибок недоступен (недостаточно привилегий)

Устройства usb1 и usb2 — это устройства LUKS, смонтированные с помощью cryptsetup.

** В рамках теста я намеренно физически отключил подлежащее устройство для usb2 ** Предположим, что неисправное устройство было жестким диском, который невозможно отремонтировать, сбой оборудования.

Я пробовал

root@carbon:~# zpool destroy -f usbcka
невозможно открыть 'usbcka': ввод-вывод пула в настоящее время приостановлен

root@carbon:~# zpool set failmode=continue usbcka
невозможно установить свойство для 'usbcka': ввод-вывод пула в настоящее время приостановлен

Также

zpool clear usbcka

ничего не делает, пустой вывод

Также

zpool export usbcka

Зависает

Как уничтожить пул без перезагрузки?

Я хочу использовать еще работающие устройства для создания нового пула

Причина, по которой я не хочу перезагрузки, заключается в том, что я тестирую, как ZFS выходит из строя, когда устройство неисправно, моя цель — использовать ZFS на сервере компании. Этот сервер просто не может быть перезагружен по моему желанию, если один из 10 дисков выходит из строя, и в нем есть лотки для горячей замены.

Я искал решения, но все они в конечном итоге приводят к решению с перезагрузкой.

root@carbon:~# zfs list usbcka
невозможно открыть 'usbcka': ввод-вывод пула в настоящее время приостановлен

root@carbon:~# zpool get all usbcka
ИМЯ    СВОЙСТВО                    ЗНАЧЕНИЕ                       ИСТОЧНИК
usbcka  размер                        174G                        -
usbcka  емкость                      1%                          -
usbcka  altroot                     -                           по умолчанию
usbcka  состояние                    UNAVAIL                     -
usbcka  guid                        1317589842010265379         по умолчанию
usbcka  версия                     -                           по умолчанию
usbcka  bootfs                      -                           по умолчанию
usbcka  делегирование               включено                   по умолчанию
usbcka  автоматическая замена       отключено                  по умолчанию
usbcka  файл кеша                   -                           по умолчанию
usbcka  режим сбоя                 ожидание                    по умолчанию
usbcka  списки снапшотов           отключено                  по умолчанию
usbcka  автоматическое расширение    отключено                  по умолчанию
usbcka  dedupditto                  0                           по умолчанию
usbcka  dedupratio                  1.00x                       -
usbcka  свободно                    170G                        -
usbcka  выделено                   3.26G                       -
usbcka  только для чтения           отключено                  -
usbcka  ashift                      13                          локально
usbcka  комментарий                 -                           по умолчанию
usbcka  размер_расширения            -                           -
usbcka  освобождение                0                           по умолчанию
usbcka  фрагментация                1%                          -
usbcka  утечка                      0                           по умолчанию
usbcka  feature@async_destroy       включено                     локально
usbcka  feature@empty_bpobj         включено                     локально
usbcka  feature@lz4_compress        активно                      локально
usbcka  feature@spacemap_histogram  активно                      локально
usbcka  feature@enabled_txg         активно                      локально
usbcka  feature@hole_birth          активно                      локально
usbcka  feature@extensible_dataset  включено                     локально
usbcka  feature@embedded_data       активно                      локально
usbcka  feature@bookmarks           включено                     локально
usbcka  feature@filesystem_limits   включено                     локально
usbcka  feature@large_blocks        включено                     локально

У меня была такая же проблема на debian testing с ядром 4.14 и модулем zfs 0.7.6. Но я думаю, что такое поведение одинаково на всех Linux-системах.

Чтобы уничтожить пул UNAVAIL, где статус выглядит так:

user@system: ~ $ sudo zpool status -xv
pool: icy_tank
состояние: UNAVAIL
статус: Одно или несколько устройств неисправны в ответ на сбои ввода-вывода.
действие: Убедитесь, что затронутые устройства подключены, затем выполните 'zpool clear'.
см.: http://zfsonlinux.org/msg/ZFS-8000-HC
сканирование: не запрашивалось
конфигурация:

    ИМЯ        СОСТОЯНИЕ     ЧТЕНИЕ ЗАПИСЬ CHECKSUM
    icy_tank    UNAVAIL      0     0     0  недостаточно реплик
      sdb       UNAVAIL      0     0     0

ошибки: Список ошибок недоступен: ввод-вывод пула в настоящее время приостановлен

вам нужно перезапустить zed, демон событий zfs, сначала перезапустив всю систему zfs-target.

sudo systemctl restart zfs.target

После этого шага пул можно очистить.

sudo zpool clear icy_tank

Если устройство (например, sdb) доступно в это время и sdb является частью пула, zpool немедленно начнет проверку на этом устройстве.

pool: icy_tank
состояние: ONLINE
статус: Одно или несколько устройств испытали ошибку, что привело к
    повреждению данных.  Приложения могут быть затронуты.
действие: Восстановите файл, если это возможно.  В противном случае восстановите
    весь пул из резервной копии.
см.: http://zfsonlinux.org/msg/ZFS-8000-8A
сканирование: проверка в процессе с среды, 7 марта 2018 г., 20:27:55
    316M отсканировано из 121G со скоростью 9,89M/s, 3ч28м до завершения
    0B отремонтировано, 0,26% завершено
конфигурация:

    ИМЯ        СОСТОЯНИЕ     ЧТЕНИЕ ЗАПИСЬ CHECKSUM
    icy_tank    ONLINE       0     0     0
      sdb       ONLINE       0     0     0

ошибки: 4 ошибки данных, используйте '-v' для списка

Ответ или решение

Как уничтожить пул ZFS в состоянии UNAVAIL без перезагрузки

При тестировании файловой системы ZFS на базе Linux вы столкнулись с ситуацией, когда ваш пул данных «usbcka» находится в состоянии UNAVAIL, и вы хотите удалить его без перезагрузки системы. Это важная задача, поскольку системы на ZFS часто требуют высокой доступности, и требуется умение работать с возможными сбоями оборудования, не прерывая работу сервера.

Суть проблемы

Пул «usbcka» стал недоступным из-за сбоя одного из устройств, что видно из результата команды zpool status -xv. Устройство «usb2» находится в состоянии FAULTED, что привело к тому, что пул больше не может быть доступен:

pool: usbcka
state: UNAVAIL
status: One or more devices are faulted in response to IO failures.

Попытки использовать команды zpool destroy и другие управляющие команды завершаются ошибками, так как пул не может быть открыт, и ввод/вывод приостановлен.

Варианты решения

  1. Перезапуск ZED (ZFS Event Daemon)

    Первоначально, ZFS может блокировать дальнейшие действия при недоступности пула. В этом случае можно попробовать перезапустить службу zfs.target, которая управляет событиями ZFS. Выполните команду:

    sudo systemctl restart zfs.target

    Этот шаг может разблокировать состояние пула и позволить вам выполнить последующие команды, такие как zpool clear или даже zpool destroy.

  2. Очистка пула

    После перезапуска zfs.target, попробуйте очистить пул с помощью команды:

    sudo zpool clear usbcka

    Это может вернуть пул в состояние, где он может быть доступен для дальнейшей работы, включая уничтожение.

  3. Удаление пула

    Если вышеуказанная команда сработала, и пул теперь доступен, вы сможете выполнить:

    sudo zpool destroy -f usbcka

    Это приведет к уничтожению пула и освобождению ресурсов, которые были задействованы в устройстве.

Замечания

  • Если команды не сработают, возможно, что ZFS не сможет восстановить доступ к пулу, и потребуется физическое вмешательство (восстановление устройства). Однако, учитывая ваш сценарий тестирования, попытку впредь можно совершать без перезагрузки системы.
  • Следует помнить, что эти действия могут повлечь за собой потерю данных, и аналогичные процедуры следует выполнять только для тестовых данных, как в вашем случае.

Заключение

Зная, как управлять состоянием пула в ZFS, вы сможете более эффективно реагировать на.hardware failures в реальных условиях эксплуатации. Используя указанные шаги, вы сможете удалить недоступные пулы, не прибегая к перезагрузке системы. Это значительно повысит уровень доступности вашего сервера, особенно в средах с высокой нагрузкой и потребностью в постоянной работе.

Оцените материал
Добавить комментарий

Капча загружается...