Fast Site Engine

Высокопроизводительная CMS для сайтов.

Сделать сайт

Карта сайта
Переходим на Линукс
Политика конфиденциальности
Сделать сайт на основе Fast Site Engine

Установка
Документация
Список изменений
Лицензионное соглашение

Скачать
О движкеПроизводительностьБезопасностьТехнические требованияSEOКонтакты

Скрипт управления 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)

Ctrl+C прерывает сценарий на любой стадии.

1) Показать диски в системе

Показывает диски, серийные номера, размер итп. полезную информацию. Ниже выводит структуру дисков (разметку) с указанием UUID и точек монтирования.
ссылка-якорь disksinfo

2) Детальная информация о RAID массиве

Показывает детальную информацию о массиве, выводит системный и рэйдовый UUID.
ссылка-якорь raidinfo

3) Собрать ранее существовавший RAID (шаг 1 после переустановки Linux (если не подцепился на автомате))

Именно этот пункт необходим, если собираете ранее существовавший рэйд массив. В процессе предложит указать имя и разделы массива на дисках.
ссылка-якорь raidassemble

4) Создать точку(директорию) монтирования и примонтировать RAID. (шаг 2..)

Указанная директория будет создана, если её нет. Произойдёт отмонтирование директории выбранного RAID массива, и примонтирование к новой. После чего можно будет работать с RAID массивом обращаясь к директории.
ссылка-якорь raidmount

5) Удалить диск из RAID массива (шаг 1 при поломке диска)

Удаляет диск из массива и предлагает стереть его. Так же не забудьте записать серийный номер диска, бумажка на торце с ним обычно, будет понятно какой вытаскивать..
ссылка-якорь diskremove

6) Добавить диск (раздел) в RAID массив (шаг 2 при поломке диска)

Добавляет диск в массив, в процессе предложит скопировать разметку с другого диска или указать раздел на диске. При разметке скопирует EFI раздел или установит GRUB.
ссылка-якорь diskadd

7) Установить загрузчик GRUB или скопировать EFI (если RAID на дисках с операционной системой)

Внутри есть 2) пункт, который просматривает указанные диски в RAID массиве на предмет соответствующих разделов и если находит EFI - копирует раздел, если находит раздел BIOS Boot Partition(bios_grub), ставит на диск GRUB загрузчик. Так же пытается определить больший по размеру раздел EFI и предложит с него скопировать содержимое. (При добавлении диска в массив так же происходит данная операция.) И есть ещё 2 пункта позволяющих только grub ставить на диски или на массивы (не знаю зачем :).
ссылка-якорь grubefi

8) Меню операций с RAID массивами

Переходит в соответствующее меню.
ссылка-якорь raidmenu

9) Меню операций с дисками и операционной системой

Переходит в соответствующее меню.
ссылка-якорь more

Меню операций с RAID массивами:

0) Выйти (Ctrl+C)

Ctrl+C прерывает сценарий на любой стадии.

1) В главное меню

Вернуться в основное меню.

2) Проверить RAID массив на ошибки e2fsck -fpv

Отмонтирует массив, запускает e2fsck -fpv и монтирует обратно после проверки..
ссылка-якорь raidcheck

3) Тест скорости записи и чтения RAID массива

Производит тестирование скоростей чтения и записи RAID массива (обязательно должен быть примонтирован к системе).
ссылка-якорь testspeed

4) Остановить RAID

Останавливает массив.
ссылка-якорь raidstop

5) Запустить RAID

Запускает массив или все сразу(это работает только с предопределёнными массивами в /etc/mdadm/mdadm.conf).
ссылка-якорь raidstart

6) Переименовать RAID массив

Переименовывает массив и заменяет в конфигурационных файлах (т.е. руками ничего прописывать/изменять нет необходимости). Массив будет отмонтирован на время операции.
ссылка-якорь raidrename

7) Удалить RAID массив (можно удалять некорректно собранные массивы без стирания дисков и восстанавливать (см. пункт 3 главного меню - Собрать ранее существовавший RAID))

Удаляет массив с возможностью не стирать диск/и и информацию о массивах (superblock итп.)
ссылка-якорь raidremove

8) Создать RAID массив (шаг 1)

Создаёт разные схемы RAID массивов с разным количеством дисков. Позволяет разметить на автомате или вручную диски(произведёт стирание дисков для избавления от возможной старой информации о RAID массивах), или указать разделы на них.
ссылка-якорь raidadd

9) Создать RAID массив (шаг 2) отформатировать после синхронизации

