LXF131:RAID

Материал из Linuxformat.

Перейти к: навигация, поиск
Hardcore Linux Проверьте себя на крутом проекте для продвинутых пользователей

Содержание

RAID-5: Защита ваших данных

Эксперт по дисковым травмам Бен Мартин наделит вас мощью программного RAID, чтобы ваши данные пережили смерть винчестера.

В наши дни ядро Linux обеспечивает исключительно хорошую программную поддержку RAID-массивов (Redundant Array of Inexpensive Disks [избыточный массив независимых/недорогих жёстких дисков]). Достаточно подключить нужное число накопителей и сказать ядру, как настроить ваш RAID. Вы можете назначать требуемую избыточность: скажем, нужна защита от потери двух дисков из пяти без повреждения данных. Тут есть и оборотная сторона: чем больше дисков вы можете позволить потерять, тем меньше полезного места будет на вашем RAID.

Многие материнские платы объявляют, что предоставляют аппаратный RAID. BIOS нередко реализует его через системный процессор, так что по сути этот RAID тоже программный. Основной повод выбрать для построения RAID ядро Linux вместо прошивки на материнской плате – это свобода переноса RAID-массива на другую машину при обновлении вашего оборудования.

Программный RAID в ядре Linux включает различные его типы: зеркалирование, чередование, RAID с контролем четности (RAID-5 и RAID-6) и RAID-10 (комбинация зеркалирования и чередования). Ядро также более гибко – к примеру, если вы хотите добавить новый 1‑ТБ диск в RAID, сделанный вами шесть месяцев назад, можно расширить старый RAID, включив в него новый диск. Скорее всего, придется выключить питание компьютера, чтобы добавить само устройство, но ядро может встроить новый диск в RAID, даже когда вы пользуетесь машиной. Различные конфигурации RAID имеют различные параметры подмены одних дисков другими – сколько и каких дисков может «умереть», не вызвав потери ваших данных, много ли дискового пространства вы реально сможете использовать и как быстр будет ваш RAID. Например, массив с чередованием (RAID-0) пишет блоки данных на оба диска по очереди и, следовательно, достаточно быстр. Оборотной же стороной является то, что в RAID-0 при гибели любого диска вы потеряете все свои данные.

Создавая RAID с помощью ядра Linux, вы сообщаете ему, какие разделы на каких дисках объединить в массив. Затем вы получаете новое RAID-устройство – скажем, /dev/md/md-что-то, и можете использовать md-что-то как любой другой раздел – например, запустить mkfs.ext3 /dev/md/md-что-то для создания на нем файловой системы ext3 и затем смонтировать ее куда-нибудь.

Правда, минус данного подхода – необходимость создания нового RAID для каждой файловой системы, которая вам потребуется: захотите, чтобы /usr и /tmp были на разных файловых системах – создавайте два RAID-устройства. Удобно будет использовать на RAID-устройстве логическое управление томами [Logica lVolume Management, LVM] и затем создать множество различных файловых систем на одном и том же RAID-массиве. LVM также позволяет использовать для настройки файловых систем инструменты с графическим интерфейсом, такие как system-config-lvm. Естественно, все это можно проделывать и через командную строку. Еще один повод использовать LVM поверх RAID – возможность расширения и миграции логического тома. Если с годами потребуется настроить новый RAID, можно будет просто перенести ваш логический том со старого RAID на новый.

Наш урок научит вас настраивать программный RAID и ставить на него LVM для управления разделами. Так как графический инструмент system-config-lvm достаточно дружелюбен к пользователю, процесс разбиения с использованием LVM будет рассмотрен не очень подробно. Мы сфокусируемся на установке RAID и mdadm. Я также расскажу, как добавить в RAID новый жесткий диск, чтобы вы смогли со временем расширить его (включая и LVM). Рекомендуется как минимум прочесть страницу руководства mdadm, чтобы чувствовать себя комфортно с описанной процедурой. За целостность и доступность ваших данных отвечаете вы и только вы.

