"Наши диски не задушишь, не убьешь ..."

(статья опубликована в журнале Chip)

Все, более или менее активно использующие Linux, задаются вопросом - "Как
увеличить надежность хранения данных?". Конечно, используемая по умолчанию в Linux файловая система ext2 достаточно надежна, но многим необходима более высокая надежность.

Единственный выход для пользователей, которые не хотят потерять свои данные из-за выхода из строя жесткого диска, состоит в том, что бы использовать избыточный массив дисков для хранения информации. Такой способ существует давно и называет RAID. В переводе с английского RAID означает "избыточный массив независымых дисков". То есть данные хранятся сразу на нескольких дисках и при выходе из строя какого-либо диска доступ к данным сохраняется.

Есть много уровней RAID, но более-менее активно используются только 3. Эти
уровни обозначены цифрами.

RAID 0го уровня презназначен для хранения больших обьемов информации, не
умещающихся на одном диске. Он не обеспечивает какой-либо избыточности. При использовании этого уровня диски просто обьединяются в одну "цепочку".

RAID 1. По другому этот уровень называют зеркалированием. В этом уровне
диски просто содержат дублирующую друг друга информацию и по содержанию абсолютно идентичны. Емкость получившегося массива равна емкости самого меньшего из дисков.

RAID 5. В этом уровне используется контрольная сумма и данные "размазываются" по всем дискам, которые присутствуют в дисковвом наборе. При выходе из строя одного из дисков недостающие данные с помощью контрольной суммы вычисляются по оставшимся. Общий обьем дискового массива равен произведению обьема самого маленького диска в массиве на число дисков, минус еденица. Таким образом, если вы создаете массив из 4х 30Гб жестких дисков, общий обьем массива будет равен 90Гб. Остальные 30Гб пойдут под хранение контрольной суммы.

Проведя несложные прикидки, становится видно, что RAID 1 и 5 обеспечивают
работоспособность системы при выходе одного любого диска из массива. Этого в большинстве случаев более чем достаточно. Если необходимо увеличить уровень отказоуйстойчивости системы, то просто добавляется больше дисков. Но одновременно с простотой это и увеличивает "непроизводительный" расход
достаточно дорогих жестких дисков. Поэтому обычно комбинируют уровни RAID.

Например, можно использовать схему 1+5. То есть два дисковых RAID массива 5го уровня обьединяются с помощью зеркалирования в один. Такой метод позволяет довольно легко достичь максиума производительности дисковой подсистемы и одновременно обеспечивает ее работоспособность при выходе 2х жестких дисков одновременно.

Сейчас на рынке существует множество RAID контроллеров, способных превратить вашу систему в оплот дисковой стабильности. Но одновременно эти контроллеры стоят очень больших денег и не по карману каждому. Конечно, производители стараются преодолеть этот недостаток и даже начали выпуск материнских плат с встроенными RAID-контроллерами, но к сожалению, по большей части возможности этих контроллеров очень слабы. Что же делать? Копить больше денег? Нет! Производители всех ведущих операционных систем предлагают своим пользователям использовать программные RAID контроллеры. То есть вся работа по поддержке RAID массива ложится на плечи системного процессора. Ниже я попытаюсь рассказать, как создать под Linux RAID массив по вашему желанию. И при этом нет никакой разницы, используете ли вы только IDE диски или в вашей системе есть каждой
твари по паре. Для программного контроллера этот вопрос не существенен.

Итак, для создания программного RAID вамнеобходимо взять любой более-менее новый дистрибутив Linux, который поддерживает Software RAID. Затем выделить как миниум 2 раздела для RAID1 (для RAID5 требуется не менее 3х разделов) и с помощью команды fdisk из дистрибутива сменить тип раздела на "Linux raid autodetect" (Id должен быть равен fd). Это поможет системе при загрузке самой определить, какой из дисков к какому набору принадлежит.

Затем необходимо создать /etc/raidtab, руководствуясь простыми правилами. Ниже я приведу с комментариями пример файла для создания RAID1 на двух IDE дисках.

raiddev /dev/md0
# Создаваемое устройство будет иметь имя /dev/md0
raid-level 1
# Создаваемый уровень RAID - 1
persistent-superblock 1
# Требует создания специального суперблока, который будет указывать, к какому
# из массивов относится раздел.
chunk-size 8
# Размер внутреннего буфера
nr-raid-disks 2
# Число дисков в массиве
nr-spare-disks 0
# Число дисков, которые будут стоять "на подхвате". В случае выхода из строя
# одного из дисков, ему на замену в массиве будет автоматически подставлен
# другой
device /dev/hda7
raid-disk 0
# раздел /dev/hda7 будет "диском" 0
device /dev/hdd7
raid-disk 1
# раздел /dev/hdb7 будет "диском" 1


После этого необходимо дать команду mkraid /dev/md0. В некоторых системах
она просто спросит вас, уверены ли вы в этом и сделает все остальное. В других
дистрибутивах вам необходимо дать команду mkraid -a --really-force /dev/md0. Но суть одна - эта команда должна проинициализировать массив и запустить все необходимое.

Узнать а результатах выполнения вы можете, дав команду cat /proc/mdstat. При
успешной работе массива вы увидите что-то подобное:

Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 hdd7[1] hda7[0]
17767744 blocks [2/2] [UU]

unused devices: <none>

Это означает, все все идет отлично.

Теперь я приведу примеры аналогичного массива, но только RAID5.

raiddev /dev/md0
raid-level 5
nr-raid-disks 3
nr-spare-disks 0
persistent-superblock 1
parity-algorithm left-symmetric
chunk-size 64

device /dev/sdb1
raid-disk 0
device /dev/sdc1
raid-disk 1
device /dev/sdd1
raid-disk 2

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

Сразу после того, как команда mkraid отработала, вы можете использовать
"диск" /dev/md0 как вам заблагорассудится. Можете создавать на нем разделы с
разными файловыми системами, а можете весь "диск" отдать под одну. В общем, можете работать c RAID диском так же, как и с любым другим.

Но вот случилось страшное - один из дисков в массиве вышел из строя. Если
вы указали диски для автозамены, то волноваться нечего - вам просто остается
наблюдать, как система перенесет на него все данные. Но обычно другое -
свободных дисков в системе в момент установки не было. Тогда придеться
ремонтировать.

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

Если вы осторожничаете и имеете IDE или SCSI диски без hotswap, то
придется остановить машину, заменить диск и запустить все заново. Если вы чуствуете в себе жилку авантюриста, то можете прямо на ходу заменить диск на полностью аналогичный. Говорят, у некоторых это удавалось, но будьте готовы к более масштабным разрушениям. Если же у вас диск SCSI с поддержкой горячей замены, то просто вытащите его и вставьте новый с тем же ID.

Теперь разбейте новый диск идентично старому и дайте команду raidhotadd с
параметрами, аналогичными параметрам raidhotremove. Все, через некоторое
время, необходимое для синхронизации, скорость вашей системы вернется к
первоначальному уровню.

Я рекомендую сразу после установки RAID массива потренироваться с командами raidhotadd и raidhotremove, возможно даже записать последовательность действий где-нибудь на бумажке, что бы в аварийной ситуации не тратить драгоценные минуты на вспоминание ключей и параметров.

Бесперебойной работы дисков вам.

(c) 2001 Вячеслав Калошин multik@asplinux.ru

Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости