Мини HOWTO:Boot + Root + Raid + Lilo : Программный Raid

Этот документ содержит указания, как настроить raid, используя утилиты raidtools версии 0.90 для загрузки с массива raid, подключенного в качестве корневой файловой системы, используя стандартный LILO. Также здесь приведена процедура преобразования обычного диска в зеркальный набор (mirror set) raid1 или raid5 без потерь данных на исходном диске.

[Michael Robinton (Michael@BizSystems.com). Перевод Станислав Рогин (sam@asplinux.ru)]

Мини HOWTO:Boot + Root + Raid + Lilo : Программный Raid

Michael Robinton, Michael@BizSystems.com

Перевод: Станислав Рогин, ASPLinux,

версия 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 ASPLinux Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.

Все переводы и производные работы, выполненные по документам Linux HOWTO, должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу, приведенному ниже.

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: linux-howto@metalab.unc.edu, или к координатору русского перевода Linux HOWTO компании ASPLinux по адресу linux-howto@asplinux.ru

2. Что вам потребуется до НАЧАЛА РАБОТЫ

Ниже перечислены пакеты, которые вам понадобятся, а также приведен список документации, которая отвечает на все обычные вопросы о настройке и запуске raid. Пожалуйста, прочитайте это внимательно.

2.1 Необходимые пакеты

Вам понадобится получить наиболее новые версии этих пакетов.

2.2 Где найти новые версии этого документа.

Можете просмотреть последнюю версию авторского оригинала этого документа. Исправления и предложения приветствуются!

Мини-HOWTO Boot+Root+Raid+Lilo

Формат LaTeX (для DVI и PostScript), чистый текст, и HTML.

http://www.linuxdoc.org/HOWTO/mini/Boot+Root+Raid+LILO.html
SGML и 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

Подключиться к спискам рассылки можно по адресам:

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

[Источник: www.linuxdoc.ru]

[ опубликовано 31/08/2003 ]

Michael Robinton (Michael@BizSystems.com). Перевод Станислав Рогин (sam@asplinux.ru) - Мини HOWTO:Boot + Root + Raid + Lilo : Программный Raid   Версия для печати