Библиотека сайта rus-linux.net
Мини HOWTO:Boot + Root + Raid + Lilo : Программный Raid
Michael Robinton, Michael@BizSystems.com
Перевод: Станислав Рогин, SWSoft Pte Ltd.,
версия 1.03, 4 мая 2000Этот документ содержит указания, как настроить raid, используя утилиты raidtools версии 0.90 для загрузки с массива raid, подключенного в качестве корневой файловой системы, используя стандартный LILO. Также здесь приведена процедура преобразования обычного диска в зеркальный набор (mirror set) raid1 или raid5 без потерь данных на исходном диске.
1. Введение
1.1 Благодарности
Информация, которую я собрал здесь была изначально подготовлена Harald
Nordgеrd-Hansen <
hnh@bukharin.hiof.no> и была послана в список рассылки raid в
файле lilo.conf с комментариями Martin Bene
<
mb@sime.com.
Большое спасибо им за помощь. Я попытался собрать воедино эту информацию
и вспомогательную работу, проделанную многими, кто участвует в списке
рассылки raid и в проекте linux raid, в некоторое подобие КНИГИ
РЕЦЕПТОВ, включив примеры из реально работающих систем, чтобы было
проще понять и настроить загружаемый корневой raid (bootable root raid).
Один раздел посвящен преобразованию стандартной однодисковой системы в
RAID. Ключом к удачному преобразованию, по моему скромному мнению, является
понимание, что же такое загружаемый корневой raid.
1.2 Ошибки
Да, я уверен, что они есть. Если вы будете настолько добры, чтобы сообщить о них, то я исправлю документ. ;-)
1.3 Copyright Notice
This document is GNU copyleft by Michael Robinton Michael@BizSystems.com.
Permission to use, copy, distribute this document for any purpose is hereby granted, provided that the author's / editor's name and this notice appear in all copies and/or supporting documents; and that an unmodified version of this document is made freely available. This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, either expressed or implied. While every effort has been taken to ensure the accuracy of the information documented herein, the author / editor / maintainer assumes NO RESPONSIBILITY for any errors, or for any damages, direct or consequential, as a result of the use of the information documented herein.
1.4 Авторские права
Авторские права на русский перевод этого текста принадлежат © 2000 SWSoft Pte Ltd. Все права зарезервированы.
Этот документ является частью проекта Linux HOWTO.
Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.
Все переводы и производные работы, выполненные по документам Linux HOWTO, должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу, приведенному ниже.
Мы бы хотели распространить эту информацию по всем возможным каналам. Но
при этом сохранить авторские права и быть уведомленными о всех планах
распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь
к координатору проекта Linux HOWTO по электронной почте:
linux-howto@metalab.unc.edu
, или к координатору русского
перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу
linux-howto@asplinux.ru
2. Что вам потребуется до НАЧАЛА РАБОТЫ
Ниже перечислены пакеты, которые вам понадобятся, а также приведен список документации, которая отвечает на все обычные вопросы о настройке и запуске raid. Пожалуйста, прочитайте это внимательно.
2.1 Необходимые пакеты
Вам понадобится получить наиболее новые версии этих пакетов.
- ядро 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/
2.2 Где найти новые версии этого документа.
Можете просмотреть последнюю версию авторского оригинала этого документа. Исправления и предложения приветствуются!
Мини-HOWTO Boot+Root+Raid+Lilo
Формат LaTeX (для DVI и PostScript), чистый текст, и HTML.
http://www.linuxdoc.org/HOWTO/mini/Boot+Root+Raid+LILO.htmlSGML и HTML.
ftp.bizsystems.net/pub/raid/
2.3 Документация рекомендуемая для прочтения
Если вы планируете использовать raid1/5 поверх raid0, прочтите:
/usr/src/linux/Documentation/initrd.txt
а также документацию и руководства, поставляемые с утилитами raidtools.
и..... Software-RAID-HOWTO.html
2.4 Информационные ресурсы по RAID
Подключиться к спискам рассылки можно по адресам:
- Этот достаточно спокоен:
majordomo@nuclecu.unam.mx пошлите письмо с темой
subscribe raiddev
почту посылайте по адресу: raiddev@nuclecu.unam.mx
- Разработка Raid:
majordomo@vger.rutgers.edu пошлите письмо с темой
subscribe linux-raid
почту посылайте по адресу: linux-raid@vger.rutgers.edu (это по-видимому наиболее активный список)
3. Загружаемый Raid
Я не собираюсь здесь описывать фундаментальные аспекты настройки raid0/1/5 на Linux, т.к. все полностью описано в других документах. Проблема, которой займусь я - это настройка raid на корневой файловой системе, и возможность сделать его загружаемым при помощи стандартного LILO. Документация, поставляемая с исходными текстами LILO (не руководствами) и с утилитами raidtools-0.90, описывает детали загрузки, загрузочные параметры и общую настройку raid соответственно.
Здесь описаны два варианта действий. Настройка и установка загружаемого корневого raid, и преобразование уже существующей не-raid системы в загружаемый корневой raid без потери данных.
3.1 Загрузка 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 * Заметьте, что здесь приведено начало каждого раздела
3.2 Подробный разбор 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
4. Переход с не-raid на RAID1/4/5
Переход с не-raid системы к raid достаточно прост, и состоит из нескольких последовательных шагов, приведенных ниже. Описание приведено для системы с загрузочным, корневым и swap-разделами.
СТАРЫЙ диск в существующей системе: /dev/hda1 загрузочный, возможно dos+loadlin или lilo /dev/hda2 корневой /dev/hda3 swapМы добавим дополнительный диск и преобразуем систему в RAID1. Вы можете легко добавить несколько дисков и сделать RAID5-массив, при помощи подобной процедуры.
4.1 Шаг 1 - готовим новое ядро
Скачайте новое чистое ядро, утилиты raidtools-0.90 (или более новую версию), и патч к ядру, для поддержки raid версии 0.90.
Соберите и установите raidtools и ПРОЧИТАЙТЕ документацию.
Соберите и установите ядро с поддержкой тех видов (0/1/4/5 ?) raid, которые вы будете использовать. Убедитесь в том, что разрешили автозапуск raid-устройств в конфигурации ядра. Удостоверьтесь в том, что ядро нормально загружается и изучите файл /proc/mdstat, чтобы еще раз убедиться в том, что необходимые вам виды raid поддерживаются ядром.
4.2 Шаг 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
4.3 Создаем, форматируем и настраиваем 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
4.4 Копируем текущую ОС на новое raid-устройство
Это достаточно просто и понятно.
cd / # настройте скрипт для того чтобы это сделать cp -a /bin /mnt cp -a /dev /mnt cp -a /etc /mnt cp -a (все каталоги кроме /mnt, /proc, и сетевых дисков) /mntПроцедура может усложниться, если вы подключили или сделали ссылки на другие диски к вашей корневой файловой системе. Пример, приведенный выше, предполагает простую систему, вам, возможно, придется немного изменить процедуру копирования.
4.5 Проверяем ваш новый 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-систему. Если вы что-то на этом этапе напутаете без сохранения резервной копии, ВАМ БУДЕТ НЕСЛАДКО!
Если что-то не заработало, перезагрузите вашу старую систему, вернитесь и исправьте все, пока все не будет нормально.
4.6 Интегрируем старый диск в 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-паре. Пользуйтесь загрузочным флоппи-диском, пока настраиваете и тестируете последний шаг.
5. Приложение 1. - Пример 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
6. Приложение 2. - Пример реализации 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
7. Приложение 3. - 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
8. Приложение 4. - 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