пятница, 18 марта 2011 г.

возня с mdadm

Понадобилось сделать несколько рейдов. В линуксе выбор небольшой: если нет аппаратного рейда, или dm-mapper для fake-raid, или mdadm. LVM тут не поможет никак, а нормальных фс типа zfs тут только btrfs, который пока еще бьет данные и в продакшене недопустим.
Попробуем mdadm как наиболее универсальное. Создадим для начала зеркало на 1 диске, указав второй как отсутствующий - missing
# mdadm --create --level=1 --metadata=1.0 sdb missing
mdadm: sdb does not exist and is not a 'standard' name so it cannot be created

# mdadm --create --level=1 --metadata=1.0 /dev/sdb missing
mdadm: no raid-devices specified.

# mdadm --create --level=1 --metadata=1.0 -n 2 /dev/sdb missing
mdadm: You haven't given enough devices (real or missing) to create this array

Сообщения об ошибке просто поражают точностью (подробно - дальше) и смыслом.

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

# mdadm --create test --level=1 --metadata=1.0 -n 2 /dev/sdb missing
mdadm: test does not exist and is not a 'standard' name so it cannot be created

После дальнейшего гугленья оказалось, что имя _обязано_ быть md*

# mdadm --create md2 --level=1 -n 2 --metadata=1.0 sdb missing
mdadm: md2 does not exist and is not a 'standard' name so it cannot be created

Это имя должно показывать в /dev...

# mdadm --create /dev/md5 --level=1 -n 2 --metadata=1.0 sdb missing
mdadm: Cannot open sdb: No such file or directory
mdadm: create aborted

Опа. Ну ладно, тут тоже хотим полный путь. (сообщения об ошибке гениальные, ага. Писано гуру для гуру)

И сделаю заодно ещё вещь: поскольку имена тут кривые, в мане всё-таки нашлась опция для указания своего имени --name=, причём допустимо только для метадаты 1.0+ версий (штатно 0.9).


# mdadm --create /dev/md5 --level=1 --metadata=1.0 -n 2 --name="1T" /dev/sdb missing
mdadm: /dev/sdb is too small: 0K
mdadm: create aborted

Ему мало диска в 1 терабайт... Шикарно.
Хотя тут может и косяк железа - после передёргивания диска оно заработало.

Мониторить надо через /proc/mdstat - ещё один сюрприз. Впрочем, есть
# mdadm --detail /dev/md5

Добавить второй диск потом можно через
#mdadm /dev/md5 --add /dev/sdd

После создания массива можно (и нужно?) скинуть информацию о массивах в конфиг
# mdadm --detail --scan >> /etc/mdadm.conf
Можно еще первой строкой вписать
DEVICE /dev/hd* /dev/sd*
(отсюда)

Просмотр состояния:
#mdadm --detail /dev/md5
#cat /proc/mdstat
В стате есть информация о перестройке массива, например процент выполнения, состояние дисков, ожидаемое время перестроения, скорость.

Можно настроить алерты.
# mdadm --monitor --scan --mail=you@domain.com delay=3600 --daemonise /dev/md0 /dev/md1
Этот момент нашел в гугле - долгое чтение мана про это просветления не дало, тут
К слову, статья большая и применима ко многим системам, только начало пропустить.

Несколько замечаний.
Многие советуют создавать раздел не на весь диск, а создав раздел и уже поверх него. Для дисков только с данными смысл есть, а вот для системных не так очевидно - установив новый загрузчик или изменив старый, надо для каждого из дисков выполнить обновление. В случае целого диска - рейд сам отзеркалит данные.
Если используется рейд, отличный от 1, надо убедиться, что в ядре есть драйвер для нужного уровня рейда, иначе получим "кусок тут, кусок там", системе непонятно, как грузиться, и больше она не загрузится. Особенно актуально для 5-6 уровней. Или /boot в начале каждого диска.. с ручной синхронизацией загрузчиков, в том числе после замены диска.
1.0+ метаинформация: 1.0 - в конце диска, 1.1 - в начале, 1.2 - начало+4к. Видимо, для совместимости с загрузчиком.
Ели надо перенести куда-то массив - у вас проблемы. Просто вынуть диски тут, вставить там - можно получить что угодно вплоть до потери данных. Хоть и есть mdadm --scan
Заменить диск, судя по всему, тоже задача нетривиальная, по ссылке выше - требуется использовать fdisk и править разделы. Это не аппаратный массив с "вынул старый - вставил новый", и не gmirror c gmirror forget;gmirror insert ...

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

UPD: Перенос Centos Linux 5 с одного диска на Soft Raid

Моя ошибка была в том, что я начал с манов, а надо было начинать отсюда:
Вики (рус) - там тоже есть инфа по работе с массивом.

1 комментарий:

  1. или воспользоваться Palimpsest Disk Utility: http://en.wikipedia.org/wiki/Palimpsest_Disk_Utility

    ОтветитьУдалить