Настройка программного RAID-массива
Данная методика начала применяться нами недавно, поэтому будьте внимательны:
возможно, еще не все грабли тут собраны. Учтите:
Я НЕ ПРЕДОСТАВЛЯЮ НИКАКИХ ГАРАНТИЙ НА ИЗЛОЖЕННУЮ МЕТОДИКУ -
ПРИМЕНЯЙТЕ ЕЕ НА СВОЙ СОБСТВЕННЫЙ СТРАХ И РИСК.
Если же у вас появятся какие-либо интересные соображения или
какой-то опыт ее применения - сообщите мне по указанному в конце страницы
адресу.
Общая информация.
Прежде всего я рекомендую ознакомиться с документом
Software-RAID.HOWTO,
чтобы представлять себе - что такое программный RAID и какой инструментарий
для управления ним существует в современном Linux'е.
В нашем случае создается
RAID-массив уровня 1, который называется также зеркалированием,
что и отражает его
суть. В массив включаются 2 жестких диска, являющихся копией друг друга. При
его работе запись выполняется на оба входящих диска одновременно (ну или
почти одновременно), а чтение производится с того из дисков, обращение к
которому в данный момент наиболее оптимально (с точки зрения драйвера). В
результате (по сравнению с работой без RAID) запись на диск замедляется, а
чтение - ускоряется. Но основное предназначение такой конструкции - отнюдь
не повышение производительности, а повышение надежности: в случае
аппаратного выхода из строя одного из дисков система будет продолжать
функционировать на оставшемся, а при установке нового винчестера можно будет
достаточно просто включить его в массив.
Современные дистрибутивы позволяют при установке системы выбирать режим
RAID. Однако механизм, имеющийся в инсталляторе используемого
мной дистрибутива (ALT Master 2.4) для этих
целей, меня не устроил по причинам отсутствия следующих возможностей:
- создания массива для боле чем 9 логических разделов;
- включения в RAID swap-раздела;
- создания RAID-массива для уже установленной системы;
- мониторинг состояния массива;
- механизм для простого включения нового диска в массив.
Предлагаемая методика базируется на
двух скриптах:
- createraide - запускается один раз для начального создания зеркала
- mdadm - следит за состоянием RAID-массива и управляет процессом
подключения нового диска. Запускается как сервис при каждом
запуске ОС.
ПРИМЕЧАНИЕ: Поскольку сервер в идеале должен запускаться
всегда, даже при выходе одного из дисков из строя, и зачастую -
без участия оператора, - данный скрипт в случае аварийной ситуации
должен выдавать на экран предупреждение, и, если оператор не
вмешивается - через какой-то
период времени продолжать загрузку ОС с оставшегося диска.
С помощью традиционного для скриптов средства формирования
экранных интерфейсов dialog реализовать такое поведение
пока невозможно, поэтому мне пришлось дописать dialog,
введя новую опцию --pause. Соответствующий
патч направлен авторам
dialog, и есть вероятность, что он будет включен
в следующую версию данного инструментария. Если же вы по каким-то
причинам не можете модифицировать dialog - вам придется
модифицировать скрипт mdadm, придумав что-то вместо
--pause.
Применение методики сводится к следующим шагам:
- установка ОС выполняется на один диск (будем называть его
диск1)
как обычно,
без использования RAID (или используется уже установленная система).
При установке учтите следующие моменты:
- Размеры жестких дисков разных моделей всегда хоть немного, но
различаются, а размеры зеркальных разделов должны быть
одинаковы. Поэтому для выравнивания возможного дисбаланса
размеров желательно оставить в конце диска1 небольшой (по
крайней мере на 100 МБ) раздел, который не будет включаться в
RAID-массив.
- Поскольку во главу угла в данном решении ставится надежность -
на разделах зеркала создается файловая система ext3,
являющаяся,
судя по многим отзывам, наиболее устойчивой.
- на всякий случай сохраните наиболее важные данные на каком-либо
внешнем носителе. В частности, полезно сохранить запись MBR диска1:
dd if=<диск1> of=disk1.mbr bs=1024 count=1
Это поможет в случае аварии быстро восстановить таблицу разделов и
состояние загрузчика, существующее на данный момент.
- исключите (закомментируйте) в /etc/fstab записи, определяющие
"не-linux" разделы и разделы на дисках, отличных
от диск1. Выполните аналогичные правки в /etc/lilo.conf.
- в системный блок устанавливается второй диск
(будем называть его диск2). В случае использования
IDE необходимо подключать разные диски - на разные контроллеры.
- отредактируйте скрипт createraid (комментарии в нем
достаточно понятны), установив значения параметров в соответствии
со своими реалиями. Особое внимание обратите на то, что в перечне
номеров логических разделов, подлежащих зеркалированию, номер
корневого (root) раздела следует указывать ПОСЛЕДНИМ.
- запускается скрипт createraid, который выполняет:
- разметку диска2 как элемента зеркала в деградированном
режиме (т.е. как если бы диск1 массива был отключен),
включая корневой раздел и раздел swap
- копирование данных с логических разделов диска1 на
логические разделы диска2
- модификацию описаний файловых систем (fstab) и загрузочной
записи (lilo)
- создание образа RAM-диска initrd,
поддерживающего загрузку с RAID-массива
- установку сервиса мониторинга RAID-массива
(/etc/init.d/mdadm)
- выполняется перезагрузка компьютера
- при запуске сервиса mdadm обнаруживается факт "выхода из
строя" диска1 и предлагается его заменить
- процедура замены диска1 приводит к тому, что:
- диск1 переразмечается как элемент зеркала,
его логические
разделы становятся "зеркалами" диска2;
- в фоновом режиме запускается копирование данных с диска2
на "свежеподключенный" диск1;
- еще раз перезаписывается загрузочная запись (lilo), с
учетом загрузки в режиме RAID
Что делать, если по каким-либо причинам у вас что-то пошло не так, и
система не загружается вообще ?
- загрузившись с инсталляционного диска в режиме resque,
восстановите сохраненную ранее запись MBR
- восстановите автоматически сохраненный на корневом разделе диска1
файл описания файловых систем /etc/fstab. Если
корневой раздел подмонтирован в директорию /mnt - выполните:
cd /mnt/etc
rm fstab
ln -s fstab.orig fstab
- отмонтируйте корневой раздел и перезагрузитесь.
Если же у вас все получилось - после завершения синхронизации вы получите
работающий RAID-массив. Сервис mdadm будет отслеживать состояние
винчестеров. Параметры данного сервиса устанавливаются в файле
/etc/sysconfig/mdadm:
- MAIL_TO - e-mail адрес, по которому будет отправлено сообщение в
случае выхода из строя одного из винчестеров во время работы системы
- PROGRAM - если указана исполняемая программа - она будет
выполнена при выходе из строя одного из винчестеров во время
работы системы
Если же отказ диска будет обнаружен при старте сервиса mdadm - вам будет
предложено заменить его.
ВОЗМОЖНЫЕ ПРОБЛЕМЫ.
Не все BIOSы позволяют загрузиться с сохранившегося диска, если второй вышел
из строя (наиболее часто это может наблюдаться при отказе диска hda в паре
hda/hdc). Поэтому после того как RAID сформирован - создайте загрузочную
дискету с помощью утилиты mkbootdisk - с нее вы сможете загрузиться
всегда.
Вто Июн 28 10:02:45 EEST 2005 yuk at iceb vinnitsa com