Boot + Root + Raid + Lilo : Программный Raid
Что вам потребуется до НАЧАЛА РАБОТЫ
Ниже перечислены пакеты, которые вам понадобятся, а также приведен список документации, которая отвечает на все обычные вопросы о настройке и запуске raid. Пожалуйста, прочитайте это внимательно.
Необходимые пакеты
Вам понадобится получить наиболее новые версии этих пакетов.
ядро linux, поддерживающее raid и initrd Я взял linux-2.2.14 с kernel.org
ftp://ftp.kernel.org/pub/linux/daemons/raid/alpha/ - самые новые утилиты и патч с поддержкой новых raid1/4/5 Я использовал http://people.redhat.com/mingo/raid-patches/
Где найти новые версии этого документа.
Можете просмотреть последнюю версию авторского оригинала этого документа. Исправления и предложения приветствуются!
Документация рекомендуемая для прочтения
Если вы планируете использовать raid1/5 поверх raid0, прочтите:
/usr/src/linux/Documentation/initrd.txt
а также документацию и руководства, поставляемые с утилитами raidtools.
Информационные ресурсы по RAID
Подключиться к спискам рассылки можно по адресам:
Этот достаточно спокоен: majordomo@nuclecu.unam.mx пошлите письмо с темой subscribe raiddevпочту посылайте по адресу: raiddev@nuclecu.unam.mx
Разработка Raid: majordomo@vger.rutgers.edu пошлите письмо с темой subscribe linux-raidпочту посылайте по адресу: linux-raid@vger.rutgers.edu (это по-видимому наиболее активный список)
Загружаемый Raid
Я не собираюсь здесь описывать фундаментальные аспекты настройки raid0/1/5 на Linux, т.к. все полностью описано в других документах. Проблема, которой займусь я - это настройка raid на корневой файловой системе, и возможность сделать его загружаемым при помощи стандартного LILO. Документация, поставляемая с исходными текстами LILO (не руководствами) и с утилитами raidtools-0.90, описывает детали загрузки, загрузочные параметры и общую настройку raid соответственно.
Здесь описаны два варианта действий. Настройка и установка загружаемого корневого raid, и преобразование уже существующей не-raid системы в загружаемый корневой raid без потери данных.
Загрузка RAID 1 при помощи стандартного LILO
Чтобы загрузочная информация была избыточной и легкой в сопровождении, создайте небольшой 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 для 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
Переход с не-raid на RAID1/4/5
Переход с не-raid системы к raid достаточно прост, и состоит из нескольких последовательных шагов, приведенных ниже. Описание приведено для системы с загрузочным, корневым и swap-разделами.
СТАРЫЙ диск в существующей системе:
/dev/hda1 загрузочный, возможно dos+loadlin или lilo
/dev/hda2 корневой
/dev/hda3 swap
Мы добавим дополнительный диск и преобразуем систему в RAID1. Вы можете легко добавить несколько дисков и сделать RAID5-массив, при помощи подобной процедуры.
Шаг 1 - готовим новое ядро
Скачайте новое чистое ядро, утилиты raidtools-0.90 (или более новую версию), и патч к ядру, для поддержки raid версии 0.90.
Соберите и установите raidtools и ПРОЧИТАЙТЕ документацию.
Соберите и установите ядро с поддержкой тех видов (0/1/4/5 ?) raid, которые вы будете использовать. Убедитесь в том, что разрешили автозапуск raid-устройств в конфигурации ядра. Удостоверьтесь в том, что ядро нормально загружается и изучите файл /proc/mdstat, чтобы еще раз убедиться в том, что необходимые вам виды raid поддерживаются ядром.
Шаг 2 - настраиваем raidtab для вашего нового raid-а.
Новый диск будет добавлен на второй IDE-контроллер как главное устройство, поэтому станет /dev/hdc
/dev/hdc1 16 Мб -- более чем достаточно для нескольких ядер
/dev/hdc2 большая часть диска
/dev/hdc3 еще немного swap-пространства, если необходимо. Если нет, увеличьте /dev/hdc2
Измените виды разделов /dev/hdc1 и /dev/hdc2 на вид "fd" для автозапуска raid.
Используя параметр failed-disk, создайте raidtab для необходимой конфигурации RAID1. Этот параметр (failed disk) должен быть последним в таблице.
# пример raidtab
# md0 - это корневой массив
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
chunk-size 32
# Свободные диски для реконструкции данных "на-ходу"
nr-spare-disks 0
persistent-superblock 1
device /dev/hdc2
raid-disk 0
# это наш старый диск, временно пометим его как отказавший
device /dev/hda2
failed-disk 1
# md1 - это загрузочный /boot массив
raiddev /dev/md1
raid-level 1
nr-raid-disks 2
chunk-size 32
# Свободные диски для реконструкции данных "на-ходу"
nr-spare-disks 0
persistent-superblock 1
device /dev/hdc1
raid-disk 0
# boot также пометим сломанным
device /dev/hda1
failed-disk 1
Создаем, форматируем и настраиваем RAID
Создайте md-устройства следующими командами:
mkraid /dev/md0
mkraid /dev/md1
Raid-устройства должны быть созданы, и запущены. Изучите /proc/mdstat, там должны быть указаны виды raid-устройств, поддерживаемые ядром, а также список работающих raid-устройств.
Отформатируйте загрузочное и корневое устройства командами:
mke2fs /dev/md0
mke2fs /dev/md1
Подключите новое корневое устройство туда, куда удобно, создайте в нем каталог /boot и подключите туда загрузочный раздел:
mount /dev/md0 /mnt
mkdir /mnt/boot
mount /dev/md1 /mnt/boot
Копируем текущую ОС на новое raid-устройство
Это достаточно просто и понятно.
cd /
# настройте скрипт для того чтобы это сделать
cp -a /bin /mnt
cp -a /dev /mnt
cp -a /etc /mnt
cp -a (все каталоги кроме /mnt, /proc, и сетевых дисков) /mnt
Процедура может усложниться, если вы подключили или сделали ссылки на другие диски к вашей корневой файловой системе. Пример, приведенный выше, предполагает простую систему, вам, возможно, придется немного изменить процедуру копирования.
Проверяем ваш новый RAID
Создайте загрузочный флоппи и запустите команду rdev для ядра.
dd if=kernal.image of=/dev/fd0 bs=2k
rdev /dev/fd0 /dev/md0
rdev -r /dev/fd0 0
rdev -R /dev/fd0 1
Измените файл fstab на RAID-устройстве для отражения новых точек подключения, как указано ниже:
/dev/md0 / ext2 defaults 1 1
/dev/md1 /boot ext2 defaults 1 1
Отключите raid-устройства и перезагрузите систему, чтобы убедиться в том, что все работает правильно.
umount /mnt/boot
umount /mnt
raidstop /dev/md0
raidstop /dev/md1
shutdown -r now
Ваша RAID-система должна загрузиться и работать в сокращенном (degraded) режиме с загрузочным флоппи-диском. Аккуратно проверьте, что вы скопировали ВСЕ на вашу новую raid-систему. Если вы что-то на этом этапе напутаете без сохранения резервной копии, ВАМ БУДЕТ НЕСЛАДКО!
Если что-то не заработало, перезагрузите вашу старую систему, вернитесь и исправьте все, пока все не будет нормально.
Интегрируем старый диск в raid-массив
Удачное завершение процедур предыдущего пункта означает, что raid-массив работает, но пока без излишеств. Теперь надо переделать разделы старого диска (дисков) для того, чтобы добавить его в raid-массив. Запомните, если геометрии дисков разные, то размер раздела на старом диске должен быть равен или больше размеров raid-разделов, а иначе их нельзя будет добавить в raid-массив.
Переделайте нужным образом разделы на старом диске, например:
/dev/hda1 равен или больше /dev/hdc1
/dev/hda2 равен или больше /dev/hdc2
/dev/hda3 нечто, оставшееся под swap или что-то еще...
Смените параметр failed-disk в raidtab на raid-disk и добавьте новые (старые) разделы к raid-массиву, что называется "на ходу" (hot add).
raidhotadd /dev/md1 /dev/hda1
raidhotadd /dev/md0 /dev/hda2
В файле /proc/mdstat должны теперь появиться одно или более raid-устройств, перестраивающих данные для новых разделов. Через минуту или две...или несколько, raid-массивы должны быть полностью синхронизированы (эта процедура может занять длительное время для больших разделов).
Использование вышеописанной процедуры настроит загружаемый raid на новой raid-паре. Пользуйтесь загрузочным флоппи-диском, пока настраиваете и тестируете последний шаг.
Пример raidtab
Пример RAID1 описан в первых главах этого документа
df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/md0 19510780 1763188 16756484 10% /
/dev/md1 15860 984 14051 7% /boot
# --------------------------
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 83 Linux native
/dev/hda3 443520 40088159 19822320 fd Linux raid autodetect
# --------------------------
fdisk -ul /dev/hdc
Disk /dev/hdc: 16 heads, 63 sectors, 39770 cylinders
Units = sectors of 1 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hdc1 63 33263 16600+ fd Linux raid autodetect
/dev/hdc2 33264 443519 205128 82 Linux swap
/dev/hdc3 443520 40088159 19822320 fd Linux raid autodetect
# --------------------------
# md0 - это корневой массив, примерно 20 Гб
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
chunk-size 32
# Свободные диски для реконструкции "на-ходу"
nr-spare-disks 0
persistent-superblock 1
device /dev/hda3
raid-disk 0
device /dev/hdc3
raid-disk 1
# md1 - это загрузочный массив, примерно 16 Мб
raiddev /dev/md1
raid-level 1
nr-raid-disks 2
chunk-size 32
# Свободные диски для реконструкции "на-ходу"
nr-spare-disks 0
persistent-superblock 1
device /dev/hda1
raid-disk 0
device /dev/hdc1
raid-disk 1
# --------------------------
# ГЛОБАЛЬНЫЙ РАЗДЕЛ
# устройство, содержащее каталог /boot
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
label=LinuxRaid
read-only
# -------------------------
# ГЛОБАЛЬНЫЙ РАЗДЕЛ
# устройство, содержащее каталог /boot
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
label=LinuxRaid
read-only
Пример реализации RAID5 на SCSI
4-дисковый SCSI RAID5
df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/md0 11753770 2146076 9000678 19% /
/dev/md1 15739 885 14042 6% /boot
# --------------------------
fdisk -ul /dev/sda
Disk /dev/sda: 64 heads, 32 sectors, 4095 cylinders
Units = sectors of 1 * 512 bytes
Device Boot Start End Blocks Id System
/dev/sda1 32 32767 16368 fd Linux raid autodetect
/dev/sda2 32768 292863 130048 5 Extended
/dev/sda3 292864 8386559 4046848 fd Linux raid autodetect
/dev/sda5 32800 260095 113648 82 Linux swap
/dev/sda6 260128 292863 16368 83 Linux native - test
# ------------------------
fdisk -ul /dev/sdb
Disk /dev/sdb: 64 heads, 32 sectors, 4095 cylinders
Units = sectors of 1 * 512 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 32 32767 16368 fd Linux raid autodetect
/dev/sdb2 32768 292863 130048 5 Extended
/dev/sdb3 292864 8386559 4046848 fd Linux raid autodetect
/dev/sdb5 32800 260095 113648 82 Linux swap
/dev/sdb6 260128 292863 16368 83 Linux native - test
# ------------------------
# fdisk -ul /dev/sdc
Disk /dev/sdc: 64 heads, 32 sectors, 4095 cylinders
Units = sectors of 1 * 512 bytes
Device Boot Start End Blocks Id System
/dev/sdc2 32 292863 146416 5 Extended
/dev/sdc3 292864 8386559 4046848 fd Linux raid autodetect
/dev/sdc5 64 260095 130016 83 Linux native - development
/dev/sdc6 260128 292863 16368 83 Linux native - test
# ------------------------
fdisk -ul /dev/sdd
Disk /dev/sdd: 64 heads, 32 sectors, 4095 cylinders
Units = sectors of 1 * 512 bytes
Device Boot Start End Blocks Id System
/dev/sdd2 32 292863 146416 5 Extended
/dev/sdd3 292864 8386559 4046848 fd Linux raid autodetect
/dev/sdd5 64 260095 130016 83 Linux native - development
/dev/sdd6 260128 292863 16368 83 Linux native - test
# --------------------------
# raidtab
#
raiddev /dev/md0
raid-level 5
nr-raid-disks 4
persistent-superblock 1
chunk-size 32
# Свободные диски для реконструкции "на-ходу"
nr-spare-disks 0
device /dev/sda3
raid-disk 0
device /dev/sdb3
raid-disk 1
device /dev/sdc3
raid-disk 2
device /dev/sdd3
raid-disk 3
# загрузочный раздел
#
raiddev /dev/md1
raid-level 1
nr-raid-disks 2
persistent-superblock 1
chunk-size 32
# Свободные диски для реконструкции "на-ходу"
nr-spare-disks 0
device /dev/sda1
raid-disk 0
device /dev/sdb1
raid-disk 1
# --------------------------
# cat lilo.conf.sda
# ГЛОБАЛЬНЫЙ РАЗДЕЛ
# устройство, содержащее каталог /boot
disk=/dev/md0
# геометрия
bios=0x80
sectors=32
heads=64
cylinders=4095
# подставная строка
partition=/dev/md1
# начало "диска" на устройстве
start=32
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
image=/boot/bzImage
root=/dev/md0
label=LinuxRaid
read-only
# ------------------------
# cat lilo.conf.sdb
# ГЛОБАЛЬНЫЙ РАЗДЕЛ
# устройство, содержащее каталог /boot
disk=/dev/md0
# геометрия
bios=0x80
sectors=32
heads=64
cylinders=4095
# подставная строка
partition=/dev/md1
# начало "диска" на устройстве
start=32
boot=/dev/sdb
map=/boot/map
install=/boot/boot.b
image=/boot/bzImage
root=/dev/md0
label=LinuxRaid
read-only
IDE RAID10 с initrd
RAID1 поверх полосатой пары RAID0.... диски на RAID0-массивах не совсем одинаковые, но близки по размерам.
/dev/md0 - это раздел /boot, автоматически запускаемый ядром
/dev/md1 и /dev/md3 - это два RAID0-массива автоматически запускаемые ядром
/dev/md2 - это корневой раздел, запускаемый initrd
df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/md2 118531 76485 35925 68% /
/dev/md0 1917 1361 457 75% /boot
# ----------------------------
fdisk -ul /dev/hda
Disk /dev/hda: 4 heads, 46 sectors, 903 cylinders
Units = sectors of 1 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 46 4231 2093 fd Linux raid autodetect
/dev/hda2 4232 166151 80960 fd Linux raid autodetect
# ----------------------------
fdisk -ul /dev/hdb
Disk /dev/hdb: 5 heads, 17 sectors, 981 cylinders
Units = sectors of 1 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hdb1 17 83384 41684 fd Linux raid autodetect
# ----------------------------
fdisk -ul /dev/hdc
Disk /dev/hdc: 7 heads, 17 sectors, 1024 cylinders
Units = sectors of 1 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hdc1 17 84013 41998+ fd Linux raid autodetect
/dev/hdc2 84014 121855 18921 82 Linux swap
# ----------------------------
fdisk -ul /dev/hdd
Disk /dev/hdd: 4 heads, 46 sectors, 903 cylinders
Units = sectors of 1 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hdd1 46 4231 2093 fd Linux raid autodetect
/dev/hdd2 4232 166151 80960 fd Linux raid autodetect
# ----------------------------
# raidtab
#
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
persistent-superblock 1
chunk-size 8
device /dev/hda1
raid-disk 0
device /dev/hdd1
raid-disk 1
raiddev /dev/md1
raid-level 0
nr-raid-disks 2
persistent-superblock 1
chunk-size 8
device /dev/hdd2
raid-disk 0
device /dev/hdb1
raid-disk 1
raiddev /dev/md2
raid-level 1
nr-raid-disks 2
persistent-superblock 1
chunk-size 8
device /dev/md1
raid-disk 0
device /dev/md3
raid-disk 1
raiddev /dev/md3
raid-level 0
nr-raid-disks 2
persistent-superblock 1
chunk-size 8
device /dev/hda2
raid-disk 0
device /dev/hdc1
raid-disk 1
# ----------------------------
Содержимое файла linuxrc
cat linuxrc
#!/bin/sh
# версия 1.02 2-22-00
#
############# настоящее НАЧАЛО 'linuxrc' ###############
#
# подключаем файловую систему /proc
/bin/mount /proc
# запускаем raid-1, сделанный из raid-0 массивов
/bin/raidstart /dev/md2
# выведем на консоль суть происходящего
/bin/cat /proc/mdstat
# Все нормально, позволяем ядру подключить /dev/md2
# заставляем ядро воспринимать /dev/md2 как корневую файловую систему
# Значение 0x900 - это номер устройства, рассчитанный, как
# 256*главное_число_устройства + зависимое_число_устройства
echo "/dev/md2 mounted on root"
echo 0x902>/proc/sys/kernel/real-root-dev
# отключаем /proc для освобождения памяти, выделенной устройству initrd
/bin/umount /proc
exit
# ----------------------------
Содержимое initrd
./bin/ash
./bin/echo
./bin/raidstart
./bin/mount
./bin/umount
./bin/cat
./bin/sh
./dev/tty1
./dev/md0
./dev/md1
./dev/md2
./dev/md3
./dev/md4
./dev/console
./dev/hda
./dev/hda1
./dev/hda2
./dev/hda3
./dev/hdb
./dev/hdb1
./dev/hdb2
./dev/hdb3
./dev/hdc
./dev/hdc1
./dev/hdc2
./dev/hdc3
./dev/hdd
./dev/hdd1
./dev/hdd2
./dev/hdd3
./dev/initrd
./dev/ram0
./dev/ram1
./dev/ram2
./dev/ram3
./dev/ram4
./dev/ram5
./dev/ram6
./dev/ram7
./etc/raidtab
./etc/fstab
./lib/ld-2.1.2.so
./lib/ld-linux.so.1
./lib/ld-linux.so.1.9.9
./lib/ld-linux.so.2
./lib/ld.so
./lib/libc-2.1.2.so
./lib/libc.so.6
./linuxrc
./proc
IDE RAID1-10 с initrd
Эта система создана из ассортимента старого и нового. Корневое устройство - это RAID1, созданный на основе одного RAID0-массива, из двух дисков разного размера и обычного дискового раздела большего размера. Подробное изучение файлов lilo.conf может вам в полной мере понять суть некоторых параметров.
/dev/md0 - это раздел с каталогом /boot, автоматически запускаемый ядром
/dev/md1 - это первая половина зеркального массива для md2, автоматически запускаемая ядром
/dev/hda3 - это вторая половина зеркального массива для md2
/dev/md2 - это RAID1 /dev/md1 + /dev/hda3, запускаемый initrd
df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/md2 138381 74421 56815 57% /
/dev/md0 2011 1360 549 71% /boot
# ----------------------------
fdisk -ul /dev/hda
Disk /dev/hda: 8 heads, 46 sectors, 903 cylinders
Units = sectors of 1 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 46 4415 2185 fd Linux raid autodetect
/dev/hda2 4416 43423 19504 82 Linux swap
/dev/hda3 43424 332303 144440 83 Linux native
# ----------------------------
fdisk -ul /dev/hdc
Disk /dev/hdc: 8 heads, 39 sectors, 762 cylinders
Units = sectors of 1 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hdc1 39 4367 2164+ fd Linux raid autodetect
/dev/hdc2 4368 70199 32916 82 Linux swap
/dev/hdc3 70200 237743 83772 fd Linux raid autodetect
# ----------------------------
fdisk -ul /dev/hdd
Disk /dev/hdd: 4 heads, 39 sectors, 762 cylinders
Units = sectors of 1 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hdd1 39 118871 59416+ fd Linux raid autodetect
# ----------------------------
# raidtab
#
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
persistent-superblock 1
chunk-size 8
device /dev/hdc1
raid-disk 1
device /dev/hda1
raid-disk 0
raiddev /dev/md1
raid-level 0
nr-raid-disks 2
persistent-superblock 1
chunk-size 8
device /dev/hdc3
raid-disk 0
device /dev/hdd1
raid-disk 1
raiddev /dev/md2
raid-level 1
nr-raid-disks 2
persistent-superblock 1
chunk-size 8
device /dev/md1
raid-disk 1
device /dev/hda3
raid-disk 0
# ----------------------------
cat linuxrc
#!/bin/sh
# версия 1.02 2-22-00
#
############# настоящее НАЧАЛО 'linuxrc' ###############
#
# подключаем файловую систему /proc
/bin/mount /proc
# автозапуск раздела с каталогом /boot и raid0
/bin/raidstart /dev/md2
# выведем на консоль суть происходящего
/bin/cat /proc/mdstat
# Все нормально, позволяем ядру подключить /dev/md2
# заставляем ядро воспринимать /dev/md2 как корневую файловую систему
# Значение 0x900 - это номер устройства, рассчитанный, как
# 256*главное_число_устройства + зависимое_число_устройства
echo "/dev/md2 mounted on root"
echo 0x902>/proc/sys/kernel/real-root-dev
# отключаем /proc для освобождения памяти, выделенной устройству initrd
/bin/umount /proc
exit
# ----------------------------
Содержимое initrd.gz
./bin
./bin/ash
./bin/echo
./bin/raidstart
./bin/mount
./bin/umount
./bin/cat
./bin/sh
./dev/tty1
./dev/md0
./dev/md1
./dev/md2
./dev/md3
./dev/console
./dev/hda
./dev/hda1
./dev/hda2
./dev/hda3
./dev/hdc
./dev/hdc1
./dev/hdc2
./dev/hdc3
./dev/hdd
./dev/hdd1
./dev/hdd2
./dev/hdd3
./dev/initrd
./dev/ram0
./dev/ram1
./dev/ram2
./dev/ram3
./dev/ram4
./dev/ram5
./dev/ram6
./dev/ram7
./etc/raidtab
./etc/fstab
./lib/ld-2.1.2.so
./lib/ld-linux.so.1
./lib/ld-linux.so.1.9.9
./lib/ld-linux.so.2
./lib/ld.so
./lib/libc-2.1.2.so
./lib/libc.so.6
./linuxrc
./proc
# ----------------------------
cat lilo.conf.hda
# ГЛОБАЛЬНЫЙ РАЗДЕЛ
# устройство содержащее каталог /boot
disk=/dev/md2
# геометрия
bios=0x80
cylinders=903
heads=8
sectors=46
# геометрия 2-го диска
# параметр BIOS будет аналогичный, потому что это все переместится на hda
# cylinders=762
# heads=8
# sectors=39
# подставная строка
partition=/dev/md0
# начало "диска" на устройстве
start=46
# второе устройство
# start=39
# У ядра 2.2.14, видимо есть кое-какие проблемы с распознаванием правильных IRQ
append = "ide1=0x170,0x376,12 ether=10,0x300,eth0 ether=5,0x320,eth1"
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
initrd=/boot/initrd.gz
image=/boot/zImage
root=/dev/md2
label=LinuxRaid
read-only
# ----------------------------
cat lilo.conf.hdc
# ГЛОБАЛЬНЫЙ РАЗДЕЛ
# устройство, содержащее каталог /boot
disk=/dev/md2
# геометрия
bios=0x80
# cylinders=903
# heads=8
# sectors=46
# геометрия 2-го диска
# параметр BIOS будет аналогичный, потому что это все переместится на hda
cylinders=762
heads=8
sectors=39
# подставная строка
partition=/dev/md0
# начало "диска" на устройстве
# start=46
# второе устройство
start=39
# У ядра 2.2.14, видимо есть кое-какие проблемы с распознаванием правильных IRQ
append = "ide1=0x170,0x376,12 ether=10,0x300,eth0 ether=5,0x320,eth1"
boot=/dev/hdc
map=/boot/map
install=/boot/boot.b
initrd=/boot/initrd.gz
image=/boot/zImage
root=/dev/md2
label=LinuxRaid
read-only