Я не собираюсь здесь описывать фундаментальные аспекты настройки raid0/1/5 на Linux, т.к. все полностью описано в других документах. Проблема, которой займусь я - это настройка raid на корневой файловой системе, и возможность сделать его загружаемым при помощи стандартного LILO. Документация, поставляемая с исходными текстами LILO (не руководствами) и с утилитами raidtools-0.90, описывает детали загрузки, загрузочные параметры и общую настройку raid соответственно.
Здесь описаны два варианта действий. Настройка и установка загружаемого корневого raid, и преобразование уже существующей не-raid системы в загружаемый корневой raid без потери данных.
Чтобы загрузочная информация была избыточной и легкой в сопровождении, создайте небольшой RAID1 и смонтируйте его в каталог /boot вашего системного диска. LILO не знает об устройствах 0x9?? и не может найти информацию во время загрузки, потому что подсистема raid еще не активна. Чтобы обойти это, вы можете передать LILO информацию о геометрии диска (дисков), из которой LILO сможет определить положение информации, необходимой для загрузки ядра, даже если он на RAID1-разделе. Это происходит потому, что раздел RAID1 аналогичен стандартному разделу, за исключением супер-блока raid, записанного в конце. Загружаемый raid-массив должен находиться в пределах первых 1024 Мбайт диска. Теоретически, он может начинаться, где угодно в 1024 Мегабайтном пространстве, но на практике мне так и не удалось его запустить, если загружаемый raid не находился в самом начале этого гигабайта. Возможно, это было из-за того, что я делал что-то глупое, но теперь это не имеет значения. С тех пор я всегда настраиваю все мои системы так, чтобы загружаемый raid-массив был первым разделом в системе. У меня есть следующие конфигурации корневых raid-систем, с загружаемым RAID1, подключенным к /boot с корневыми raid-массивами: RAID1, RAID5, RAID10 & RAID1-10 ( 1 зеркало + 1 raid0-блок). У последнего имеется особая пара lilo-файлов, потому что у всех дисков разные геометрии, однако, принципы первоначального загрузочного процесса абсолютно одинаковы. Корневые системы RAID10 и RAID1-10 требуют использования initrd для подключения корневой файловой системы после того, как процесс загрузки ядра закончен. Смотрите приложения с примерами конфигурационных файлов для всех моих систем.
Стандартный конфигурационный файл LILO выглядит примерно так:
# lilo.conf - предполагаем, что диск менее 1024 Мб
boot = /dev/hda
delay = 40 # многовато, но красиво
vga = normal # обычно не требуется
image = /bzImage
root = /dev/hda1
read-only
label = Linux
Пара конфигурационных файлов LILO для raid выглядят примерно так:
# lilo.conf.hda - первичный ide, главный диск
disk=/dev/md0
bios=0x80
sectors=63
heads=16
cylinders=39770
partition=/dev/md1
start=63
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
image=/boot/bzImage
root=/dev/md0
read-only
label=LinuxRaid
# ---------------------
# lilo.conf.hdc - вторичный ide, главный диск
disk=/dev/md0
bios=0x80 # см. замечание ниже
sectors=63
heads=16
cylinders=39770
partition=/dev/md1
start=63
boot=/dev/hdc # вот это второй диск
map=/boot/map
install=/boot/boot.b
image=/boot/bzImage
root=/dev/md0
read-only
label=LinuxRaid
Если ваш BIOS достаточно "умен" (многие нет), чтобы понять, что первый диск не работает или отсутствует, и затем начать загружаться со второго, то здесь должна находиться строка bios=81. Это ситуация больше подходит для SCSI-bios, чем для IDE-bios. Я просто планирую перенос диска, в случае проблем с главным загрузочным диском, чтобы заменить отказавший диск C.
Информация о геометрии диска может быть получена при помощи fdisk:
fdisk -ul (маленькая L) fdisk -ul /dev/hda Disk /dev/hda: 16 heads, 63 sectors, 39770 cylinders Units = sectors of 1 * 512 bytes Device Boot Start End Blocks Id System /dev/hda1 63 33263 16600+ fd Linux raid autodetect /dev/hda2 33264 443519 205128 82 Linux swap /dev/hda3 443520 40088159 19822320 fd Linux raid autodetect * Заметьте, что здесь приведено начало каждого раздела
Здесь приведен файл lilo.conf для raid, показанный выше, с комментариями к каждой строке.
# lilo.conf.hda - первичный ide, главный диск
# местоположение каталога /boot, в котором буден находиться
# ядро, таблицы Lilo, и т.п.
# Заметьте, что это не НАСТОЯЩИЙ раздел, в котором находятся
# загрузочный образ и информация, а устройство,
# которое логически содержит этот каталог.
# В этом примере /dev/md1 подключен к точке /dev/md0/boot
disk=/dev/md0
# указать LILO, которое BIOS-устройство использовать для загрузки, т.е. диск C:
bios=0x80
# указать LILO физическую геометрию устройства,
# которая не всегда совпадает с "логической"
# геометрией. Смотрите файловую систему /proc или
# просмотрите сообщения ядра при загрузке, когда он опрашивает диски
#
sectors=63
heads=16
cylinders=39770
# Это подставная строка, чтобы LILO был удовлетворен тем, что
# узнал raid-набор (set) и потом нашел НАЧАЛО
# загрузочного сектора. Для того, чтобы узнать
# для чего эта строка на самом деле, читайте
# документацию, идущую с пакетом исходных текстов LILO.
# Этот параметр "должен" отличаться от строки
# disk= ,приведенной выше. Это может быть любое другое mdx
# устройство, используемое или нет, и не обязательно должно быть тем,
# которое содержит информацию каталога /boot
#
partition=/dev/md1
# первый сектор раздела, содержащего каталог /boot
start=63
# настоящее устройство, куда LILO запишет загрузочную информацию
boot=/dev/hda
# логическое устройство, куда LILO поместит загрузочную информацию
map=/boot/map
install=/boot/boot.b
# логическое местоположение ядра
image=/boot/bzImage
# стандартные строки приведены ниже
# корневым (root) может быть raid1/4/5-устройство
root=/dev/md0
read-only
label=LinuxRaid