Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Обучение от Mail.Ru Group.
Онлайн-университет
для программистов с
гарантией трудоустройства.
Набор открыт!

2006 г.

Создание Software RAID в Slackware Linux (перевод)

Сергей Куклин, "Slackware Linux в Томске"
Оригинал статьи: Building a Software RAID System in Slackware

Введение

Установка Linux на RAID не является очень сложным делом, особенно если вы понимаете что делаете, а не полагаетесь на волшебные инструкции от RedHat Linux с описанием окон и кнопок, которые нужно двигать мышкой, а нажимать колесиком. Именно поэтому в качестве примера выбран Slackware Linux, так как он похоже единственный дистрибутив, в котором чтобы что-то сделать, нужно четко понимать, что делаешь. И как следствие, если вы поймете как это делается в Slackware, то спокойно разберетесь, как это сделать в вашем любимом дистрибутиве.

Достаточности и необходимости

Цель документа: установка Slackware 10.1 с нуля на IDE software RAID 1 (mirror) из двух дисков. Используется ядро из дистрибутива - 2.4.29, в котором есть поддержка soft-raid. На самом деле достаточно взять любой дистрибутив с ядром 2.4.x и выше. Для запуска raid на ядрах 2.2.х придется собирать свое ядро с соответствующими патчами. Необходимо:

  • Два одинаковых винчестера. (Использование дисков разного размера возможно, но не рекомендуется (Прим. пер.: интересно, почему?)
  • Возможность загрузиться со Slackware Install CD. Для любителей других дистрибутивов:
    • ядро 2.4.х и выше
    • Рекомендуется LILO 22.5.7.2 и выше (Возможность загрузить систему с RAID появилась в LILO 22.0)
    • raidtools 0.90 или выше.
  • Умение пользоваться fdisk'ом. Ну или хотя бы понимать что такое таблица разделов, mbr, раздел и так далее.
  • Несильно погнутые руки для работы в командной строке.
  • Терпение и время. (Пиво опционально).
Перед началом

Если у вас IDE диски, то советуем вам поставить их на разные шины. Это не столько для обеспечения отказоустойчивости (в случае умирания одного винта есть вероятность, что он заблокирует шину и второй винчестер не сможет нормально работать), но и для увеличения производительности. Также убедитесь, что в BIOS стоит опция Загрузка с CD-ROM. Я обычно на машине с двумя шинами IDE ставлю CD-ROM привод как secondary slave.

Теперь загружайтесь со Slackware Install CD. Когда загрузка дойдет до приглашения Boot:, вам нужно будет выбрать ядро, которое соответствует вашему железу. Далее загрузка будет продолжаться. На самом деле установка системы на RAID не сильно отличается от обычной установки Slackware Linux.

Перед тем как запустить setup вы должны создать разделы на диске. Особо обращаем ваше внимание на то, что ставить систему нужно на второй винчестер (в нашем случае это /dev/hdc), который подключен к secondary IDE bus. Набирайте в консоли:

# fdisk /dev/hdc

Для создания RAID не требуется как то по особенному разбивать диск. Все делается так же, как будто это просто одно-дисковый сервер. Мне нравится следующая разбивка диска: разделы для /, swap, /usr/local, /var и /home. По причине того, что объем свободного пространства на IDE дисках слабо отражается на содержимом кошелька, не стоит скупиться, создавая / и swap. Избыточность в нашем случае не стоит ничего против вероятности возможных проблем с нехваткой места в разделе. Вот пример разбивки винчестера на 20G:

Disk /dev/hdc: 255 heads, 63 sectors, 2434 cylinders
Units = cylinders of 16065 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hdc1   *         1       262   2104483+  83  Linux native
/dev/hdc2           263       524   2104515   82  Linux swap
/dev/hdc3           525      1314   6345675   83  Linux native
/dev/hdc4          1315      2434   8996400    5  Extended
/dev/hdc5          1315      1837   4200966   83  Linux native
/dev/hdc6          1838      2434   4795371   83  Linux native

Обратите внимание, что /dev/hdc1 помечен, как загрузочный. Это обязательно нужно сделать, чтобы RAID работал нормально.

После создания разделов выходите из fdisk'а и не забудьте убедиться, что таблица разделов записалась на диск и ядро ее применило. (Не поленитесь перевести сообщения fdisk'а. Вполне возможно, что там написано что-то типа При записи таблицы разделов обнаружено, что устройство занято другим приложением. Таблица будет применена после перезагрузки.) Вообще перезагрузка после манипуляций с таблицей разделов не будет лишней, особенно если вы собираетесь использовать ReiserFS. После перезагрузки, запускайте setup и начинайте установку согласно инструкции по установке, не забыв обратить внимание на некоторые моменты:

  • Так как в дальнейшем процессе установки необходимо будет копировать содержимое раздела на другой винчестер, стоит подумать об сокращении времени этого копирования. То есть на этом этапе устанавливать минимальную Linux-систему, в дальнейшем можно будет доставить необходимые пакеты уже на raid. Я думаю вы прекрасно знаете, что нужно ставить, чтобы получить минимальную Slackware Linux-машину. Хотя могу и повторить:
    • Необходимые вам пакеты из серий A и AP.
    • Пакет glibcso из серии A или свежий пакет glibc из серии D.
    • Не забудьте поставить пакет raidtools из серии AP
    • (От переводчика: я еще поставил sshd из серии N. И всю настройку производил через сеть.)
  • Установите LILO используя expert mode. Убедитесь, что LILO установлен в master boot record (MBR) правильного диска (/dev/hdc) и ваш / раздел (в нашем случае это /dev/hdc1) помечен как загрузочный (bootable flag, напротив этого раздела в fdisk'е будет стоять *)
Первая загрузка

После окончания установки перегружайтесь с винчестера (не забудьте вынуть CD-ROM из привода и проверьте boot sequence в BOIS'е). Если все пройдет нормально, то система загрузится используя /dev/hdc1 в качестве / раздела. Если же все-таки система не грузится, то загружайтесь с CD-ROM'а или дискеты и тщательно проверяйте /etc/lilo.conf. Также будьте внимательны при выборе загрузочного устройства в BIOS'е, одинаковые винты будут выглядеть одинаково, возможно вы просто не с того винта грузитесь. Если же все-таки BIOS оказался слишком дурным, что не захотел грузить систему со второго винчестера, то как вариант попробуйте установить LILO в mbr первого диска, указав ему брать / раздел со второго, все равно LILO потом нужно будет переконфигурировать. Этот трюк помогал мне, когда попадались невнятные SCSI-контроллеры, которые не давали возможности указывать загрузочный диск.

На следующем шаге нужно создать разделы на первом винчестере (в нашем случае это /dev/hda). Для лучшего использования дискового пространства диск следует разбить точно также, как и второй. Команда fdisk -l /dev/hdc поможет вам разбить диск цилиндр в цилиндр.

В итоге у вас должно получиться два диска разбитых одинаково. Точнее, почти одинаково: на первом винчестере вам нужно будет сделать существенное изменение: тип разделов должен быть не Linux native, а Linux raid autodetect c кодом 0xFD. Если вы все сделали правильно, то по идее у вас должно получиться что-то вроде этого:

Disk /dev/hda: 255 heads, 63 sectors, 2434 cylinders
Units = cylinders of 16065 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1   *         1       262   2104483+  fd  Linux raid autodetect
/dev/hda2           263       524   2104515   82  Linux swap
/dev/hda3           525      1314   6345675   fd  Linux raid autodetect
/dev/hda4          1315      2434   8996400    5  Extended
/dev/hda5          1315      1837   4200966   fd  Linux raid autodetect
/dev/hda6          1838      2434   4795371   fd  Linux raid autodetect
Файл конфигурации RAID-массива -- /etc/raidtab

После того, как мы подготовили первый диск для создания RAID, самое время создать файл конфигурации массивов RAID, который будет использоваться драйвером md для корректной конфигурации массива. Запустите ваш любимый emacs и, руководствуясь нижеприведенным примером, создайте ваш raidtab.

raiddev                 /dev/md0
raid-level              1
nr-raid-disks           2
nr-spare-disks          0
persistent-superblock   1
device                  /dev/hda1
raid-disk               0
device                  /dev/hdc1
failed-disk             1
chunk-size		32

raiddev                 /dev/md1
raid-level              1
nr-raid-disks           2
nr-spare-disks          0
persistent-superblock   1
device                  /dev/hda3
raid-disk               0
device                  /dev/hdc3
failed-disk             1
chunk-size		32

raiddev                 /dev/md2
raid-level              1
nr-raid-disks           2
nr-spare-disks          0
persistent-superblock   1
device                  /dev/hda5
raid-disk               0
device                  /dev/hdc5
failed-disk             1
chunk-size		32

raiddev                 /dev/md3
raid-level              1
nr-raid-disks           2
nr-spare-disks          0
persistent-superblock   1
device                  /dev/hda6
raid-disk               0
device                  /dev/hdc6
failed-disk             1
chunk-size		32

Для каждой пары совпадающих разделов на диске, из которых будут создаваться отдельные разделы массива, должен быть блок с директивой raiddev, объявляющий соответствующее разделу массива /dev/mdX устройство.

Обратите внимание, что я использовал директиву failed-disk, которая позволяет запретить дублировать изменения первого диска на втором и которая указывает на второй диск, на /dev/hdc, с которого вы сейчас реально загрузили систему. Для подробной информации об возможных директивах этого файла можно прочитать в man 5 raidtab

Создание RAID устройств

После того, как вы создали /etc/raidtab уже пора окончательно создавать RAID. Запустите mkraid для каждого /dev/mdX, которые вы придумали в /etc/raidtab. Например так:

# mkraid /dev/md0

Процесс создания массивов вы сможете посмотреть в псевдофайле /proc/mdstat, который вообще является очень полезным для мониторинга RAID подсистемы вашего компьютера. Сейчас например можете взглянуть, как выглядит система, у которой присутствует только половина массива, для каждого устройства, которые вы создали будет отдельная строчка. Примерно вот так:

Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 hda1[0] 2104384 blocks [2/1] [U_]
md1 : active raid1 hda3[0] 6345600 blocks [2/1] [U_]
md2 : active raid1 hda5[0] 4200896 blocks [2/1] [U_]
md3 : active raid1 hda6[0] 4795264 blocks [2/1] [U_]
unused devices: 

Теперь наступает самое интересное, теперь, когда /dev/mdX созданы, пора создать на них файловые системы.

# mkreiserfs /dev/md0

Или какую вы предпочитаете файловую систему, такую и делайте.

Копирование операционной системы в RAID

И снова здравствуйте! Вы уже практически подошли к самому интересному в создании RAID'а. Теперь вам надо скопировать все файлы со второго диска в raid-массив. Есть множество различных способов сделать это. Тут я опишу ни самый быстрый, ни самый красивый способ, но думаю этот способ будет ясно понят любым человеком, который в состоянии дочитать до этого места.

Первое: монтируем новый / раздел к /mnt.

# mount /dev/md0 /mnt

Второе: создаем каталоги - точки монтирования других новых разделов. Не забудьте здесь указать ваши каталоги и ваши разделы.

# mkdir -p /mnt/usr/local
# mkdir -p /mnt/var
# mkdir -p /mnt/home

Третье: монтирует новые разделы.

# mount /dev/md1 /mnt/usr/local
# mount /dev/md2 /mnt/var
# mount /dev/md3 /mnt/home

Четвертое: копируем систему со второго винчестера на RAID.

# cp -a /bin /mnt
# cp -a /boot /mnt
# cp -a /dev /mnt
# cp -a /etc /mnt
# cp -a /home /mnt
# cp -a /lib /mnt
# cp -a /root /mnt
# cp -a /sbin /mnt
# cp -a /tmp /mnt
# cp -a /usr /mnt
# cp -a /var /mnt
# mkdir -p /mnt/mnt
# mkdir -p /mnt/proc

Пятое: исправляем /mnt/etc/fstab, чтобы он указывал на новые разделы, которые являются RAID массивом. Только убедитесь что вы редактируете fstab именно из /mnt/etc/fstab, а не с текущего / раздела.

Загрузка с RAID массива

Шестое и последнее: переконфигурирование LILO. Запускайте ваш любимый редактор и редактируйте /mnt/etc/lilo.conf. (Заметьте что редактируется lilo.conf, который лежит в RAID, не перепутайте). В нем вам нужно поправить две директивы boot и root. В итоге они должны указывать на устройство /dev/md0 (то есть на / раздел в RAID'e). Также вам нужно будет добавить опцию raid-extra-boot = mbr, которая появилась только в LILO 22.0, впрочем это неважно, все равно более старые версии не смогут загрузиться с /dev/md. В итоге ваш /mnt/etc/lilo.conf должен выглядеть примерно так:

# LILO configuration file
# generated by 'liloconfig'
#
# Start LILO global section
boot = /dev/md0
raid-extra-boot = mbr
#compact        # faster, but won't work on all systems.
# delay = 5
# Normal VGA console
vga = normal
# ramdisk = 0     # paranoia setting
# End LILO global section
# Linux bootable partition config begins
image = /vmlinuz
  root = /dev/md0
  label = Linux
  read-only # Non-UMSDOS filesystems should be mounted read-only for checking
# Linux bootable partition config ends

Теперь остается только установить LILO с этими новыми изменениями. Для этого у lilo предусмотрена опция -r, которая позволяет сменить корневой каталог до выполнения каких-либо операций:

# lilo -r /mnt

Теперь все. Перегружайтесь. Не забудьте только выставить в BIOS'е загрузку в первого винчестера.

Дополнение зеркал

Загрузились? Попробуйте проверьте командой df, откуда вы загрузились и куда:

Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/md0               2071288    566236   1399836  29% /
/dev/md1               6245968    185484   5743204   4% /usr/local
/dev/md2               4134832      3220   3921568   1% /var
/dev/md3               4719868     38036   4442072   1% /home

Похоже на RAID? Похоже, но только это не RAID. Вы наверное еще при загрузке наблюдали долгие протяжные ругательства на то, что система работает только с одной половиной.

Сейчас мы находимся в точке, которая моделирует сбой одного винчестера. То есть как будто вы только что заменили отказавший винчестер и должны его разбить. Ситуация отличается только тем, что сейчас второй винчестер уже разбит на разделы, единственное что: неправильно разбит. Сейчас вам нужно изменить тип разделов на /dev/hdc с Linux native на Linux raid autodetect. Если бы у вас был чистый винчестер, то сразу нужно было бы создавать разделы с типом 0xFD. Так что берите fdisk /dev/hdc и тренируйтесь восстанавливать. После создания/правки таблицы разделов вас скорее всего попросят перегрузиться.

Теперь предпоследний шаг: дополнение зеркал. Здесь все очень просто. Выполняете raidhotadd mirror partition:

# raidhotadd /dev/md0 /dev/hdc1
# raidhotadd /dev/md1 /dev/hdc3
# raidhotadd /dev/md2 /dev/hdc5
# raidhotadd /dev/md3 /dev/hdc6

и смотрите в /proc/mdstat, как RAID становится настоящим mirror'ом. В конечном итоге вы получите следующее:

Personalities : [raid1] 
read_ahead 1024 sectors
md0 : active raid1 hdc1[1] hda1[0]
      2104384 blocks [2/2] [UU]
      
md1 : active raid1 hdc3[1] hda3[0]
      6345600 blocks [2/2] [UU]
      
md2 : active raid1 hdc5[1] hda5[0]
      4200896 blocks [2/2] [UU]
      
md3 : active raid1 hdc6[1] hda6[0]
      4795264 blocks [2/2] [UU]
      
unused devices:

Да, забыли последний шаг: поменяйте в /etc/raidtab директивы failed-disk на raid-disk.

Поздравляю, теперь ваша система установлена на RAID 1 (mirroring).

Заключение

Теперь, если вы устанавливали Slackware Linux в минимальной установке, то самое время вернутся и продолжить установку необходимых пакетов. Также многие считают, что установка заканчивается только после пересборки ядра. Специально для таких хочу заметить, что для того чтобы вы смогли загрузиться с вашего RAID'а, поддержка RAID support и RAID-1 (mirroring) mode должны быть вкомпилены в ядро, а не собираться модулями.

Новости мира IT:

Архив новостей

Последние комментарии:

Loading

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 985 1945361
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2015 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...