Разные заметки

суббота, 28 января 2012 г.

Home Server. Часть 5. Создание программного RAID 1.

При создании использовал материалы сайтов:
  1. Создание программного RAID в Linux
  2. Особенности построение Soft-RAID-1 в Linux
  3. Создание программного RAID на Debian (часть 1)
  4. Создание программного RAID на Debian (часть 2)
  5. Заметки о программном RAID с помощью mdadm
  6. 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

Три зеркальных раздельчика :)

Комментариев нет:

Отправить комментарий