вторник, 31 января 2012 г.

Настройка RAID 1

Приказал долго жить винчестер на файловом сервере, доказав руководству и бухгалтерии важность дублирования информации. Таким образом, после этого был приобретен еще один винчестер такого же объема, а «покойник» был обменён по гарантии. После вышеописанного и был построен зеркальный массив ака RAID 1 с последующей установкой системы и настройкой SAMBA. Здесь я и опишу как это было сделано.
1. Подключил винчестеры, начал установку системы.
2. Дошел до разметки дисков и начинаю настройку RAID 1.
3. Переключаюсь на 2 консоль (Alt+F2) и набираю 'fdisk /dev/sda', создаю новый раздел командой 'n', fdisk спрашивает тип создаваемого раздела выбираю первичный (primary) — 'p', fdisk спросит номер создаваемого раздела выбираю первый — '1'. Далее ввожу номер первого цилиндра раздела предлагает по умолчанию первый соглашаюсь — 'Enter'. fdisk запрашивает размер создаваемого раздела, делаю раздел размером в 2Gb, указываю +2G (При указании размера раздела таким способом fdisk округлит действительный размер раздела до ближайшего числа цилиндров).Получилось вот так:
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1044, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1044, default 1044): +2G
Таким же образом делаю второй раздел типа primary на 600 Мb и третий отведя под него все оставшееся пространство. Получил 3 раздела: 1 раздел — на нем будет стоять система, 2 раздел — будет для подкачки, 3 раздел — собственно будет файловым хранилищем.
Разметка первого винчестера завершена, командой - 'w' записываю изменения и выхожу из fdisk.
4. Создаю такие же разделы с такими же размерами на втором винчестере - 'sfdisk -d /dev/sda | sfdisk /dev/sdb'.
5. Проставляю корневым разделам тип FD (Linux RAID Autodetect) — 'fdisk /dev/sda', далее команда 't' первый раздел '1'код раздела 'fd' сохраняю и выхожу 'w'.
Тоже самое делаю для второго винчестера (sdb).
6. Для корневого раздела создаю массив с версией metadata 0.90 - 'mdadm -Cv /dev/md1 -b internal --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1 --metadata=0.90'
Должно ответить что-то подобное:
mdadm: size set to 2104383K
mdadm: array /dev/md1 started.
7. Для оставшихся также создаю массивы - 'mdadm -Cv /dev/md2 -b internal --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1' и 'mdadm -Cv /dev/md3 -b internal --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3'
При создании предупреждает что metadata будет отличаться от версии 0.9 соглашаемся.
8. Возвращаюсь в первое окно — 'Alt+F1' выбираю '<Вернуться>' делаю шаг назад до 'Определение дисков' и попадаю снова в 'Разметка дисков' где вижу свои винчестеры с разделами и тут же видны RAID диски.
ВНИМАНИЕ!!! У меня не ставилась система пока не назначил дискам на винчестерах (sda и sdb) значение — 'Использовать как: физический том для RAID'.
9. Далее назначаю RAID устройство #1 использовать файловую систему ext3 и назначаю точку монтирования как корневой каталог - '/', соответственно RAID устройство #2 использовать как подкачку, RAID устройство #3 помечаю - 'не использовать' потом просто примаунчу в fstab.
10. Ну на этом все, продолжаю установку системы, как обычно.
11. После загрузки свежей системы смотрю конфигурацию загрузчика — 'cat /etc/lilo.conf' и проверяю следующие параметры:
boot="/dev/md1"
root="/dev/md1"
raid-extra-boot="mbr-only"
12. Теперь форматирую 3 раздел - 'mkfs.ext3 -E stride=16 /dev/md5' и добавляю его в fstab для автомонтирования при загрузке ОС — 'nano /etc/fstab'
/dev/md5 /mnt/all ext3 defaults,users 0 0
13. Создаю папку в какую буду монтировать — 'mkdir /mnt/all' и собственно монтирую — 'mount -a'
14. Система сама не запоминает какие массивы ей нужно создать и какие компоненты в них входят. Эта информация находится в файле mdadm.conf (на всякий случай перепроверяю) командой - 'mdadm --detail --scan –verbose'.
ARRAY /dev/md1 level=raid1 num-devices=2 metadata=0.90 UUID=339377c0:27d1924b:9d4deba6:47ca997f
devices=/dev/sda1,/dev/sdb1
ARRAY /dev/md/2 level=raid1 num-devices=2 metadata=1.2 name=debian:2 UUID=9b62e844:4966bb02:b5d8963c:375c0e6b
devices=/dev/sda2,/dev/sdb2
ARRAY /dev/md5 level=raid1 num-devices=2 metadata=1.2 name=debian:5 UUID=23804b60:2eac7f3f:ea3b0529:4e7ba3df
devices=/dev/sda5,/dev/sdb5
Проверяю целостность массива md1 - 'echo 'check' >/sys/block/md1/md/sync_action' ну и смотрю результат - 'cat /sys/block/md1/md/mismatch_cnt' получаю ответ:
0
Ну что ж все хорошо.
15. Проверяю про инициализирован ли корректно массив - 'cat /proc/mdstat' Получаю ответ:
Personalities : [raid1]
md5 : active raid1 sdb5[1] sda5[0]
5662708 blocks super 1.2 [2/2] [UU]

md2 : active raid1 sda2[0] sdb2[1]
618490 blocks super 1.2 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk

md1 : active raid1 sda1[0] sdb1[1]
2104384 blocks [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk

unused devices:

Если в файле информация постоянно изменяется, например, идёт пере сборка массива, то постоянно изменяющийся файл просматриваю при помощи - 'watch cat /proc/mdstat'

Работа с массивом (небольшая справка дабы не забыть).
Пометка диска как сбойного - 'mdadm /dev/md1 --fail /dev/sda1' или 'mdadm /dev/md1 -f /dev/sda1'

Удаление сбойного диска - 'mdadm /dev/md1 --remove /dev/sda1' или 'mdadm /dev/md1 -r /dev/sda1'

Добавление нового диска - 'mdadm /dev/md1 --add /dev/sda1' или 'mdadm /dev/md1 -a /dev/sda1'

При необходимости, можно регулировать скорость процесса расширения массива, указав нужное значение. Например если низкая скорость синхронизации - 'echo 200000 > /proc/sys/dev/raid/speed_limit_max' и 'echo 200000 > /proc/sys/dev/raid/speed_limit_min'/

3 комментария:

Дмитрий комментирует...

Отличная статья... Возникает только вопрос - менять дохлый винт можно на горячую? или надо разбирать массив в БИОСе и собирать заново там же? Обычно "узкое место" имеено в этой части - может стоит описать процесс замены дохлого винта более внятно?

Руслан aka Dethroner комментирует...

Провел проверку этого вопроса на виртулке. Настроил все (только корневая и подкачка), потом удалил один из винчестеров. проверил - 'cat /proc/mdstat' получил вот такую запись:
md2 : active (auto-read-only) raid1 sda2[0]
618490 blocks super 1.2 [2/1] [U_]
bitmap: 0/1 pages [0KB], 65536KB chunk

md1 : active raid1 sda1[0]
2104384 blocks [2/1] [U_]
bitmap: 1/1 pages [4KB], 65536KB chunk

Т.е. видно, что масиив перешел в режим degrade.

После добавил винчестер и загрузил систему.
Делаю разделы как на предыдущем все той же командой - 'sfdisk -d /dev/sda | sfdisk /dev/sdb --force'

Проставляю корневым разделам тип FD (Linux RAID Autodetect) — 'fdisk /dev/sdb', далее команда 't' первый раздел '1'код раздела 'fd' сохраняю и выхожу 'w'.
Добавляю новые диски - 'mdadm /dev/md1 -a /dev/sdb1' и 'mdadm /dev/md2 -a /dev/sdb1'.
Проверяю - 'cat /proc/mdstat', получаю ответ видно что началась синхронизация данных:
cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sdb2[2] sda2[0]
618490 blocks super 1.2 [2/1] [U_]
[================>....] recovery = 83.6% (517824/618490) finish=0.0min speed=18493K/sec
bitmap: 0/1 pages [0KB], 65536KB chunk

md1 : active raid1 sdb1[1] sda1[0]
2104384 blocks [2/2] [UU]
bitmap: 1/1 pages [4KB], 65536KB chunk

unused devices:

Все нормально.

Руслан aka Dethroner комментирует...

поправка копипастил допустил описку в командах надо - 'mdadm /dev/md1 -a /dev/sdb1' и 'mdadm /dev/md2 -a /dev/sdb2' вместо 'mdadm /dev/md1 -a /dev/sdb1' и 'mdadm /dev/md2 -a /dev/sdb1'