Форматирует выбранный массив в ext4 (ext4 на данный момент остаётся крайне надёжной и самой быстрой файловой системой).
ссылка-якорь raidformat

10) Расширение RAID массива (при замене дисков на большие или добавлении дисков)

Позволяет увеличить количество дисков в RAID; Расширить объём RAID массива и файловую систему до максимума без изменения разметки дисков; Увеличить объём RAID массива с расширением размера разделов (разметки дисков, например, если заменили на большие диски).
Потенциально самые опасные действия с массивами, лучше чтоб свет не отрубили в этот момент. Скрипт напишет много всего по данным пунктам..
ссылка-якорь raidgrow

11) Изменить скорость синхронизации дисков (по умолчанию NVMe = 3.2 ГБ/с)

Задаётся при установке ПО 3.2 ГБ/с. Скрипт покажет возможные скорости интерфейсов SATA, SAS, NVMe, так же можно указать желаемую.
ссылка-якорь syncspeed

12) Запустить синхронизацию RAID массива

Записывает параметр check в /sys/block/md?/md/sync_action, в теории следом mdadm должен запустить синхронизацию.
ссылка-якорь raidsync

Меню операций с дисками и операционной системой:

0) Выйти (Ctrl+C)

Ctrl+C прерывает сценарий на любой стадии.

1) В главное меню

Вернуться в основное меню.

2) Быстрый тест здоровья дисков

Выводит полезную информацию о серийнике тестируемого диска размере итп. Производит короткий тест SMART всех дисков. Так же достаёт критическую информацию о состоянии диска: переназначенные сектора, ошибки шлейфа и прочие показатели (перегрев итп). Подсвечивает красным ошибки.
Функция так же вызывается в случае отсылки в скрипт (для серверов).
ссылка-якорь diskshealth

3) Стереть диск

Форматирует и удаляет разделы и затирает записи связанные с массивами. Ох, сколько головняка натерпелся, пока не допёр что необходимо так же стирать(форматировать) разделы, ибо в них так же содержится информация о RAID массивах собранных ранее. Так же были моменты с занятым диском итд. Перед созданием массива и прочих смежных операциях, так же запускается эта функция.
ссылка-якорь disknil

4) Разметить диск/и

Это мой любимый пункт, перед началом установки ОС просто запускаю, указываю необходимое и диск автоматом размечен.
Представлены возможные схемы разметки для современного UEFI режима и на всякий случай(например сервер из старого компьютера или старого сервера без UEFI) MSDOS но с разметкой GPT диска, для этого создаётся ещё один раздел BIOS boot partition (bios_grub).
Если размечаем сразу несколько дисков, остальные диски размечаются методом копирования разметки (на случай если решили создать RAID, а диски отличаются размером.)
ссылка-якорь diskparted

5) Отформатировать раздел диска

Форматирует раздел диска в EXT4. UUID раздела появляется только после фолрматирования.
ссылка-якорь partformat

6) Создать точку(директорию) монтирования и примонтировать раздел диска

Указанная директория будет создана, если её нет. Произойдёт отмонтирование раздела, и примонтирование к новой. После чего можно будет работать с разделом диска обращаясь к директории.
ссылка-якорь partmount

7) Удалить точку монтирования

Выводит файл /etc/fstab, остаётся указать какую строку удаляем.
ссылка-якорь delmount

8) Создать/Удалить своп файл /swapfile

Создаёт или удаляет файл подкачки swapfile. Скрипт покажет рекомендации по размеру.
ссылка-якорь swap

9) Установить ПО для обеспечения работоспособности скрипта: bc curl gdisk lsblk(util-linux) smartctl(smartmontools)

Устанавливает софт необходимый для обслуживания дисков (для разметки GPT).
ссылка-якорь install

10) Установить ПО из 9п. и для RAID: mdadm; скопировать скрипт в /usr/bin/md и добавить в автозагрузку

Устанавливает весь необходимый софт добавляет в автозагрузку для проверки состояния массивов или crontab если пользователь root. Если требуется, копирует себя (md) в /usr/bin/. После этого шага лучше перезагрузить компьютер (будет предложено).
ссылка-якорь installmd

11) Настроить оповещение на почту и пр. (dpkg-reconfigure mdadm, отдельно настройте почтовый сервер)

Запускает встроенную функцию конфигурации dpkg-reconfigure mdadm. Оставлен на всякий случай, в процессе оказалось, нынче в нём нет необходимости.
ссылка-якорь reconf


© Все права защищены 2004 - 2024