Установка на программный RAID

Обновлено 13 марта 2019

Введение

RAID (избыточный массив независимых дисков) — технология виртуализации данных, которая объединяет несколько дисков в логический элемент для повышения надёжности (кроме RAID 0) и увеличения производительности. Чтобы "поднять" RAID-массив, вам не понадобится приобретать RAID-контроллер. Такой массив не привязан к железу и в случае необходимости может быть перенесён на другой сервер с ОС Linux.

Вместе с тем важно помнить, что RAID не является заменой резервного копирования и не исключает резервирование данных, так как, в данном случае, защищает только от выхода из строя одного из дисков. Данные могут быть потеряны и в результате сбоя файловой системы или случайного удаления. Кроме того, при восстановлении RAID-массива есть вероятность выхода из строя второго диска в результате его интенсивного использования.

Для установки Calculate Linux на программный RAID-массив понадобится предварительно разбить один из дисков на разделы, скопировать таблицу разделов на остальные жёсткие диски и создать RAID-массив из одинаковых разделов. В примере описано создание массива RAID 5 на трёх дисках /dev/sda, /dev/sdb и /dev/sdc. Вместо RAID 5 вы можете использовать любой другой RAID-массив.

Создание RAID-массива

Создайте на одном из дисков два раздела - BIOS boot и раздел для RAID. Для этого воспользуйтесь утилитой fdisk:

fdisk /dev/sda

Далее введите следующий текст:

g¶
n¶
¶
¶
+50M¶
t¶
4¶
n¶
¶
¶
¶
t¶
2¶
29¶
w¶

Символ "¶" означает перевод строки. В результате будет создана таблица разделов GPT и два раздела: "BIOS boot" (50 Мб) и раздел под RAID.

Можно воспользоваться готовой командой, подставив вместо /dev/sda свой диск:

echo -e "g\nn\n\n\n+50M\nt\n4\nn\n\n\n\nt\n2\n29\nw" | fdisk /dev/sda

Добро пожаловать в fdisk (util-linux 2.30.2).
Изменения останутся только в памяти до тех пор, пока вы не решите записать их.
Будьте внимательны, используя команду write.

Команда (m для справки): Created a new GPT disklabel (GUID: 3AF4A8EF-7D70-4E98-B340-7D8BFCFD1A66).