Детали RAID

Две наиболее интересные для вас группы RAID – RAID-10 и «RAID с четностью»: RAID-5 или RAID-6. Если у вас шесть терабайтных дисков, RAID-10 даст вам 3 ТБ дискового пространства (половина объема вам не доступна: она используется для защиты данных от повреждения). Зато вы можете позволить себе потерять до трех дисков в массиве без угрозы потери данных.

С другой стороны, в RAID-5 нужен отдельный диск для хранения контрольных сумм, а остальные можно использовать полностью, получив при той же схеме 5 ТБ дискового пространства. RAID-6 похож на RAID-5, с тем исключением, что для контрольных сумм вам потребуются два диска. В RAID с проверкой четности число дисков контрольных сумм равно числу дисков, которых вы можете лишиться без потери данных: 1 для RAID-5 или 2 для RAID-6.

При потере диска вы можете просто заменить его на новый и велеть системе записать на него данные и контрольные суммы для восстановления избыточности, чтобы опять позволить себе терять один диск, сохраняя данные.

Я отметил, что для RAID-10 можно потерять до трех дисков из шести без потери данных. «До трех» означает, что это число зависит от того, какие диски вы потеряете. Так как RAID-10 – комбинация чередования и зеркалирования, и каждый конкретный блок данных пишется на на два диска (зеркалирование), то потеря обоих из этих двух дисков уничтожит и ваши данные! Это условная вероятность, которую защитники RAID-10 часто упускают из виду.

Для RAID с контрольными суммами вам также следует применять источники бесперебойного питания (UPS), потому что запись на RAID при сбое питания может повредить его целиком или частично [это более вероятно, чем может вам показаться, – прим. ред.]. Допустим, вы записали данные на один из пяти дисков, но диск с контрольными суммами перед сбоем записаться не успел. В этом случае RAID не будет знать, чему верить – пяти дискам с данными или информации на диске с контрольными суммами.

Настраиваем RAID

Для настройки LVM поверх RAID-5 или RAID-6 применяются два различных инструмента: mdadm и какая-либо из утилит LVM, например, system-config-lvm. Сперва вы создаете RAID-устройство, которое объединяет вместе набор разделов и реализует функциональность RAID.

Наши тесты выполнялись с использованием небольших дисков внутри виртуальной машины. Эти диски отображаются в виртуальной машине как обычные, вида /dev/sdb, и в целях нашего урока функционируют как настоящие физические диски. Я также настраивал много настоящих массивов RAID-5, RAID-6 и RAID-10 в различных конфигурациях с использованием реальных жестких дисков от сотен мегабайт до терабайт объема.

Тестовая установка использует четыре 200‑МБ виртуальных диска, которые выглядят как /dev/sdc, sdd, sde и sdf. Отличие между реальным физическим и виртуальным диском в том, что виртуальный диск не появляется, как он делал бы на реальной машине, в директории /dev/disk/by-id. Директория /dev/disk/by-id отображает список дисков по изготовителю, модели и серийному номеру. Каждый раздел на каждом из этих дисков имеет свою ссылку. Я бы рекомендовал использовать ссылки в /dev/disk/by-id при создании RAID с помощью mdadm, потому что именование физических дисков по изготовителю, модели и серийному номеру оставляет меньше простора для человеческого фактора, приводящего к ошибкам из-за указания неверного диска. Если вы используете новые диски и планируете задействовать их в RAID целиком, я все равно предлагаю создать на каждом из новых дисков одиночный раздел: тогда в будущем, добавляя новый диск для расширения RAID, вы будете иметь лишний способ определить, что это именно новый диск, так как на нем не будет раздела. Чтобы создать такой раздел, запустите fdisk на каждом новом диске, наберите N (новый), P (основной), 1 и дважды нажмите Enter, чтобы использовать весь диск. Измените t (тип) раздела на FD (Linux raid autodetect) и W (запишите) таблицу разделов. Вот пример таблицы разделов, настроенной таким образом:

