Я не собираюсь здесь описывать фундаментальные аспекты настройки 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