пятница, 27 марта 2009 г.

Работа с зеркалами ZFS root pool

Когда мне пришлось делать зеркала ZFS для root pool, все было гладко и просто. И я слышал множество грозных предупреждений на тему того, что-де, и баги незакрытые есть, и проблема запуститься с половины зеркала, особенно в x86/x64. И массу других столь же жутких страшилок, о чем можно судить по поиску в Гугле и на docs.sun.com. Что-де нужно и экспорт пула выполнять, и тому подобные рукопашные процедуры, и загрузку с внешнего носителя нужно обеспечить итп.

Насколько эти жуткие истории праводподобны?

Не далее как сегодня предоставился случай проверить все страшилки на кошечках, сиречь, на себе.

Итак, задача.

Есть зеркалированный root pool ZFS на i86pc (совершенно заурядный писюк с двумя A TA-дисками на 80 Гб). ОС Solaris 10 10/08 с ядром 138889-07 (установлены все обновления на сегодняшний день).

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

Оба диска содержат установленный boot loader и совершенно одинаковы.

1 подход. После успешного выполнения команды zpool detach rpool c1d1s0 и физического отключения диска загрузка новой машины с этого диска закончилась неудачей. Система вылетела в командную строку GRUB, не давая никакой возможности любого запуска. Cannot mount partition. Точка. Аминь.

2 подход. Относим второй диск обратно, аттачим к зеркалу в пул и ресильверим. Записываем GRUB на диск:

# /boot/grub/installgrub -m stage1 stage2 /dev/rdsk/c1d1s0

Затем, не выполняя detach, выключаем систему и отключаем второй диск. Вынимаем. Включаем первую систему. Естественно, zpool status показывает для второго отключенного диска UNAVAILABLE.

Детачим физически уже отсутствующий диск:

# zpool detach rpool c1d1s0

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

Замечание: ВАЖНО - второй диск подключается так же, как он стоял в первой машине. То есть на тот же порт и на тот же разъем шлейфа (оба диска стоят в режиме CS).

Стартует.

zpool status показывает недоступным первый диск. Ошибок на диске нет.

Детачим отсутствующий первый диск.

Выключаем машину.

На место отсутствующего первого диска подключаем другой пустой диск.

Загружаемся с реконфигурацией.

Используем format для создания метки диска, и для разбивки слайса 0.

Аттачим первый диск ко второму. Примерно через 20 минут (после ресильверинга) - вуаля,
реконструкция завершена.

Обратите внимание: никаких архисложных манипуляций с загрузчиком, дисками, БИОСом или собственно конфигурациями ZFS.

Собственно, для окончательной расстановки точек над Ё после ресильверинга БИОС выставлялся на старт с любого из зеркал - старт выполняется.

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

Например, на родной архитектуре x64 ставим загрузку (как на SPARC) последовательно с первого и второго диска зеркалированного пула. И при полном отказе в случае рестарта системы стартуем при перезапуске с зеркала.

Замечание: Важно не забыть при добавлении дисков в зеркалированный пул записать на каждый из них загрузчик.

Все просто. Не надо усложнять сущего сверх необходимого. ;)