Случилась недавно оказия, на веб-сервере под управлением старенькой FreeBSD 6.2 деградировал зеркальный RAID, собранный на встроенном чипсете. Результатом данной беды стала переустановка FreeBSD 9.0 и сборка нового RAID с новыми дисками средствами самой FreeBSD.
Решение перейти к столь крайним мерам было обусловлено тем, что система в током состоянии теряла всякий смысл, ибо после деградации RAID FreeBSD перестала запускаться. Скорее всего это связано с тем что RAID был программный (собран средствами встроенного чипсета) и при деградации FreeBSD перестала видеть массив и стала видеть просто два диска и как следствие невозможность запустить ОС (говорила мне мама, не доверяй программным RAIDам). Да я конечно мог бы снова синхронизировать диски и старая ОС скорее всего бы запустилась, но зачем оно мне в таком виде, если при следующей проблеме с RAID я снова получу нерабочую систему. Поэтому было решено отказаться от сборки RAID средствами чипсета и собрать его самой средствами самой FreeBSD 9.0. Да, это снова будет программный RAID, но лишнего RAID контроллера у меня не было и переходника под него для 1U сервера тоже.
Процесс сборки RAID не был мной придуман, а подсказан хорошим человеком, но дабы не забыть процедуру на будущее, решил её записать.
Для начала, разбираем встроенный RAID и оставляем диски раздельно. Устанавливаем на диск меньшего размера (если конечно они у вас не одинаковые) FreeBSD 9.0, в моем случае это был диск ada0. После установки загружаем свежеустановленную ОС и попадаем в консоль. На данный момент мы имеем два диска ada0 c установленной FreeBSD и пустой ada1. Первым делом сохраним разметку диска ada0 и восстановим её на диске ada1:
#gpart backup ada0 > ada0.gpt #gpart restore -F /dev/ada1 < ada0.gpt
Проверяем пезультат
#gpart show
Теперь надо сделать диск ada1 загрузочным, иначе в случае краха ada0 FreeBSD не откуда будет грузиться.
#gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada1
Теперь можно приступить к заркалированию разделов, правда сейчас корневой раздел уже загружен и ничего сделать мы с ним не сможем, поэтому перезагружаем систему и запускаемся с установочного диска FreeBSD и заходим в shell. Создаем зеркало для каждого раздела (номера партиций и названия могут отличаться используемой вами, поэтому будьте внимательны):
#gmirror label -vb round-robin boot /dev/ada0p1 #gmirror label -vb round-robin root /dev/ada0p2 #gmirror label -vb round-robin swap /dev/ada0p3 #gmirror load
Теперь добавляем имеющимся зеркалам их вторые половинки на на втором диске ada1:
#gmirror insert boot /dev/ada1p1 #gmirror insert root /dev/ada1p2 #gmirror insert swap /dev/ada1p3
Процесс синхронизации разделов довольно долгий и чем больше у вас диски тем дольше будет делать (в моем случае синзранизация дисков на 1Тб длилась часа 3). Проверить состояние синхронизации можно командой:
#gmirror status
Пока ждем синхронизации можем доделать оставшиеся дела, а именно добавить в загрузку ядра gmirror:
#mount /dev/mirror/root /mnt
#echo 'geom_mirror_load="YES"' > /mnt/boot/loader.conf
и отредактировать fstab под новые зеркальные разделы:
# Device Mountpoint FStype Options Dump Pass# /dev/mirror/root / ufs rw 1 1 /dev/mirror/swap none swap sw 0 0
Всё. Теперь можно перезагружаться и работать.