Создание Software RAID в Slackware Linux
Введение
Установка 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 должны быть вкомпилены в ядро, а не собираться модулями.
Автор: Сергей Куклин
Источник: www.slackware.tomsk.ru
|