Скрипт управления RAID массивами mdadm в Linux
Встала задача: собрать компьютер с зеркалированием двух дисков для сохранности информации в Линукс. Где-то в процессе понял, что обычный пользователь не справится с управлением - много моментов, которые даже "бывалому мне" выносили мозг. В итоге написал Bash скрипт управления RAID массивами mdadm в Linux - md. Написан и отлажен(проверен) для RAID1 схемы, остальные должны работать, настоятельно советую протестировать функции до использования других RAID схем.
При использовании на домашней машине, в случае проблем с RAID массивом, на рабочем столе появится кликабельная иконка(восклицательный знак, запускающая скрипт md) предупреждающая о поломке. Для серверов есть возможность отсылать в php скрипт информацию о тестировании дисков и массивов..
Скрипт написан только под GPT разметку диска, в чём разница читайте в статье разметка диска GPT или MBR Linux. Для Debian, Ubuntu итд. (Должен работать во всех других дистрибутивах, кроме пунктов установки ПО.)
14.08.2023 Добавил пару функций для монтирования раздела к директории и форматирование раздела.
29.07.2023 Произвёл полный рефакторинг(улучшение, оптимизация итп) кода и проверку функций. Были разукрашены и выровнены заголовки и некоторые участки. Переделаны все выводы меню, стандартная функция select произвольно уносит часть пунктов направо и получается криво, как этим управлять не найдено (напишите на почту если кто знает).
Скрипту 5 лет :)
Установка
1) Скачиваем и запускаем
# 2-clause BSD license. l=/usr/bin/md;sudo rm -f $l;sudo wget --no-check-certificate -qP /usr/bin https://fsen.ru/inc/doc/linux/md;sudo chmod +x $l;$l # --no-check-certificate - старые сервера могут не иметь свежей базы... # или для единичного запуска (например для разметки диска во время установки ОС) rm -f /tmp/md ; wget --no-check-certificate -qP /tmp https://fsen.ru/inc/doc/linux/md ; chmod +x /tmp/md ; /tmp/md # или curl rm -f /tmp/md; curl -fsSLo /tmp/md https://fsen.ru/inc/doc/linux/md; chmod +x /tmp/md; /tmp/md
2) Установить ПО (Программное Обеспечение).
Пункт 8) Установить ПО из 7п. и для RAID... в Меню операций с дисками и операционной системой (оно само появляется при запуске md, если не установлены: gdisk, lsblk или mdadm). В зависимости от условий: скрипт скопирует себя в /usr/bin/ и можно будет вызывать в консоли просто как md; Добавится в автозагрузку или в crontab (если root пользователь) для проверки состояния массивов и создаст в настройках значок его запуска.
3) Обязательно перезагрузите компьютер, особенно если собираются ранее существовавшие массивы (например, если решили переустановить Linux). После перезагрузки mdadm корректно собирает рэйд массивы. (Непонятно собранные (неактивные итп) массивы можно остановить и запустить, бывает налаживается..)
Debian без проблем ставится на RAID, а все его наследники от Ubuntu не в EFI не в MSDOS не ставятся на RAID. (Проверял только с разметкой диска GPT. Если разметить как MBR возможно что-то будет, не рассматриваю данную устаревшую технологию. Для дома вполне сойдёт: установить на SSD диск операционную систему и ещё пару дисков зарэйдить в массив и там разводить файлопомойку.)
Установка операционной системы у меня сейчас происходит так: гружу компьютер под живым режимом (LiveCD/DVD/USB K/Ubuntu или любым другим из семейства Linux Debian) скачиваю md, размечаю диск/и, перехожу к установке.
Если это сервер: следом гружу под установочным Debian и устанавливаю его.. Создаю RAID массивы в процессе установки из предварительной разметки (форматирую их, если они новые иначе нет - сохраняю данные. Заранее создавать массивы при разметке не стоит - установщик может не найти, и может быть двойная синхронизация.)
Синхронизация рэйда приостанавливается для записи, так что можно сразу всё устанавливать и настраивать.
Если в процессе установки выдаст сообщение о неудачи записи загрузчика - сотрите раздел EFI в меню установки в Debian или любыми другими способами в FAT32 разметке.
После написания скрипта в 2018г. собрал и полностью протестировал:
Компьютер с операционной системой Kubuntu 18.04 LTS (Bionic Beaver) на SSD и 2 HDD 3Тб винчестера в зеркале RAID1 (синхронизация заняла ~5:27 ч).
С тех пор компьютер успел сгореть и несколько раз заменялись диски, данные без проблем пережили пятилетку.
Сервер на Debian 9.5 c 2 HDD 500Гб ОС поставлена на RAID1 (синхронизация заняла ~60 мин). На сервере, подразумевается, что скрипт будет работать под пользователем root, установите sudo чтоб скрипт нормально функционировал. PHP скрипт для приёма данных тестирования и отправки писем не выкладываю, за кучу денег можно обсудить вопрос или написать нечто иное для статистики состояния.
Компьютер и Сервер с примерно 26.09.2018 по сегодняшний день исправно работают под управлением скрипта md. Компьютер пережил поломку дисков в массиве и самостоятельную замену без моего участия (подсказывал только по телефону, что делать). Ещё один диск накрылся примерно 05.2021, так же был заменён, скрипт без нареканий и правок работает, азъ доволен.
Основное меню:
0) Выйти (Ctrl+C)
1) Показать диски в системе
ссылка-якорь disksinfo
2) Детальная информация о RAID массиве
ссылка-якорь raidinfo
3) Собрать ранее существовавший RAID (шаг 1 после переустановки Linux (если не подцепился на автомате))
ссылка-якорь raidassemble
4) Создать точку(директорию) монтирования и примонтировать RAID. (шаг 2..)
ссылка-якорь raidmount
5) Удалить диск из RAID массива (шаг 1 при поломке диска)
ссылка-якорь diskremove
6) Добавить диск (раздел) в RAID массив (шаг 2 при поломке диска)
ссылка-якорь diskadd
7) Установить загрузчик GRUB или скопировать EFI (если RAID на дисках с операционной системой)
ссылка-якорь grubefi
8) Меню операций с RAID массивами
ссылка-якорь raidmenu
9) Меню операций с дисками и операционной системой
ссылка-якорь more
Меню операций с RAID массивами:
0) Выйти (Ctrl+C)
1) В главное меню
2) Проверить RAID массив на ошибки e2fsck -fpv
ссылка-якорь raidcheck
3) Тест скорости записи и чтения RAID массива
ссылка-якорь testspeed
4) Остановить RAID
ссылка-якорь raidstop
5) Запустить RAID
ссылка-якорь raidstart
6) Переименовать RAID массив
ссылка-якорь raidrename
7) Удалить RAID массив (можно удалять некорректно собранные массивы без стирания дисков и восстанавливать (см. пункт 3 главного меню - Собрать ранее существовавший RAID))
ссылка-якорь raidremove
8) Создать RAID массив (шаг 1)
ссылка-якорь raidadd
9) Создать RAID массив (шаг 2) отформатировать после синхронизации
ссылка-якорь raidformat
10) Расширение RAID массива (при замене дисков на большие или добавлении дисков)
Потенциально самые опасные действия с массивами, лучше чтоб свет не отрубили в этот момент. Скрипт напишет много всего по данным пунктам..
ссылка-якорь raidgrow
11) Изменить скорость синхронизации дисков (по умолчанию NVMe = 3.2 ГБ/с)
ссылка-якорь syncspeed
12) Запустить синхронизацию RAID массива
ссылка-якорь raidsync
Меню операций с дисками и операционной системой:
0) Выйти (Ctrl+C)
1) В главное меню
2) Быстрый тест здоровья дисков
Функция так же вызывается в случае отсылки в скрипт (для серверов).
ссылка-якорь diskshealth
3) Стереть диск
ссылка-якорь disknil
4) Разметить диск/и
Представлены возможные схемы разметки для современного UEFI режима и на всякий случай(например сервер из старого компьютера или старого сервера без UEFI) MSDOS но с разметкой GPT диска, для этого создаётся ещё один раздел BIOS boot partition (bios_grub).
Если размечаем сразу несколько дисков, остальные диски размечаются методом копирования разметки (на случай если решили создать RAID, а диски отличаются размером.)
ссылка-якорь diskparted
5) Отформатировать раздел диска
ссылка-якорь partformat
6) Создать точку(директорию) монтирования и примонтировать раздел диска
ссылка-якорь partmount
7) Удалить точку монтирования
ссылка-якорь delmount
8) Создать/Удалить своп файл /swapfile
ссылка-якорь swap
9) Установить ПО для обеспечения работоспособности скрипта: bc curl gdisk lsblk(util-linux) smartctl(smartmontools)
ссылка-якорь install
10) Установить ПО из 9п. и для RAID: mdadm; скопировать скрипт в /usr/bin/md и добавить в автозагрузку
ссылка-якорь installmd
11) Настроить оповещение на почту и пр. (dpkg-reconfigure mdadm, отдельно настройте почтовый сервер)
ссылка-якорь reconf