# [id:fdisk-sdc]
# fdisk -l /dev/sdc
Disk /dev/sdc: 214 MB, 214748160 bytes
64 heads, 32 sectors/track, 204 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Disk identifier: 0x959ddf6b
Device Start End ... Id System
/dev/sdc1 1 204 ... fd Linux raid autodetect

При создании RAID будет полезным дать RAID-устройству более осмысленное имя, чем идущее по умолчанию – вида /dev/md/md0. Это не обязательно, но облегчит вам поиск, если вы используете несколько RAID-массивов. Если вы измените имя устройства, затем нужно использовать для mdadm параметр командной строки --auto, чтобы сказать ему, RAID-устройство какого типа он должен для вас создать.

Команда, приведенная в следующем примере, создает новый RAID-5, используя четыре выбранных диска, и задает приятное «говорящее» имя для RAID-устройства. Создав RAID, я проверил параметры его присутствия и увидел, что состояние RAID – «чистый» [clean], и каждый из четырех дисков активен.

На беду, mdadm выводит имена разделов, используя соглашение именования /dev/sdX, и приходится рыться в /dev/disk/by-id, выясняя, к какому диску с каким серийным номером относится сообщение mdadm. Хотя mdadm рапортует о дисках RAID, используя /dev/sdc, реально буква диска может меняться от загрузки к загрузке, и mdadm должен продолжать правильно находить и настраивать RAID. К примеру, я вначале создал диск в /dev/sdb, который не содержал данных и существовал исключительно для того, чтобы первый раздел RAID был на /dev/sdc. После создания и установки RAID я удалил /dev/sdb из виртуальной машины и перезапустил ее.

RAID продолжал правильно работать, хотя после перезагрузки четыре диска изменили свою позицию (старый sdc стал теперь sdb, и т. д.). Этого можно было ожидать, но проверка никогда не помешает.

RAID наконец появился в system-config-lvm.

