LXF84:RAID
|
|
|
Содержание |
Машины – в RAID!
- Достала низкая производительность или частые отказы SATA? Объединение ваших жестких дисков может улучшить скорость их работы и повысить надежность, пишет Нейл Ботвик.
Кто-то может сказать, что название напоминает оружие массового уничтожения летающих насекомых, но RAID – замечательный способ улучшить производительность вашего компьютера и повысить безопасность ваших данных, используя только ПО, которое у вас уже есть. Если вам нужна лучшая производительность диска, читайте дальше.
Изготовители дисководов снизили сроки гарантии на стандартные ATA- и SATA-диски, и теперь зачастую дают всего лишь год. Выходит, диски стали менее надежными? У нас нет способа узнать это наверняка, но если вы хотите, чтобы ваши данные уцелели в случае проблем с диском, серьезно подумайте о RAID. Этот термин первоначально означал Redundant Array of Inexpensive Disks (избыточный массив недорогих дисков), довольно обманчивое имя, поскольку RAID в те времена был вовсе не дешев. Акроним позже был изменен на Redundant Array of Independent Disks (избыточный массив независимых дисков).
Концепция дискового массива заключается в объединении двух или более устройств (дисков или разделов) так, чтобы они воспринимались системой как одно устройство. Вашими физическими устройствами могут быть /dev/hda1 и /dev/hdc1, но большая часть ОС и приложения увидят /dev/md0. С точки зрения системы диск только один. Фактически же это комбинация двух и более устройств с разбросанными по ним вашими данными.
Linux обрабатывает все это, когда ядро только загружается, распознавая, что ваши диски содержат признаки RAID, и создает устройства /dev/md. Это происходит на раннем этапе загрузки, до монтирования вашего корневого раздела, так что его тоже можно разместить на RAID. Посмотрим правде в глаза – нет особого смысла в добавлении скорости и безопасности, если это не затрагивает вашу операционную систему.
Пространство, темп, мощь
Использование RAID сперва было нацелено на повышение надежности, поскольку массив сохраняет работоспособность, если один диск выходит из строя, и скорости, поскольку размещение одних и тех же данных на более чем одном диске снижает время доступа и чтения. «Избыточный» не означает «ненужный»; это слово указывает, что данные хранятся более чем на одном диске, и если один из дисков поломается, данные будут по-прежнему в безопасности. Отдельные диски могут считаться избыточными, но не массив в целом. Но если назвать его Array of Redundant Independent Disks (массив избыточных независимых дисков), акроним будет скорее напоминать дезодорант [«arid» поанглийски «сухой», – прим. пер.], чем убийцу насекомых. В наши дни RAID также используется и как средство комбинирования различных дисков в один модуль, хотя LVM (см. практикум по этой теме в прошлом выпуске), вероятно, подходит для этого лучше.
Далее мы покажем, как опробовать RAID самому. Вам понадобится пара лишних разделов, желательно на различных дисках. Вы можете попробовать и два раздела на одном диске, но не увидите реальных преимуществs. Но сначала мы слегка углубимся в принципы работы RAID.
Как работает RAID
- Плутон – планета? Курица – птица? RAID 0 – действительно RAID?
Есть несколько уровней RAID, различающихся требованиями к минимальному числу дисков и компромиссом между производительностью, надежностью и дисковой памятью, которые они обеспечивают. Заметьте, что хотя RAID часто используется на серверах с устройствами, допускающими горячее подключение и позволяющими выполнять на лету замещение неисправных приводов, без перерыва в работе, он не сделает ваши диски волшебным образом поддерживающими горячую замену. IDE-диски нельзя заменять «на лету», а SCSI – разве что при наличии соответствующего интерфейса и драйверов. У вас либо есть дисковый контроллер с поддержкой горячей замены, либо нет; RAID не добавит этой способности вашей системе, так что не испытывайте ее. Вы можете остаться со сгоревшим диском/контроллером, или, в технических терминах, с невозможностью входа.
Наряду с реализацией на различных уровнях, RAID может быть аппаратным или программным. Аппаратный RAID-контроллер управляет всем так, что дисковый массив виден как один диск даже на самом низком уровне. Программный RAID, как вы уже догадались, использует ПО вашей операционной системы – у Linux собранное в ядре – для объединения отдельных устройств в RAID-массив. На современных процессорах программны RAID может быть по меньшей мере не медленнее выделенного аппаратного контроллера и, при этом, значительно дешевле.
Есть третий вариант RAID: так называемый аппаратный RAID-контроллер, встраиваемый во многие материнские платы. На самом деле это программная система RAID, маскирующаяся под аппаратный RAID. Ее часто называют гибридным RAID или, менее деликатно, «фальшивым» (fake). Вспомните Win-модемы, и вы поймете идею. Гибридный RAID не так гибок, как программный, он может работать в пределах ограничений BIOS и только на дисках, подключенных к контроллеру, тогда как программный RAID работает с любым диском или разделом, подключенным к любому контроллеру.
Развертывание гибкой системы
Поскольку аппаратный RAID управляется контроллером, а гибридного лучше избегать, мы рассмотрим только чисто программный RAID.
Под Linux он объединяет физические разделы в RAID-раздел. Поначалу потребуется кое-какая дополнительная работа, поскольку нужно создать отдельное устройство RAID для каждого раздела, а это, в свою очередь, потребует создания разделов-источников для каждого устройства RAID на физических дисках, зато обеспечит гораздо большую гибкость (см. врезку «Разбиение массивов: возможно ли?» далее), с различными типами RAID для разных целей. На своей настольной системе вы можете использовать RAID 1 для разделов, где безопасность данных более важна, чем собственно скорость, например, /usr и /home. Но, допустим, вы также используете множество больших временных файлов, типа ISO-образов DVD-дисков и видеофайлов. Они пойдут на раздел RAID 0, который быстрее и дает в два раза больше места для хранения данных, чем RAID 1. Поскольку это в основном временные файлы, в избыточности, предоставляемой RAID 1, нужды нет.
Программный RAID также позволяет вам использовать диски с различными контроллерами, при желании объединяя IDE, SATA и SCSI.
Внимание: суперпользователь
Многие команды RAID, приведенные в этой статье, требуют для запуска привилегий суперпользователя (root). Вам нужно открыть терминал и ввести su - (sudo bash в Ubuntu и других дистрибутивах, основанных на Debian), а затем ваш пароль суперпользователя. Большинство команд RAID бывают разрушительны, так что хорошей идеей является экспериментирование там, где нельзя навредить, например, на отдельном диске.
Также можно создать RAID-массив, используя устройство loop. Его мало используют в реальном мире, но это хороший способ проводить эксперименты, не трогая ваши разделы на жестком диске. Все, что вам понадобится, это достаточное количество свободного места, чтобы создать loop-файлы:
dd if=/dev/zero of=raidtest1 bs=1M count=8192 losetup /dev/loop1 raidtest1 dd if=/dev/zero of=raidtest2 bs=1M count=8192 losetup /dev/loop2 raidtest2
Эти команды создадут два файла по 8 ГБ и присоединят их к устройствам loop, которые вы сможете использовать в RAID-массиве.
Раскапывая уровни RAID
- RAID 0. Популярен среди пользователей настольных систем, особенно с «фальшивыми» RAID, но фактически это
не RAID, поскольку не обеспечивается избыточность (может, назвать его AID 0?). Записывает данные поочередно на один диск, затем на другой (другие), каковой процесс известен под названием «striping» (страйпинг, чересполосица), он увеличивает производительность. Доступное место складывается из размеров используемых устройств. Сбой одного из дисков испортит весь массив. [На самом деле в Linux реализовано два алгоритма объедиенния дисков в RAID 0. stripe работает как описано выше, а linear просто объединяет все разделы (диски) в один большой раздел с последовательной записью, при этом скорость доступа определяется скоростью текущего устройства, но при выходе из строя одного из дисков теряется только информация, сохраненная на нем - прим. викификатора]
- RAID 1. Простейший из настоящих систем RAID. Использует два или более устройств, в идеале — одинакового размера. Каждый диск является «зеркалом» другого; если размеры отличаются, массив будет иметь размер наименьшего диска. Дает большую скорость чтения, чем одиночный диск, так как данные можно читать более чем с одного диска одновременно. Основное преимущество – безопасность: если один диск выйдет из строя, RAID продолжит работать, как прежде, используя исправный диск. Каждый диск, добавляемый в массив RAID 1, увеличивает скорость чтения
и надежность, но не дисковое пространство.
- RAID 4. Немного похож на RAID 0, поскольку размещает свои данные на двух или более дисках, но сверх того использует диск четности. Это отдельный диск, который хранит информацию о записанных данных, чтобы использовать ее для восстановления данных в случае сбоя диска. Это означает, что для RAID 4 требуется как минимум три
диска.
- RAID 5. Не использует отдельный диск четности, а хранит эту информацию на дисках в RAID. Производительность записи может быть низкой, поскольку данные и информация о четности должны записываться на несколько дисков, но производительность операций чтения высокая. Зачастую это лучший вариант для небольших или средних серверов.
- RAID 6. Эволюция RAID 5: предназначен для систем с большими массивами. Предоставляет лучшую защиту от сбоев нескольких дисков в таких массивах, но неэффективен, если используется малое число устройств.
- Уровни 2 и 3 используются редко. RAID-массивы могут быть вложенными, типа RAID 5+0. Если
от этой мысли у вас ломит виски, не беспокойтесь – здесь мы такого касаться не будем!
Запускаем управление дисками
- Использование инструментов и опций ядра для создания RAID-массива из двух разделов.
Теперь, когда вы знаете, как это работает, давайте подготовим вашу систему для RAID. Прежде всего вам понадобится ядро с поддержкой RAID. Она доступна начиная с версии 2.4, так что единственный вопрос – активирована ли она в вашем ядре (ответ, скорее всего, «да», если вы ставили ядро по умолчанию в одном из стандартных дистрибутивов). Если вы собираете собственное ядро, вам понадобятся следующие опции: Device Drivers, Multi-device support (RAID and LVM), Multiple devices driver support (RAID and LVM) и RAID support. Также возьмите модули того типа RAID, который вы хотите использовать: сойдут raid0, raid1 и raid5.
Вы можете проверить поддержку RAID следующим образом:
modprobe raid1 (или тот, модули для которого вы создали) cat /proc/mdstat
Хотя /porc/mdstat должен отчитаться, что у вас нет устройств RAID, само его существование покажет, что RAID готов к использованию.
Для работы с массивами RAID есть два набора инструментов – оригинальный raidtools и более свежий mdadm. С его единственной командой, уместными аргументами и центральной man-страницей, mdadm проще в работе, и здесь мы будем использовать именно его, но перечислим также и команды raidtools во врезке «Справка по командам», справа. Большинство дистрибутивов включают mdadm (обычно и raidtools) на свои установочные диски; некоторые даже устанавливают их по умолчанию.
Путь RAID 1
Начнем с простейшего примера: создать массива RAID 1, используя два раздела, /dev/hda1 и /dev/hdc1. Запустите ваш любимый инструмент для разбиения диска (попробуйте cfdisk) и пометьте разделы как «Linux raid autodetect (filesystem type FD)». Ядро распознает разделы как компоненты RAID и настроит RAID при загрузке. Это означает, что вы можете поместить свой корневой раздел на RAID.
Настроив разделы, создайте RAID с помощью
mdadm --create /dev/md0 --auto=yes --level=raid1 --raid-devices=2 /dev/hda1 /dev/hdc1
Эта команда создаст массив в /dev/md0 («md» – сокращение от Multi-Device): опция auto дает указание создать также и узел (node) устройства. Уровень – RAID 1, с двумя устройствами: hda1 и hdc1. Если вы хотите использовать более двух устройств, допишите дополнительные в командную строку и измените --raid-devices соответствующим образом. Число устройств должно равняться значению --raid-devices (плюс --spare-devices, но об этом чуть позже).
Если какой-то из разделов содержит файловую систему, mdadm, прежде чем продолжить работу, предупредит вас, что вы можете частично потерять ваши данные. Файловая система на первом разделе, заданном в командной строке, будет сохранена на RAID, но остальные будут уничтожены (при других уровнях RAID пропадут все разделы).
Наберите cat /proc/mdstat, чтобы убедиться, что ваш массив создан. Вы увидите нечто вроде
md0: active raid1 hdc1[1] hda1[0] 11719296 blocks [2/2] [UU] [=>..................] resync = 5.6% (665024/11719296) finish=43.5 min speed=4227K/sec
Массив синхронизирован. Данные с первого диска скопированы на второй. Этот процесс будет протекать в фоновом режиме, и если первый диск содержал файловую систему, вы сможете смонтировать его и начать работу с массивом немедленно:
mount /dev/md0 /mnt/somewhere ls -l /mnt/somewhere
Если разделы новые, вам сначала потребуется создать файловую систему:
mke2fs -j /dev/md0 mount /dev/md0 /mnt/newstuff cp -a /mnt/oldstuff/* /mnt/newstuff
Команда для создания массива RAID 0 та же самая, нужно лишь поменять уровень на raid0. Любая существующая файловая система будет разрушена, так что вам нужно будет создать файловую систему на устройстве, прежде чем вы сможете с ним что-нибудь сделать. Чтобы создать массив RAID 5, потребуется минимум три диска, в остальном команда та же самая, с очевидным отличием в параметре --level.
Разбиение массивов: возможно ли?
Программный RAID работает на уровне разделов. Если вы хотите создать массив RAID с четырьмя разделами, вы должны будете сформировать четыре раздела на каждом из ваших дисков и затем создать четыре RAID-массива для каждого из них. Это основной недостаток программных RAID, по крайней мере, с точки зрения администратора. Решение – создать один большой массив и использовать его как физический том LVM, затем создать все ваши разделы как логические тома.
Поскольку за настройки RAID отвечает ядро, а ядро размещается на диске в /boot, вам потребуется обеспечить загрузку ядра до запуска RAID. Можно это делать с помощью отдельного раздела /boot, не являющегося частью RAID. Есть и другой способ, когда ваша система располагается в RAID на 100%. Начало каждого раздела RAID выглядит как обычный раздел жесткого диска. Так что создайте массив RAID 1 для /boot, используя раздел на каждом диске, и ваша система будет просто загружаться с первого диска, настроенного в BIOS.
Что же касается вопроса, где монтировать раздел подкачки (swap), то можете сделать swap частью вашей LVM-системы, или использовать обычный раздел на каждом диске. Особого смысла в размещении swap на RAID нет – ядро Linux в любом случае прекрасно умеет использовать несколько разделов swap, распределяя загрузку между ними. Если один из ваших дисков больше, чем остальные, используйте оставшееся место для размещения swap.
Управление системой
- Что делать, если диск вышел из строя, а вы за 100 миль от него; а также другие заботы администратора.
Итак, вы настроили RAID, установили свои файлы, и все работает прекрасно. Возможно, вы отслеживаете устройства массивов и компонентов с помощью полезных опций mdadm: --query, --detail и --examine. Одна из основных причин для перехода на RAID 1 – функция избыточности; так что же будет, если одному из дисков «поплохеет»?
Проще всего ответить в случае RAID 0, поскольку здесь избыточности нет. Если один диск вышел из строя, это означает несостоятельность массива. Ваши файлы погибли, так что доставайте резервные копии – да-да, те самые, которые вы собирались обновить в прошлом месяце!
С помощью RAID 1 и выше, массив сможет работать без неисправного диска, но со сниженной производительностью. Это лучше, чем лишиться всей системы, но вы вряд ли захотите работать в таком режиме сверх необходимого, поскольку вы беззащитны перед поломкой и второго диска вслед за первым. (Не столь невероятной, как кажется: бывают сбои по внешним причинам, типа скачка напряжения).
Предположим, у вас есть массив RAID 1 на sda1 и sdb1, и sdb1 выходит из строя. Прежде всего нужно удалить неисправный диск из массива. Он уже должен быть помечен как аварийный – для проверки используйте cat /proc/mdstat, диск будет отмечен как (F) – так что удалите его командой
mdadm /dev/md0 --fail /dev/sdb1 --remove /dev/sdb1
Теперь можно отключить питание, снять неисправный диск и заменить его другим, должным образом разбитым на разделы, как мы вам показывали. Когда вы загрузитесь, /dev/md0 будет продолжать работать в деградированном режиме. Тут-то и добавьте новый диск:
mdadm /dev/md0 --add /dev/sdb1
Массив немедленно приступит к его пересозданию в фоновом режиме. Вы можете ощутить некоторое снижение производительности, но пересоздание работает с низким приоритетом. Как обычно, /proc/mdstat будет сообщать вам, что происходит. Отключения питания, добавления диска и ручного ввода команды можно избежать – в составе mdadm есть демон, который наблюдает за вашими дисками в фоновом режиме и отправит вам сообщение по электронной почте в случае проблем (не будете же вы ежеминутно проверять /proc/mdstat).
Демон по вызову
В режиме демона, если вы добавили запасной (spare) диск к массиву, этот диск подключится автоматически, когда один из активных дисков выйдет из строя. Вы можете добавить его при создании массива, например:
mdadm --create /dev/md0 --auto=yes --level=raid5 --raid-devices=3 -- spare-devices=1 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
Эта команда создаст массив RAID 5 с тремя активными дисками и одним запасным. Запасные диски можно использовать на всех уровнях, кроме RAID 0. В уже существующий массив запасное устройство добавляется с помощью
mdadm /dev/md0 --add /dev/sdd1
Если в массиве есть запасной диск, а в одном из активных дисков обнаружена неисправность, неисправный диск автоматически будет удален из массива, а запасной – добавлен.
Если у вас множество массивов, предоставление запасного диска для каждого из них может быть излишним. Взгляните на опцию spare-group на man-странице mdadm.conf. Если она установлена, то mdadm, определив неисправность диска, передаст неиспользуемый в каком-либо массиве запасной диск нуждающемуся массиву. Эта программа обучаема.
Демон mdadm запускается обычным способом, с помощью сценария в /etc/init.d. Используйте инструмент управления сервисами вашего дистрибутива для добавления его на стандартный уровень исполнения (runlevel), чтобы запуск происходил всегда. Адрес электронной почты, куда будут отсылаться оповещения, устанавливается добавкой строки в /etc/mdadm.conf:
MAILADDR me@mydomain.com
Можете также заставить демона запускать какую-либо программу в ответ на «интересное событие» (эвфемизм, применяемый man-страницей для сбоя): например, отсылать вам IM- или текстовое сообщение через SMS-шлюз. Выбор за вами, хотя бешеные вспышки и динамики, орущие «Атас, Вован!», многие сочтут перебором.
Ничто не защитит вас от сбоя нескольких дисков, так что, получив письмо о сбое диска, поскорее замените его, пока по закону Мэрфи не поломался другой.
Можно еще многое рассказать о программных RAID на Linux (man-страница mdadm – хороший источник), но для начала работы мы дали вам более чем достаточно. Только знайте, что вы забавляетесь с данными на вашем жестком диске на низшем уровне, так что будьте осторожны и помните, что RAID не заменяет резервных копий! LXF
Переходим в GUI
Хотя RAID’ом обычно управляют из командной строки, лучшим графическим инструментом его администрирования является вездесущий Webmin. Он доступен в репозитариях большинства дистрибутивов, и многие уже установили его на своем компьютере. Вы найдете модуль RAID в секции Hardware. Он запускается как web-сервис, доступный через любой браузер.
Webmin: просматривайте и управляйте массивами RAID на удаленном сервере или локальном компьютере – даже без графического интерфейса.
Справка по командам
Задача | Команда mdadm | Команда raidtools |
---|---|---|
Создать массив | mdadm --create | mkraid [1] |
Считать информацию о массиве | mdadm --detail | Israid |
Изменить существующий массив | mdadm --grow | raidreconf [1] |
Запустить массив | mdadm --assemble | raidstart |
Остановить массив | mdadm --stop | raidstop |
[1] Эти программы raidtools требуют, чтобы вы сначала ввели информацию в файл конфигурации. Файл конфигурации raidtools – /etc/raidtab, он является обязательным. Файл конфигурации mdadm – /etc/mdadm.conf; перечисление в нем устройств не обязательно, опция --scan для mdadm прочитает всю информацию об устройствах сама.