Команда (m для справки): Номер раздела (1-128, default 1): Первый сектор (2048-23437770718, default 2048): Последний сектор + число секторов или + размер{K,M,G,T,P} (2048-23437770718, default 23437
Создан новый раздел 1 с типом 'Linux filesystem' и размером 50 MiB.

Команда (m для справки): Выбранный раздел 1
Тип раздела (введите L для получения списка типов разделов): Тип раздела 'Linux filesystem' изменен на 'BIOS boot'.

Команда (m для справки): Номер раздела (2-128, default 2): Первый сектор (104448-23437770718, default 104448): Последний сектор + число секторов или + размер{K,M,G,T,P} (104448-23437770718, default 234
Создан новый раздел 2 с типом 'Linux filesystem' и размером 10.9 TiB.

Команда (m для справки): Номер раздела (1,2, default 2): Тип раздела (введите L для получения списка типов разделов): 
Тип раздела 'Linux filesystem' изменен на 'Linux RAID'.

Команда (m для справки): Таблица разделов была изменена.
Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.

Можно проверить разметку диска, выполнив:

fdisk -l /dev/sda
Диск /dev/sda: 10.9 TiB, 12000138625024 байт, 23437770752 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 4096 байт
Размер I/O (минимальный/оптимальный): 4096 байт / 4096 байт
Тип метки диска: gpt
Идентификатор диска: 3AF4A8EF-7D70-4E98-B340-7D8BFCFD1A66

Устр-во    начало       Конец     Секторы Размер Тип
/dev/sda1    2048      104447      102400    50M BIOS boot
/dev/sda2  104448 23437770718 23437666271  10.9T Linux RAID

Перенесите таблицу разделов на остальные диски массива. Для этого скопируйте таблицу разделов /dev/sda на /dev/sdb и пересоздайте на sdb UUID-таблицы:

sgdisk -R /dev/sdb /dev/sda

sgdisk -G /dev/sdb

Скопируйте таблицу разделов /dev/sda на /dev/sdc и пересоздайте на sdc UUID-таблицы:

sgdisk -R /dev/sdc /dev/sda

sgdisk -G /dev/sdc

Соберите диски в RAID 5:

mdadm --create /dev/md0 --level=5 --raid-devices=3 --metadata=1.2 /dev/sda2 /dev/sdb2 /dev/sdc2
mdadm: array /dev/md0 started.

Процесс формирования массива вы можете просмотреть, выполнив:

watch cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdc2[3] sdb2[1] sda2[0]
      23437403136 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
      [>....................]  recovery =  0.1% (20175232/11718701568) finish=943.1min speed=206732K/sec
      bitmap: 0/88 pages [0KB], 65536KB chunk

unused devices: <none>

Для ускорения операции синхронизации дисков увеличьте предел максимальной скорости синхронизации данных:

echo 10000000 > /proc/sys/dev/raid/speed_limit_max

Проверьте разметку дисков:

lsblk /dev/sda /dev/sdb /dev/sdc
NAME    MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda       8:0    0 10.9T  0 disk  
├─sda1    8:1    0   50M  0 part  
└─sda2    8:2    0 10.9T  0 part  
  └─md0   9:0    0 21.8T  0 raid5 
sdb       8:16   0 10.9T  0 disk  
├─sdb1    8:17   0   50M  0 part  
└─sdb2    8:18   0 10.9T  0 part  
  └─md0   9:0    0 21.8T  0 raid5 
sdc       8:32   0 10.9T  0 disk  
├─sdc1    8:33   0   50M  0 part  
└─sdc2    8:34   0 10.9T  0 part  
  └─md0   9:0    0 21.8T  0 raid5

Установка системы

Установка Calculate Linux на программный RAID выполняется аналогично установке на обычный диск. Программа сама выполнит разбиение RAID-массива на разделы. Для установки достаточно выполнить:

cl-install -D /dev/md0

После установки системы компьютер можно перезагрузить.

Восстановление

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

После замены повреждённого диска (например, /dev/sdb) создайте на нём такую же таблицу разделов, скопировав из одного из дисков (например, /dev/sda):

sgdisk -R /dev/sdb /dev/sda

sgdisk -G /dev/sdb

После этого добавьте раздел диска в массив:

mdadm /dev/md0 -a /dev/sdb2

Проверьте ход выполнения:

watch cat /proc/mdstat

Для ускорения операции синхронизации дисков увеличьте предел максимальной скорости:

echo 10000000 > /proc/sys/dev/raid/speed_limit_max

Заметка

При замене вышедшего из строя диска на диск большего размера оставшееся место можно также использовать под новые разделы.

Удаление RAID-массива

Для удаления массива остановите RAID и удалите метаданные с разделов:

mdadm -S /dev/md0
mdadm: stopped /dev/md0

mdadm --zero-superblock /dev/sda2 /dev/sdb2 /dev/sdc2

Настройка оповещения

Для того, чтобы своевременно получать информацию о сбоях в работе RAID-массива, настройте оповещение через электронную почту.

В качестве отправителя почты может быть использован любой SMTP-сервер - например, mail-mta/nullmailer, входящий в состав Calculate Linux Desktop. Для его настройки выполните:

emerge --config nullmailer

Configuring pkg...

 * Setting /etc/nullmailer/me
 * Setting /etc/nullmailer/defaultdomain

Затем укажите SMTP-сервер, через который будут отправляться письма:

/etc/nullmailer/remotes

smtp.domain.org smtp

Запустите демон nullmailer и добавьте его в автозапуск:

/etc/init.d/nullmailer start

rc-update add nullmailer

Укажите почтовый адрес отправителя и получателя:

/etc/mdadm.conf

MAILADDR входящий@почтовый.адрес
MAILFROM исходящий@почтовый.адрес

Для проверки отправьте тестовое письмо:

mdadm --monitor /dev/md0 --test --oneshot