# [id:mdadm-create]
# Creating a RAID device for four disks
# mdadm --create --auto=md --verbose \
/dev/md/md-lxftest --level=5 --raid-devices=4 \
/dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
# mdadm --detail /dev/md/md-lxftest
/dev/md/md-lxftest:
Version : 00.90.03
Creation Time : Thu Feb 11 22:50:49 2010
Raid Level : raid5
Array Size : 628800 (614.17 MiB 643.89 MB)
Used Dev Size : 209600 (204.72 MiB 214.63 MB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 127
Persistence : Superblock is persistent
Update Time : Thu Feb 11 22:51:02 2010
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 64K
UUID : 470970a6:d264c64e:c3926...cf805a
Events : 0.4
Number Major Minor RaidDev State
0 8 32 0 active sync /dev/sdc1
1 8 48 1 active sync /dev/sdd1
2 8 64 2 active sync /dev/sde1
3 8 80 3 active sync /dev/sdf1

Если при создании RAID вы допустили ошибку, вам, вероятно, захочется удалить его и начать сначала. Команда для избавления от RAID показана в следующем блоке кода. Если у вас настроен LVM поверх RAID, вам, скорее всего, придется сперва удалить все логические разделы и все физические тома, созданные ранее на RAID. Причина, по которой я перезагрузился, была в необходимости убедиться, что процедура загрузки не попытается восстановить RAID. Это помогает предотвратить попытку заново использовать диски из только что удаленного RAID.

Если вы удалили и пересоздали RAID, используя те же разделы, вы будете предупреждены, что это устройство уже было частью массива RAID, чтобы вы случайно не добавили в новый RAID неправильный диск. Если вы продолжите создавать RAID, вы затем должны запуститься с состоянием «clean, degraded, recovering», и один из дисков будет в состоянии «свободен-перестроение» (spare rebuilding). При большом объеме используемых дисков процесс перестройки может занять немалое время – так, для 500‑ГБ дисков потребуется несколько часов. А вот как удаляется RAID-массив:

# [id:mdadm-delete]
# vi /etc/mdadm.conf
... удалите запись, если она есть ...
# mdadm --manage --stop /dev/md/md-lxftest
# sync
# reboot

Загрузочные сценарии Fedora активируют RAID при старте, только если существует файл /etc/mdadm.conf. Если это единственный созданный вами RAID, то команда из приведенного ниже кода (id:mdadm-config) создаст корректный конфигурационный файл. Данной спецификации может соответствовать множество устройств – это заставит mdadm просматривать все ваши разделы, чтобы попытаться найти используемые в вашем RAID-массиве. Устройства также могут быть указаны посредством шаблонов. Если вы создали RAID, задействовав первые разделы четырех дисков, которые имеют одни и те же название изготовителя и размер, то применение пути /dev/disk/by-id/ и маски поможет выбрать только интересующие нас диски и разделы, сэкономив время на поиске во время загрузки. К примеру, спецификация вида DEVICE /dev/disk/by-id/ata-SAMSUNG_HD501LJ*part1 велит mdadm проверять только первые разделы в коллекции 500‑ГБ дисков Samsung. Если вы настраиваете новый RAID, то можете добавить второй раздел DEVICE, приказав mdadm также просматривать эти диски для поиска разделов RAID.

# [id:mdadm-config]
# echo ‘DEVICE partitions’ >> /etc/mdadm.conf
# mdadm --detail --scan >> /etc/mdadm.conf
# cat /etc/mdadm.conf
DEVICE partitions
ARRAY /dev/md/md127 level=raid5 num-devices=4
UUID=eb..

Хотя созданная выше конфигурация должна заработать, вы можете решить изменить строку ARRAY, сгенерированную запущенным mdadm. В частности, полезно бывает использовать специальные имена устройств и удалить параметр num-device. Удаление аргумента num-device означает, что в будущем при расширении RAID-массива вам не придется помнить о необходимости подправить это значение. Если вы изменяете файл устройства, добавьте аргумент auto, чтобы сказать mdadm, какой тип устройства нужно создать для вас.

Окончательная конфигурация будет такой:

# [id:/etc/mdadm.conf]
DEVICE partitions
ARRAY /dev/md/md-lxftest auto=md level=raid5 UUID..

Расслоение LVM

Логическое отображение новой группы томов: мы можем теперь сделать раздел для файловой системы Linux.

Новое RAID-устройство, которое мы только что создали, не будет немедленно доступно из system-config-lvm. Вы должны запустить на нем pvcreate, чтобы оно стало видимым, как показано в коде ниже (id:pvcreate-for-md). На этом этапе вы увидите новый неразмеченный том для вашего RAID, как представлено на экранном снимке.

Теперь вы можете использовать графический интерфейс system-config-lvm для создания новой группы томов и настройки нескольких логических томов на RAID для использования с вашими файловыми системами. Кликните на «Create New Volume Group» [Создать новую группу томов] для выделения новой группе томов свободного физического тома, созданного в (id:pvcreate-for-md). Создать новую группу томов достаточно просто. Выбрав новую группу томов, откройте дочернее ‘Logical View’ [Логическое представление] этой группы, и вы увидите пункт ‘Create New Logical Volume’ [Создать новый логический том]. На этом этапе вы заметите опцию создания новых логических томов внутри логического отображения группы томов. Именно на логических томах в LVM вы и создаете файловые системы Linux. Поэтому создание нового логического тома также позволит вам установить файловую систему и точку монтирования.

# [id:pvcreate-for-md]
pvcreate /dev/md/md-lxftest

Расширяем RAID

Чтобы убедиться, что RAID можно расширить без потери содержащихся на нем данных, я скопировал на массив достаточно большой файл и записал его сумму MD5. Замечу что в оригинале логический том для /my-precious занимал все доступное пространство на группе томов RAID. При расширении файловой системы я велел lvextend использовать все доступное пространство при изменении размера логического тома. Это, пожалуй, наиболее часто используемый сценарий: вы добавляете новый диск в RAID и расширяете раздел, который стал тесен для данных.

Скорая помощь

Более подробно об LVM см.на http://www.tldp.org/HOWTO/LVM-HOWTO/index.html.

Новый диск, добавляемый в RAID – это /dev/sdg. Как и в случае других дисков, я сперва создал одиночный раздел и установил его тип в FD. Команды и часть их вывода показаны в (id:md-resize). После добавления нового диска в RAID-массив он был помечен как свободный (spare). Команда mdadm --grow велит массиву изменить свой размер для включения нового дискового раздела. Для RAID-5 это потребует большой дисковой активности, так как новый диск будет вовлечен в процедуру контроля четности, и блоки потребуется перераспределить. По завершении переразметки pvresize включит новое пространство в физический том LVM. Команда lvextend расширит логический том LVM, заняв назначенное пространство (в данном случае я велел ей использовать все свободное пространство, доступное в физическом томе).

Сама файловая система все еще будет иметь старый размер. Финальным шагом будет использовать resize2fs или xfs_growfs (или аналогичный инструмент для конкретной файловой системы), чтобы изменить размер файловой системы и сделать новое пространство доступным.

Я оставил файловую систему /my-precious смонтированной в течении всей операции, хотя на самом деле не писал в нее новые данные в процессе изменения размера.

Новый логический том для моих драгоценных файлов.

Скорая помощь

Более подробно о программном RAID см. на http://tldp.org/HOWTO/Software-RAID-HOWTO.html.

[id:md-resize]
# fdisk /dev/sdg
...
# mdadm --add /dev/md/md-lxftest /dev/sdg1
# mdadm --detail /dev/md/md-lxftest |grep sdg
4 8 81 - spare /dev/sdg1
# mdadm --detail /dev/md/md-lxftest |grep Work
Working Devices : 5
# mdadm --grow /dev/md/md-lxftest --raid-devices=5
mdadm: Need to backup 768K of critical section..
mdadm: ... critical section passed.
# mdadm --detail /dev/md/md-lxftest
...
State : clean, recovering
Active Devices : 5
Working Devices : 5
Failed Devices : 0
Spare Devices : 0
...
Reshape Status : 10% complete
Delta Devices : 1, (4->5)
... once the reshaping completes ...
# pvscan
PV /dev/md/md-lxftest VG RaidedStorage
lvm2 [608.00 MB / 0 free]
# pvresize /dev/md/md-lxftest
# pvscan
PV /dev/md/md-lxftest VG RaidedStorage
lvm2 [812.00 MB / 204.00 MB free]
# df -h /my-precious
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/RaidedStorage-my--precious
599M 543M 26M 96% /my-precious
# lvextend -l ‘+100%FREE’ \
/dev/RaidedStorage/my-precious
Extending logical volume my-precious to 812.00 MB
Logical volume my-precious successfully resized
# df -h /my-precious/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/RaidedStorage-my--precious
599M 543M 26M 96% /my-precious
# resize2fs /dev/RaidedStorage/my-precious
resize2fs 1.40.2 (12-Jul-2007)
Filesystem at /dev/RaidedStorage/my-precious
is mounted on /my-precious;
on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of
/dev/RaidedStorage/my-precious
to 207872 (4k) blocks.
The filesystem on /dev/RaidedStorage/my-precious
is now 207872 blocks long.
# df -h /my-precious/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/RaidedStorage-my--precious
799M 543M 218M 72% /my-precious
# md5sum /my-precious/largefile
... порядок! …

С учетом низкой цены 1,5‑ТБ дисков по состоянию на февраль 2010, самое время соединить четыре таких накопителя в RAID-5 или шесть дисков в RAID-6. Если у вас не хватает портов SATA, недорогая PCI-карта Silicon Image 3114 даст вам четыре SATA-порта, готовых к новому четырехдисковому RAID-5.

Сгруппировав новые диски вместе в ваш RAID и создав на этом массиве физический том LVM, вы сможете использовать system-config-lvm обычным образом, но ваши данные будут защищены от аппаратных сбоев.

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию