Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Операционные системы -> Linux -> Программный RAID-массив в Linux


Программный RAID-массив в Linux

Вряд ли стоит доказывать, сколь важным является сохранение сервера или станции в рабочем состоянии. Способов повышения надежности сохранения информации немало. Один из них — внесение в нее избыточных данных.

С ростом вычислительной мощности процессоров и пропускной способности памяти именно дисковые операции ввода-выводa все чаще оказываются "узким местом" системы.

Посмотрим, как организовать RAID-массив программными средствами в популярной нынче ОС GNU/Linux.

Немного теории

Чтобы понимать, о чем идет речь, следует сказать пару слов о самой технологии. Акроним RAID означает Redundant Array of Inexpensive/Independed Disks, что переводится как "избыточный массив из недорогих/независимых дисков". Заметьте — именно независимых дисков, то есть их должно быть, по крайней мере, два (а для некоторых уровней — три, четыре, a то и больше).

RAID-массив можно организовать при помощи специального контролера, стоимость которого — от 20 у.е за отдельный чип на материнской плате и 200 у.е. за отдельное специализированное устройство.

Но при покупке компьютера не всегда предусматривается создание RAID, поэтому, чтобы немного сэкономить, можно создать такой массив программно — то есть фактически бесплатно. Но за бесплатность придется платить увеличением нагрузки на процессор. К тому же, soft-RAID — по сравнению с железной реализацией — на всех уровнях показывает более низкую производительность. Так что данный метод лучше задействовать в случаях, когда, во-первых, утилита top показывает, что есть еще порох в пороховницах, и, во-вторых, сохранность данных важнее общей производительности.

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

Основой всех способов (кроме RAID-1) является страйпинг — то есть при работе логические блоки RAID-тома (который видится как единое целое, хотя и состоит из нескольких дисков) сопоставляются физическим на различных носителях.

  • RAID-0 (striping) — последовательный поток данных равномерно записывается на различные носители, контроль четности при этом не производится. Обеспечивает самые быстрые операции ввода/вывода — однако является наименее надежным из методов;
  • RAID-1 (mirroring) — полное зеркалирование (дублирование) данных на другой носитель. Дополнительно обеспечивается повышение производительности при операциях чтения;
  • RAID-2 — этот метод уже практически забыт; информация записывается побайтно на несколько винчестеров, головки которых движутся синхронно. Дополнительно на отдельный носитель (носители) записывается избыточная информация для восстановления;
  • RAID-3 — тоже редко используемый метод. Уже хотя бы по причине трудности реализации. Похож на предыдущий, только избыточная информация высчитывается по "исключаемому ИЛИ", а не ECC;
  • RAID-4 — также предусматривает отдельный диск для контроля четности, что является самым узким местом такой системы. Однако при этом способе данные распределяются по секторам, а не по байтам;
  • RAID-5 — напоминает предыдущий метод, но тут избыточные данные равномерно распределены по всем дискам. Таким образом решается проблема "узкого места" — однако при программной реализации такой способ оказывается для процессора наиболее трудоемким.

Но это не всё — существуют также производные методы, в которых пытаются устранить некоторые недостатки родительских: RAID-0+1, RAID-10, RAID-30, есть и RAID-6. Ядро Linux поддерживает еще так называемый linear- (известный еще как append) режим. В этом режиме разделы диска просто как бы плюсуются, суммарный объем равен объему всех разделов, участвующих в формировании тома, и запись осуществляется как на обычный диск. При этом не содержится никакой избыточности и скорость записи/считывания не увеличивается (только объем).

Приступаем

В некоторых дистрибутивах (например, 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. Его можно взять с http://people.redhat.com/mingo/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, но об этом в следующий раз.

Автор: Сергей Яремчук
Источник: www.comizdat.com

Ссылки по теме
OS Linux - глазами обычного пользователя
Установка двух ОС на один компьютер
Linux на работе и дома
Что такое Linux
Введение в Linux
 

Компьютерная документация от А до Я - Главная

 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.