- Создание программного RAID в Linux
- Особенности построение Soft-RAID-1 в Linux
- Создание программного RAID на Debian (часть 1)
- Создание программного RAID на Debian (часть 2)
- Заметки о программном RAID с помощью mdadm
- MDADM
Дано: два диска по 1Тб.
Linux RAID vs SATA RAID.
Чем же так плох SATA RAID, который сейчас идет в поставке практически всех современных материнских плат? Да тем что он в большинстве бюджетных решений не является аппаратным RAID-ом, а является так называемым «программно-зависимым». Подробнее тут, тут и как же без Википедии?
То есть управление данными происходит не на уровне самого «железа», а на уровне микрокода BIOS через драйвер ОС. От сюда и такие понятия как «драйвера» на SATA-RAID (без которых RAID видится как отдельные диски), от сюда и проблемы.
Во-первых это несовместимость – сгорела материнская плата, и ищи такую же плату целиком (не контроллер), нужна идентичная плата чтобы добыть свои ценные данные. Хорошо если они еще выпускаются, а если это произойдет лет через 5-10? Linux RAID лишен этой проблемы, т.к. находится на таком уровне абстракции, что ваш RAID будет «виден» на любой материнской плате и на любом дистрибутиве Linux (в разумных рамках естественно).
Во-вторых SATA RAID это доверие своих данных какому-то чужому микрокоду, который мало того что не свободен от ошибок, так еще и закрыт. В отличии от Linux RAID, открытого, испытанного уже десятилетиями и вылизанного тысячами программистов, с доступными спецификациями и исходными кодами. Плюс – беспроблемное свободное перемещение дисковых томов на различные материнские платы, долгосрочная поддержка (всем сообществом, а не отдельным конечным вендором), не требует аппаратных апгрейдов, легкость обновления, и многое другое. Подробнее.
Linux RAID vs SATA и пр. аппаратный RAID
Тут в плане быстродействия конечно же выиграет аппаратный RAID. Минусы опять же – если летит контроллер, то нужен именно такой же, на котором стояли жесткие диски. Второй минус для бюджетных решений – высокая цена хорошего аппаратного RAID.
Итак, мы выбрали Linux Software RAID в качестве решения для хранения данных. Теперь опишем пример создания RAID с «зеркалированием» (mirror) на программном Linux RAID-е.
Установка пакетов
aptitude install mdadm
Во время установки система попросит параметры для обслуживания уже установленных массивов или для будущих. Чтобы не заморачиваться оставьте предложенные параметры по-умолчанию (all). Далее необходимо подготовить жёсткие диски для соединения в массив, определимся, что будем использовать массив класса RAID 1. Один из наиболее надежных (полное зеркалирование) и не дорогое решение.
Шаг 1. cfdisk /fdisk
Мы имеем 2 жестких диска (sdb и sdc) которые будут у нас представлять RAID1 с зеркалированием данных. Создаем на этих дисках разделы sdb1 и sdc1 одинакового размера под будущий RAID. Для этих целей можно использовать к примеру утилиты fdisk или cfdisk. Выставляем типы этих партиций как FD (Linux raid autodetection)
Шаг 2. Создаем RAID1
Создаем RAID1 из этих разделов:
mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sdb1 missing
Я создаю зеркало в то время, как второй диск отсутствует. Оказался битым и портил все дело.
Если бы такого не было - то вместо "missing" необходимо поставить "/dev/sdc1".
Если во время сборки не хватает физических дисков, но вы планируете добавить их позже, т.е. собрать не полный RAID массив (degraded) можно указать слово missing вместо имени устройства. Для RAID 5 это может быть только один диск, для RAID 6 — не более двух, для RAID 1 сколько угодно, но должен быть как минимум один рабочий.
Шаг 3. Детали о созданном RAID
Посмотреть детали о только что созданном RAID можно командой:
mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Jan 28 19:56:44 2012
Raid Level : raid1
Array Size : 976758841 (931.51 GiB 1000.20 GB)
Used Dev Size : 976758841 (931.51 GiB 1000.20 GB)
Raid Devices : 2
Total Devices : 1
Persistence : Superblock is persistent
Update Time : Sat Jan 28 20:12:52 2012
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Name : srv93:0 (local to host srv93)
UUID : bd099ae7:acee3a42:f686fe36:6c266105
Events : 12
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 0 0 1 removed
или командой:
cat /proc/mdstat
При двух дисках выводится вот так:
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active (auto-read-only) raid1 hdd1[1] hdb1[0]
20971328 blocks [2/2] [UU]
resync=PENDING
unused devices:
Система сообщает, что создан RAID 1 массив, в который входят два устройства - hdd1 и hdb1. Проверка состояния нашего массива показывает [UU] - означает, что все в порядке, а ([_U] или [U_] означает, что массив поврежден. Имя нашего RAID массива md0. Теперь можно переходить к созданию файловой системы поверх нашего массива.
Шаг 4. Создание файловой системы.
mkfs.ext4 /dev/md0
Файловая система создана, но она еще не готова принимать к размещению данных. Можно посмотреть статус массива.
cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 hdd1[1] hdb1[0]
20971328 blocks [2/2] [UU]
[==>..................] resync = 10.7% (2260416/20971328) finish=8.4min speed=36824K/sec
unused devices:
Здесь видно, что идет формирование нашего RAID массива, выполнено 10.7%, до завершения осталось 8.4 минуты и показывает с какой скоростью идет процесс. Вы можете запустить watch -d -n1 "cat /proc/mdstat" для наблюдения за ходом процесса. Выход из watch осуществляется нажатием CTRL+C.
cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[0]
976758841 blocks super 1.2 [2/1] [U_]
unused devices:
Это мой массив с созданной файловой системой из одного диска.
Создание файловой системы завершено.
Шаг 5. Файлы конфигурации mdadm.
Теперь нужно создать файл конфигурации нашего RAID массива. Система сама не запоминает какие RAID массивы ей нужно создать и какие компоненты в них входят. Эта информация находится в файле конфигурации mdadm.conf. Параметры, которые следует добавить в этот файл, можно получить при помощи команды
mdadm --detail --scan --verbose
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=srv93:0 UUID=bd099ae7:acee3a42:f686fe36:6c266105
devices=/dev/sdb1
Команда не добавляет параметры в файл конфигурации, а только выдает, что нужно добавить в него. Полученные параметры можно внести в конфигурационный файл вручную или воспользоваться перенаправлением.
mdadm --detail --scan --verbose | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf
Шаг 6. Автомонтирование.
Теперь все готово. И можно приступать к настройке автомонтирования нашего RAID массива при загрузке системы. Но сначало надо создать директорию куда будем монтировать RAID массив.
cd /mnt
mkdir my_raid
Далее редактируем файл /etc/fstab.
## My SoftRAID 1
/dev/md0 /mnt/my_raid ext4 defaults 0 0
Стоит заметить, что если вносите в файле /etc/fstab коррективы, обязательно на последней строке делайте перевод корретки (последняя строка в файле пустая), дабы избежать потом проблем с монтированием устройств хранения.
Создание, настройка RAID 1 массива завершено. Теперь можно его смотрировать и использовать. При следующей загрузке системы массив будет смонтирован автоматически.
P.S.: Позже обновлю статью относительно добавления исправного диска в массив.
UPD1. Управление массивом.
Эта команда добавляет новый «диск» (а вернее раздел) в массив md0. Добавленный диск считается пустым и резервным. Его можно использовать для расширения размера массива или он будет автоматически использован (в массивах, обеспечивающих отказоустойчивость) в качестве замены для вышедшего из строя диска.
Добавляем отсутствующий диск в наше зеркало, чтобы оно наконец стало полнофункциональным:
Добавляем отсутствующий диск в наше зеркало, чтобы оно наконец стало полнофункциональным:
mdadm /dev/md0 --add /dev/sdc1
cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc1[2] sdb1[0]
976758841 blocks super 1.2 [2/1] [U_]
[>....................] recovery = 0.1% (1232064/976758841) finish=250.7min speed=64845K/sec
Пошло восстановление массива, со скоростью примерно 65 Мбит/с. Система говорит что для этого потребуется 250.7 минут О_о
Отслеживать можно следующим образом:
watch -d -n1 "cat /proc/mdstat"
UPD1. Еще несколько полезных команд:
Для расширения размера массива (если конечно тип массива допускает расширение) указывается ключ -G (--grow) и новое число дисков массива с помощью ключа -nX (--raid-devices=X).
mdadm -G /dev/md0 -n4
Процесс реструктурирования массива выполняется в фоновом режиме и обычно занимает много часов. Наблюдать за ходом процесса можно просматривая файл /proc/mdstat. В принципе можно расширять и смонтированные массивы — это не опасно, но это увеличивает время реструктуризации. По умолчанию, скорость реструктуризации ограничена, но ее можно изменить
cat /proc/sys/dev/raid/speed_limit_m*
200000
1000
echo 10000 >/proc/sys/dev/raid/speed_limit_min
Расширение массива не увеличивает автоматически размер файловой системы на ней находящийся. Поэтому затем нужно расширить файловую систему явно. Для того чтобы удостовериться, что расширение произошло без ошибок можно проверить целостность файловой системы.
UPD1. Удаление массива
Останавливаем массив.
mdadm -S /dev/md0
Очищаем суперблоки RAID на разделах, из которых собран массив.
mdadm --zero-superblock /dev/sd[a-e]1
UPD1. Файл конфигурации mdadm.conf
Иногда требуется вручную добавлять информацию в файл mdadm.conf. Взять ее можно, выполнив команду
mdadm --detail --scan
В результате нам будет выведена информация вида:
ARRAY /dev/md/0 metadata=1.2 name=server:0 UUID=74c51786:16bbb1af:469a4f42:76ec9654
ARRAY /dev/md/1 metadata=1.2 name=server:1 UUID=6c65a539:36d0f116:b1194783:fc35d949
ARRAY /dev/md/2 metadata=1.2 name=server:2 UUID=55c01664:2cc1aa5b:5257948b:a7ea760c
ARRAY /dev/md/3 metadata=1.2 name=server:3 UUID=cf13c857:59adbacc:165c987e:d7c7f8a1
Её и добавляем в файл mdadm.conf
UPD1. Известные проблемы
1. Частая ошибка при создании RAID устройств заключается в том, что dmraid-driver берет управление над всеми устройствами, которые должны были использоваться в новом RAID устройстве. Будет выдано сообщение об ошибке такого вида:
mdadm: Cannot open /dev/sdb1: Device or resource busy
Чтобы решить эту проблему, вы должны собрать новый образ initrd(initramfs) без dmraid-driver.
Пример для ядра «2.6.18-8.1.6.el5»-kernel:
mkinitrd --without-dmraid /boot/NO_DMRAID_initrd-2.6.18-8.1.6.el5.img 2.6.18-8.1.6.el5
После этого, система должна быть перезагружена с новым initrd(initramfs). Отредактируйте ваш /boot/grub/grub.conf чтобы указать новый initrd(initramfs).
2. Если один из компонентов массива переходит в статус «Failed», то обычно помогает его ручное удаление из массива, а затем – добавление заново. Например:
mdadm --manage /dev/md1 --remove /dev/sdd1
mdadm --manage /dev/md1 --add /dev/sdd1
При повторении этой ситуации следует проверить дисковый накопитель на исправность.
UPD2. Итог всех действий:
sudo df -h
Файловая система Разм Исп Дост Исп% смонтирована на
/dev/sda2 14G 305M 13G 3% /
tmpfs 1,6G 0 1,6G 0% /lib/init/rw
udev 1,6G 224K 1,6G 1% /dev
tmpfs 1,6G 0 1,6G 0% /dev/shm
/dev/sda7 19G 175M 19G 1% /home
/dev/sda8 6,4G 68K 6,1G 1% /tmp
/dev/sda5 92G 858M 87G 1% /usr
/dev/sda6 92G 543M 87G 1% /var
/dev/md0 413G 317G 96G 77% /mnt/my_raid/s***
/dev/md1 413G 149G 264G 37% /mnt/my_raid/k***
/dev/md2 92G 80G 13G 87% /mnt/my_raid/install
Три зеркальных раздельчика :)
sudo df -h
Файловая система Разм Исп Дост Исп% смонтирована на
/dev/sda2 14G 305M 13G 3% /
tmpfs 1,6G 0 1,6G 0% /lib/init/rw
udev 1,6G 224K 1,6G 1% /dev
tmpfs 1,6G 0 1,6G 0% /dev/shm
/dev/sda7 19G 175M 19G 1% /home
/dev/sda8 6,4G 68K 6,1G 1% /tmp
/dev/sda5 92G 858M 87G 1% /usr
/dev/sda6 92G 543M 87G 1% /var
/dev/md0 413G 317G 96G 77% /mnt/my_raid/s***
/dev/md1 413G 149G 264G 37% /mnt/my_raid/k***
/dev/md2 92G 80G 13G 87% /mnt/my_raid/install
Три зеркальных раздельчика :)
Комментариев нет:
Отправить комментарий