Linux - статьи

Приступаем


В некоторых дистрибутивах (например, RedHat) RAID-массив можно создать еще при установке. Но в большинстве случаев все это придется проделывать вручную на уже установленной системе. В ядре программно реализована возможность создания RAID-0, RAID-1, RAID-4 и RAID-5. Хотя следует отметить, что в настоящее время реализована возможность автоматической загрузки системы с RAID-массива, только если загрузочный раздел отформатирован как RAID-1.

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

#cat /proc/mdstat

Если же вам не повезло, то в секции Multi-device support (RAID and LVM) после активации параметра с таким же названием должны появиться необходимые опции. Кстати, рекомендую включить еще Boot support и Auto Detect support — это позволит автоматически поднимать RAID-массив при загрузке системы, а также размещать корневую систему на RAID. При этом все эти параметры лучше "вкомпилировать" в ядро, чем в виде загружаемых модулей. В последнем случае система может иногда повести себя иначе — к примеру, если первый опрашиваемый диск массива не имеет суперблока, то есть помечен как сбойный, вполне возможно, что система откажется запускаться в degraded mode.

Следующим шагом будет установка и конфигурирование пакета raidtools. Его можно взять с (на момент написания статьи последней была версия raidtools-1.00.3.tar.gz). По этому же адресу можно найти патчи к ядрам старых версий, не поддерживающих software-RAID. Установка пакета сводится к его распаковке и стандартной компиляции:

# cd raidtools-1.00.3
# ./configure
# make
# su
$ make install

Далее необходимо создать файл /etc/raidtab приблизительно такого содержания:

raiddev /dev/md0

# имя файла устройств массива
raid-level            1


# уровень RAID (возможны значения linear, 0, 1,4,5)
nr-raid-disks        2



# указывает сколько дисков будет входить в RAID-массив
chunk-size          32

# размер чанка в килобайтах
persistent-superblock 1

# эта опция позволяет при создании RAID-массива записывать в каждый дисковый раздел специальный суперблок, наличие которого позволяет ядру при загрузке прочесть конфигурацию RAID автоматически, без монтирования корневой системы
# далее описываются реальные дисковые разделы, входящие в массив
device                /dev/hdc2

# дисковый раздел, участвующий в создании RAID-массива
raid-disk             0
device                /dev/hda2
raid-disk             1


Пример приведен только для одного массива /dev/md0, если же их потребуется несколько, необходимо будет каждый описать отдельно — за подробностями обращайтесь к одноименному man. Не забывайте, что минимальное количество разделов для каждого уровня RAID разное. Для каждого device обязательно присутствие одного из следующих параметров:
  • raid-disk — определяет индекс раздела в массиве;
  • spare-disk — определяет индекс резервного диска;
  • parity-disk — принудительно определяет данный раздел для хранения информации о контроле четности (для RAID-4,5);
  • failed-disk — помечает раздел как вышедший из строя (можно использовать для временного отключения, например раздел с работающей ОС).


Во избежание излишней возни, всем разделам, которые планируется отдать под RAID-массивы, необходимо при помощи утилиты fdisk присвоить тип "fd" (Linux raid autodetect). Примерно так:

# fdisk /dev/hda

Command (m for help): t

Partition number (1-9): 8

Hex code (type L to list codes): fd

Changed system type of partition 8 to fd (Linux raid autodetect)

Command (m for help): p

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

  Device Boot  Start    End    Blocks    Id    System
/dev/hda1   *      1     50   2257101    83    Linux
/dev/hda2         51    314    265072+   82    Linux swap
/dev/hda3        315   2776   1646631    fd    Linux raid autodetect
/dev/hda4       2777   3648   7004308+   83    Linux

Command (m for help): w



После этого надо убедиться, что в системе присутствуют файлы устройств /dev/md0 (/dev/md1 ... /dev/mdN, если разделов больше одного). В случае отсутствия таких файлов их необходимо создать:

# mknod /dev/md0 b 9 0
# mknod /dev/mdN b 9 N


После этого можно приступать к запуску RAID-массива:

# mkraid /dev/md0

Команда cat /proc/mdstat должна показать поддерживаемые ядром и запущенные в данный момент устройства.

Personalities : [linear] [raid0] [raid1] [raid5]
read_ahead 1024 sectors
md0 : active raid0 hda1[1] hdc1[0]
    90069632 blocks 32k chunks
unused devices:




Если все прошло нормально, следующим шагом должно стать форматирование под выбранную (любую) файловую систему, поддерживаемую ядром:

# mke2fs /dev/md0

Или лучше:

# mkreiserfs /dev/md0

Теперь монтируем в выбранную точку:

# mkdir /mnt/raid
# mount /dev/md0 /mnt/raid


Для автоматического монтирования при загрузке системы в файл /etc/fstab добавляем следующие строки:

/dev/md0   /mnt/raid   reiserfs   defaults   0 0

При необходимости можно остановить работу RAID командой:

# raidstop /dev/md0

— и затем запустить снова:

# raidstart /dev/md0

Перенесем корневой раздел в созданный RAID. Для этого копируем его в смонтированый каталог:

# cd /
# find  .  -xdev | cpio -pm /mnt/raid


Далее модифицируем файл /mnt/raid/etc/fstab, в котором указываем измененные значения точек монтирования. Например, для корневого в нашем случае это будет:

/dev/md0  /   reiserfs  defaults    0  0

В новом файле загрузчика LILO /mnt/raid/etc/lilo.conf требуется внести более серьезные изменения. Нужно изменить путь к новому устройству, с которого будет производиться загрузка системы, и устройство, которое будет монтироваться как корневое. Кроме того, следует дополнительно указать устройства, на которые принудительно устанавливается загрузочная запись. Небольшое примечание: очень даже неплохо выносить каталог /boot в небольшой отдельный раздел (50 Мб за глаза хватит) и в файле /etc/fstab прописать такие строки, чтобы он не автоматически монтировался при загрузке:

/dev/hda1 /boot ext2 noauto 1 2



Пример файла lilo.conf:

prompt

# включает ввод приглашения при загрузке без ожидания каких-либо нажатий клавиш
timeout=50

# время ожидания — 5 секунд
default=linux

# метка ОС, загружаемой по умолчанию. Если ее нет, будет загружаться ядро, записанное первым
boot=/dev/md0

# сектор жесткого диска куда устанавливаем, LILO в нашем случае загрузочным является RAID-массив
root=/dev/md0

# указывает на устройство, которое будет монтироваться как корневой раздел
raid-extra-boot=”/dev/hda, /dev/hdc”

# без данного параметра LILO не будет изменять MBR дисков, входящих в RAID, поскольку не имеет понятия, какие именно диски туда входят. Желательно указать все диски — тогда при выходе одного из них система загрузится со следующего
install=/boot/boot.b

# файл для использования в качестве нового загрузочного сектора

Когда все необходимые изменения занесены, устанавливаем загрузчик

# chroot /mnt/raid; lilo

Если эта команда не выдала ошибок, перезагружаемся. После этого следует проверить работу RAID-массива (просмотрев содержимое /proc/mdstat) — и удостовериться, что все разделы задействованы в массиве. Теперь при выходе диска из строя он будет помечаться в RAID-массиве как сбойный.

Далее системному администратору необходимо:
  • остановить работу системы и выключить компьютер;
  • заменить диск, вышедший из строя, новым;
  • включить компьютер, загрузить операционную систему;
  • при помощи fdisk создать раздел необходимого размера и присвоить ему тип "fd";
  • добавить новый раздел в RAID-массив:


# raidhotadd /dev/mdX /dev/hdX

  • подождать, пока будет работать реконструкция;
  • восстановить LILO.


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

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


Содержание раздела