Установка на программный 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 свой диск:
Добро пожаловать в 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() для перечитывания таблицы разделов.
Синхронизируются диски.
Можно проверить разметку диска, выполнив:
Диск /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: array /dev/md0 started.
Процесс формирования массива вы можете просмотреть, выполнив:
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
Проверьте разметку дисков:
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: stopped /dev/md0
mdadm --zero-superblock /dev/sda2 /dev/sdb2 /dev/sdc2
Настройка оповещения
Для того, чтобы своевременно получать информацию о сбоях в работе RAID-массива, настройте оповещение через электронную почту.
В качестве отправителя почты может быть использован любой SMTP-сервер - например, mail-mta/nullmailer, входящий в состав Calculate Linux Desktop. Для его настройки выполните:
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