Создание RAID массивов
Общие понятия
Жесткие диск подключаются к контроллеру, который управляет работой жесткого диска и передачей данных
VM VirtualBox может эмулировать наиболее распространенные типы контроллеров жестких дисков
Рейд массив может применяться в высоконагруженных системах, в данном случае диски подключаются не по отдельности, а объединяются в один виртуальный диск. Данная технология обеспечивает сохранность данных, увеличивает скорость записи.
Для создания RAID-массивов используются аппаратные и программные контроллеры.
Общие понятия
Существуют аппаратный RAID, поддельный RAID, программный RAID ( mdadm )
Аппаратный рейд управляется с помощью контроллера. Контроллер может быть встроенным или интегрированным в материнскую плату. Благодаря контроллеру raid linux видит неско
лько дисков как один единный том
Программный reid наименее затратный вариант, но и менее производительный, так как вся нагрузка ложится на центральный процессор
Интегрированный рейд быстрее программного, встроен в материнку как отдельный чип, работающий в паре с процессором.
Аппаратный рейд это отдельный контроллер со своим процессором и кэшпамятью, данный вариант затратный, но самый производительный
Кроме прочего аппартаный контроллер BBU (Battery Backup Unit) - батарея которая позволяет поддерживать напряжение на схеме кэша даже при выключении питания.
ZMCP (Zero-Maintenance Cache Protection) - дополнительный модуль имеющий энергонезависимую память и конденсатор имеющую достаточно энергии для записи содержимого кэша вN
AND-память
Предположим что в наличии имеется 4 диска
#Создание программного reid массива
#******************************************
#Проверяем чтобы на дисках не было метаданных от предыдущего массива
mdadm --examine /dev/sda /dev/sdb /dev/sdc /dev/sdd
mdadm: No md superblock detected
#При необходимости метаданные можно удалить
mdadm --zero-superblock /dev/sdX
#Создать разделы на каждом диске, в качестве типа раздела указывается fd ( Linux RAID autodetect )
#Далее необходимо собрать массив из созданных разделов
mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
#После выполнения команды выше будет создан массив /dev/md0 и запущен процесс перестроения данных на дисках, за данным процессом можно наблюдать командой:
cat /proc/mdstat
#Создание аппаратного рейд массива
#*****************************************
#Перед использованием пространства аппаратного рейда необходимо настроить сам контроллер встроенной в контроллер утилитой или утилитой ОС
#При инициализации дисков контроллером все данные на них будут уничтожены, после чего необходимо создать массив ( create array )
#Далее устанавливается размер страйпа, размер зависит от размера файлов
#После создания массива начинается процесс перестроения данных на дисках
Контроллеры
IDE(ATA) из материалов википедии - параллельный интерфейс подключения накопителей (гибких дисков, жёстких дисков и оптических дисководов) к компьютеру. В 1990-е годы был стандартом на платформе IBM PC; в настоящее время вытеснен своим последователем — SATA — и с его появлением получил название PATA (Parallel ATA).
В физических ПК в этом стандарте используются плоские ленточные параллельные кабели с 40 или 80 проводами
VM VirtualBox предоставляет следующие типы аппаратного обеспечения IDE-контроллера: PIIX3, PIIX4 или ICH6
Выбор типа не имеет значения с точки зрения производительности, но если вы импортируете виртуальную машину из другого продукта виртуализации, операционная система на этом компьютере может ожидать определенного типа контроллера и аварийно завершать работу, если он не найден.
Serial ATA (SATA) из материалов википедии последовательный интерфейс обмена данными с накопителями информации. SATA является развитием параллельного интерфейса ATA (IDE)
По сравнению с IDE, он поддерживает как гораздо более высокие скорости, так и большее количество устройств на контроллер
Стандартный интерфейс для контроллеров SATA называется Advanced Host Controller Interface (AHCI).
Как и настоящий SATA-контроллер, виртуальный SATA-контроллер Oracle VM VirtualBox работает быстрее, а также потребляет меньше ресурсов ЦП, чем виртуальный IDE-контроллер. Кроме того, это позволяет подключать до 30 виртуальных жестких дисков к одной машине вместо трех, по сравнению с контроллером Oracle VM VirtualBox IDE с подключенным DVD-приводом.
Контроллер SATA и подключенные к нему виртуальные диски, включая те, которые находятся в режиме совместимости с IDE, не будут видны операционным системам, устройства которых не поддерживают AHCI.
После установки можно переключиться с IDE на SATA, установив драйверы SATA и изменив тип контроллера в диалоговом окне Настроек виртуальной машины.
SCSI - универсальный интерфейс для передачи данных между всеми видами устройств, включая устройства хранения данных, используется для подключения некоторых жестких дисков и ленточных устройств, но в основном он был вытеснен в обычном оборудовании. По-прежнему широко используется на высокопроизводительных рабочих станциях и серверах.
SCSI с последовательным подключением (SAS) - из материалов википедии, последовательный компьютерный интерфейс, разработанный для подключения различных устройств хранения данных, например, жёстких дисков и ленточных накопителей. SAS разработан для замены параллельного интерфейса SCSI и основывается во многом на терминологии и наборах команд SCSI.
SAS обратно совместим с интерфейсом SATA, которые могут быть подключены к контроллеру SAS, но не наоборот.
Вместо параллельных кабелей используются последовательные кабели. Это упрощает подключение физических устройств. Следовательно, в некотором смысле SAS для SCSI то же, что SATA для IDE: он обеспечивает более надежные и быстрые подключения.
VM VirtualBox эмулирует логический контроллер SAS LSI, который можно включить практически так же, как контроллер SCSI
USB mass storage device является стандартом для подключения внешних устройств хранения данных, таких как жесткие диски или флэш-накопители, к хосту через USB.
USB-контроллер VM VirtualBox, работает иначе, чем другие типы контроллеров хранения. USB-контроллер хранилища не отображается как виртуальный контроллер хранилища. Каждый диск, подключенный к контроллеру, отображается для гостя как выделенное USB-устройство.
Загрузка с дисков, подключенных по USB, поддерживается только при использовании EFI, поскольку в BIOS отсутствует поддержка USB.
Энергонезависимая память express (NVMe) - стандарт для подключения энергонезависимой памяти (NVM) через PCI Express, позволяющий снять ограничение пропускной способности ранее используемого протокола SATA для твердотельных устройств. В отличие от других стандартов, набор команд очень прост для достижения максимальной пропускной способности и несовместим с ATA или SCSI.
Загрузка с дисков, подключенных с помощью NVMe, поддерживается только при использовании EFI, поскольку в BIOS отсутствует соответствующий драйвер.
Типы RAID массивов
RAID0 данный уровень объединяет два устройства вместе создавая один виртуальный диск. Чтение и запись чередуется между дисками повышая скорость. Скорость будет складываться исходя из кол-ва дисков.
Данные списываться и записываться с нескольких устройств
RAID1 на данном уровне данные зеркально записываются на два устройства для повышения безопасности. При выходе из строя одного устройства, данные будут доступны на другом устройстве
RAID10 будет объединять два предыдущих варианта, но должен состоять как минимум из четырех дисков. В данном случае необходимо создать два RAID0 массива и два RAID1 массива
RAID5 похож на RAID1, но в данном случае используется три устройства, двум из которым предоставляется пространство. Данные будут записываться до тех пор пока любые два устройства ( диска ) работают.
Создание программного RAID массива
RAID массивы необходимо размещать непосредственно на разделы, данный вариант более безопасный, так как операционная система может перезаписать суперблок RAID если последний размещен на самом диске. Для работы RAID требуется одинаковый размер дисков. Задать размер раздела проще, чем подобрать диск такого же размера
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 106.7G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 3.6G 0 part [SWAP]
└─sda3 8:3 0 102.7G 0 part /
sdb 8:16 0 8G 0 disk
sdc 8:32 0 8G 0 disk
sr0 11:0 1 1024M 0 rom
#Добавить модуль ядра raid1
modprobe raid1
#Добавить модуль в автозагрузку
echo raid1 >> /etc/modules-load.d/raid1.conf
#Далее необходимо создать разделы на свободных дисках
#Используйте n в fdisk для создания раздела и t для установки типа
#В качестве типа раздела выбираем тип Linux raid autodetect
#Перед изменением типа раздела необходимо убедиться, что raid не запущен
mdadm --stop
#Тоже самое делаем для второго диска sdc
#Установить mdadm для создания массивов
apk add mdadm
#Перечитать таблицу разделов
partprobe /dev/sd*
#Расширить файловую систему
resize2fs /dev/sd**
#Форматировать раздел
mkfs.xfs /dev/sd**
#Расширить файловую систему в Linux Alpine
xfs_growfs /dev/sd**
#Возможно потребуется перезапуск системы
#Занулить суперблоки дисков
mdadm --zero-superblock --force /dev/sdb1
mdadm --zero-superblock --force /dev/sdс1
#Стереть подпись и метаданные
wipefs --all --force /dev/sdb1
wipefs --all --force /dev/sdc1
#Создать массив
mdadm --create --level=1 --raid-devices=2 /dev/md0 /dev/sdb1 /dev/sdc1
#Создать файловую систему
mkfs.xfs /dev/md0
#Чтобы увидеть состояние синхронизации массива
cat /proc/mdstat
#Создать файл /etc/mdadm.conf, чтобы mdadm знал, как настроен ваш RAID:
mdadm --detail --scan >> /etc/mdadm.conf
#Добавить в автозагрузку
rc-update add mdadm-raid
#Служба mdadm должна быть запущена во время загрузки
rc-update add mdadm boot
rc-update add mdadm-raid boot
#Примонтировать созданный массив
mount /dev/md0 /mnt
#И добавить в /etc/fstab запись
/dev/md0 /mnt xfs noatime 0 1
Для сохранения конфигурации не рекомендуется применять команду:
mdadm --detail --scan --verbose
Данная команда впишет в конфигурационный файл названия разделов, а они в некоторых случаях могут измениться, тогда RAID-массив не соберётся
mdadm --detail --scan записывает UUID разделов, которые не изменятся
Подготовка диска с помощью parted
#Установить
apk add parted
#Разметить диски
parted /dev/sdb mklabel msdos
parted /dev/sdс mklabel msdos
#Создать таблицы разделов для дисков
parted /dev/sdb mkpart primary xfs 2048 7Gb
parted /dev/sdс mkpart primary xfs 2048 7Gb
Создание RAID0
#Создание массива
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1
#Созданный раздел /dev/md0 можно увидеть в lsblk и отформатировать в нужный тип файловой системы
mkfs -t xfs /dev/md0
#Монтирование раздела
mount /dev/md0 /mnt
Информация о RAID
Информация о RAID хранится в файле /proc/mdstat
#Информация о RAID
mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Jan 5 14:14:27 2024
Raid Level : raid0
Array Size : 9662464 (9.21 GiB 9.89 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Fri Jan 5 14:14:27 2024
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Layout : -unknown-
Chunk Size : 512K
Consistency Policy : none
Name : megaplan-box:0 (local to host megaplan-box)
UUID : 754e5155:52f5d435:02e768c8:862c3fb8
Events : 0
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
#Детальная информация о каждом устройстве которое входит в RAID
mdadm --examine /dev/sdb1
Как сохранить RAID массив
#Сохранение конфигурации в файл
mdadm --detail --scan >> /etc/mdadm.conf
#Добавить в автозагрузку
rc-update add mdadm-raid
#Служба mdadm должна быть запущена во время загрузки
rc-update add mdadm boot
rc-update add mdadm-raid boot
#Примонтировать созданный массив
mount /dev/md0 /mnt
#И добавить в /etc/fstab запись
/dev/md0 /mnt xfs noatime 0 1
Остановка, удаление и запуск RAID массива
mdadm --create, -C Создать новый массив на основе указанных устройств
mdadm --assemble, -A Собрать компоненты ранее созданного массива в массив. Компоненты можно указывать явно, но можно и не указывать — тогда выполняется их поиск по суперблокам
mdadm --grow, -G Расширение или уменьшение массива, включаются или удаляются новые диски
mdadm --incremental, -I Добавление диска в массив
mdadm --monitor, --follow, -F Следить за изменением состояния устройств
#Остановить массив
mdadm --stop /dev/md0
#Запустить массив можно перезапуском системы, если массив добавлен в автозапуск или следующими командами:
#Способ 1
mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1
#Способ 2 ( uuid из /etc/mdadm.conf )
mdadm --assemble scan --uuid=47392974:0177bd49:f8267e8c:ec6c4003
#Способ 3
mdadm --assemble /dev/md0
#Удалить массив
mdadm --remove /dev/md0
#После удаления следует удалить секцию данного RAID массива в /etc/mdadm/mdadm.conf
#Можно просто остановить массив
mdadm --stop /dev/md0
#После чего занулить суперблоки дисков
mdadm --zero-superblock --force /dev/sdb1
mdadm --zero-superblock --force /dev/sdс1
Проверка скорости записи
Проверка целостности массива
Для теста диск в массиве можно сделать сбойным с помощью ключа --fail (-f)
#Сделать диск сбойным
mdadm /dev/md0 --fail /dev/sdc1
#Удалить плохой диск
mdadm /dev/md0 --remove /dev/sdc1
#Добавить новый диск
mdadm /dev/md0 --add /dev/sdc1
Расширение массива
Опция --raid-devices указывает новое количество дисков в массиве с учётом добавленного
На случай прерывание массива можно добавить опцию --backup-file=/var/backup
#Сначала добавляется диск
mdadm /dev/md0 --add /dev/sdc1
#Убедиться что диск добавлен
mdadm --detail /dev/md0
#Далее необходимо расширить массив
mdadm -G /dev/md0 --raid-devices=4
#Убедиться что массив расширился
mdadm --detail --scan >> /etc/mdadm.conf