В высоконагруженных производственных серверах жесткие диски и SSD подключены не по отдельности, а объединены в специальные массивы, внутри которых данные физически хранятся на нескольких дисках одновременно, что обеспечивает лучшую сохранность данных при выходе дисков из строя, а также увеличивает скорость записи, так как данные можно записывать не на один диск, а сразу на несколько обходя ограничение скорости каждого диска. Такие массивы называются RAID.
Для создания RAID массивов используются аппаратные специальные контроллеры. Однако создать RAID массив можно и без такого контролера. Такие массивы называются программными. В этой статье мы рассмотрим как создать программный RAID Linux.
Содержание статьи
Что такое RAID
Аббревиатура RAID расшифровывается как Redundant Array of Inexpensive Disks. С помощью этой технологии вы можете превратить несколько реальных жестких дисков в один виртуальный диск с увеличенным объемом и скоростью передачи данных. Но объем полученного диска и параметры его работы уже зависят от выбранного режима работы RAID. Доступны такие режимы:
- RAID 0 - позволяет увеличить скорость записи. Все диски массива будут использоваться для записи данных, поэтому их скорости будут складываться. Например, если у вас есть три диска объемом 512 Гб и скоростью записи 200 Мб в секунду, то объединив их в RAID 0 вы получите виртуальный диск объемом 1,5 Тб и максимальной скоростью записи 600 Мб в секунду.
- RAID 1 - этот режим увеличивает сохранность данных. Во время записи одни и те же данные пишутся параллельно на подключённые диски. В результате у вас будет несколько копий одних и тех же данных. Если один из дисков массива выйдет из строя, система продолжит работать, так как данные есть ещё и на другом диске. Например, если вы объедините два диска по 1 Тб в RAID 1, то получите один виртуальный диск с объемом 1 Тб.
- RAID 10 - объединяет в себе два предыдущих варианта. Он может состоять как минимум из четырех дисков. В таком случае сначала создаются два массива RAID 1, а поверх них создается массив RAID 0 для увеличения производительности.
Конечно, существуют и другие режимы работы, но эти самые популярные. В сегодняшней статье мы рассмотрим как создать программный RAID уровней 0 и 1.
Создание программного RAID в Linux
Шаг 1. Установка mdadm
Для управления программными RAID массивами в Linux используется утилита mdadm. Для того чтобы установить её в Ubuntu или Debian выполните такую команду:
sudo apt install mdadm
Для установки утилиты в CentOS/Fedora/RedHat необходимо выполнить:
sudo yum install mdadm
Шаг 2. Подготовка дисков
Посмотреть список дисков, подключённых к системе можно с помощью команды lsblk:
lsblk
В этой статье я покажу как объединить три диска в RAID на примере дисков /dev/sda, /dev/sdb и /dev/sdc. Сначала необходимо определиться стоит ли размещать RAID непосредственно на диски или на разделы. Лучше выбрать разделы, так как это дает больше гибкости и безопасности. Во первых, операционная система может перезаписать суперблок RAID если он размещён прямо на диске. Во вторых, если вы выделяете весь диск под RAID, то у вас могут возникнуть проблемы при замене диска. Диски одинакового объема, обычно, немного отличаются у разных производителей. Поэтому для замены вам придется искать точно такой же диск с точно таким же реальным объемом. Если же у вас будет раздел, вы просто сможете создать раздел нужного объема.
Сначала нужно создать таблицу разделов на всех выбранных дисках:
sudo parted /dev/sda mklabel msdos
sudo parted /dev/sdb mklabel msdos
sudo parted /dev/sdc mklabel msdos
Если на диске уже существует таблица разделов программа предупредит о том, что создание новой сотрёт все данные с диска. После создания таблицы разделов следует создать по разделу на каждом диске. Например, создадим разделы размером 460 гигабайт. Для этого можно воспользоваться той же командой parted:
sudo parted /dev/sda mkpart primary ext4 2048 460Gb
sudo parted /dev/sdb mkpart primary ext4 2048 460Gb
sudo parted /dev/sdc mkpart primary ext4 2048 460Gb
Теперь диски готовы к размещению на них RAID:
Шаг 3. Создание RAID 0
Для создания RAID массива надо выполнить команду mdadm с опцией --create, указать режим работы массива, количество дисков и сами диски. Синтаксис команды такой:
$ sudo mdadm --create /dev/имя_массива --level=режим_работы --raid-devices=количество_устройств список устройств
Например:
sudo mdadm --create /dev/md0 --level=0 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1
После выполнения этой команды вы увидите раздел raid в lsblk. С этим разделом можно работать как с любым обычным разделом в вашей системе.
Шаг 4. Тестирование RAID 0
Давайте для примера отформатируем полученный раздел в файловую систему Ext4, смонтируем и попробуем записывать туда файлы:
sudo mkfs -t ext4 /dev/md0
sudo mount /dev/md0 /mnt
Затем можно тестировать скорость с помощью dd:
sudo dd if=/dev/zero of=/mnt/file bs=1G count=5
Как видите, при записи 5 Гб данных мы получаем скорость 400 Мб/сек, это уже на уровне обычного SSD.
Шаг 5. Информация о RAID
Найти информацию обо всех созданных в системе RAID массивах вы можете в файле /proc/mdstat:
cat /proc/mdstat
Именно так можно посмотреть RAID Linux. Посмотреть более детальную информацию о массиве /dev/md0 можно с помощью самой утилиты mdadm:
sudo mdadm --detail /dev/md0
Здесь в том числе отображается состояние RAID Linux. Посмотреть детальную информацию о каждом устройстве, которое входит в RAID можно с помощью опции --examine:
sudo mdadm --examine /dev/sda1 /dev/sdb1 /dev/sdc1
Шаг 6. Сохранение RAID массива
В принципе, уже сейчас RAID массив работает и продолжит работать после перезагрузки, потому что mdadm просканирует все диски, найдёт метаданные массива и построит его. Но неизвестно какое имя программа присвоит полученному массиву и неизвестно все ли параметры будут восстановлены верно. Поэтому конфигурацию массива лучше сохранить. Для этого используйте такую команду:
sudo mdadm --detail --scan --verbose | sudo tee -a /etc/mdadm/mdadm.conf
Затем нужно пересоздать initramfs с поддержкой этого массива:
sudo update-initramfs -u
С полученным массивом можно обращаться как с обычным разделом диска. Например, для того чтобы автоматически монтировать его в систему добавьте такую строчку в /etc/fstab:
sudo vi /etc/fstab
На этом создание raid массива linux завершено.
Шаг 7. Переименование RAID массива
Если вы не выполните предыдущий пункт и перезагрузите компьютер, то можете получить RAID массив с именем md127 вместо md0, такое имя также может быть присвоено второму RAID массиву. Для того чтобы переименовать массив, его придется пересобрать. Для этого сначала остановите существующий массив:
sudo mdadm --stop /dev/md127
Затем выполните команду переименования. Синтаксис у неё такой:
$ sudo mdadm --assemble --update=name --name=номер /dev/md_номер список устройств
Например:
sudo mdadm --assemble --update=name --name=0 /dev/md0 /dev/sda1 /dev/sdb1 /dev/sdc1
После этого следует повторить предыдущий шаг для уже правильного сохранения RAID устройства.
Шаг 8. Удаление RAID массива
Если вы не хотите чтобы ваши диски и дальше были объединены в RAID, его можно удалить. Для этого выполните такую команду:
sudo mdadm --remove /dev/md0
Она удалит все метаданные с дисков /dev/md0. Дальше останется только удалить или закомментировать секцию данного RAID массива в /etc/mdadm/mdadm.conf
sudo vi /etc/mdadm/mdadm.conf
Шаг 10. Создание массива RAID 1
Теперь вы знаете как создать raid linux на примере RAID 0. Давайте ещё разберемся с RAID 1. Для создания RAID 1 используется такая же команда как и для RAID 0, но указывается другой уровень работы массива:
sudo mdadm --create /dev/md0 --level=1 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1
Затем вы можете убедится что RAID создан посмотрев информацию о нём:
sudo mdadm --detail /dev/md0
Ну и с помощью lsblk можно оценить размер устройства:
lsblk
Как и ожидалось, размер не увеличился, поскольку копии данных будут записываться на все три диска. Теперь давайте посмотрим на скорость:
Скорость записи данных такая же как и у одного диска. Это цена сохранности данных. Если вы отключите один из дисков, то все данные всё равно будут вам доступны.
Выводы
В этой статье мы рассмотрели как создать программный RAID в Linux. Как видите здесь нет ничего очень сложного. Может и программный RAID не такой производительный, как аппаратный, зато полностью решает задачи объединения дисков.
Отличная статья, спасибо.
"sudo parted /dev/sdc mkpart primary ext4 2048 460Gb"
"sudo parted /dev/sdc mkpart primary ext4 2048 460Gb"
"sudo parted /dev/sdc mkpart primary ext4 2048 460Gb"
У вас указано по ошибке в тексте три раза sdc.
Будет ли продолжение статьей по MDADM?
Например, как правильно поменять вышедший из строя HDD и заменить его новым в текущем MDADM?
Спасибо за замечание. Поправил. Продолжение про mdadm пока не планируется.
А хотелось бы продолжения.
Очень жаль. Ждем! Хочется продолжение.
Хорошо и доступно пишете, уже многое сделал по вашим мануалам. Спасибо!
спасибо, особенно ценно шаг 6 , всё получилось теперь.
мне кажется удаление массива описано не верно
должна использоваться опция --stop, а --remove - это про удаление диска из массива
Поддерживаю. --remove ничего не дало.
Я смог удалить raid вот так:
# mdadm --stop /dev/mdX
# mdadm --zero-superblock /dev/sdX1
# mdadm --zero-superblock /dev/sdX2
Добрый день!
Если необходимо ввести новый диск в массив, который был создан на разделах, то для подготовки нового диска командой sudo parted /dev/sda mkpart primary ext4 2048 460Gb (из вашего текста) какой командой можно узнать текущие значения существующего массива (2048 и 460Gb)?
Если кто-то сделал как написано в шаге : и запарол загрузку системы, то вот пара ссылок где рассказано как исправить:
http://vladimir-stupin.blogspot.com/2013/09/mdadm.html
https://askubuntu.com/questions/1044264/mdadm-duplicate-md-device-names-in-conf-file-where-found
Для тех у кого умерла система
nano /etc/fstab
Удаляем эту строчку
/dev/md0 /mnt/ ext4 defaults 0 0
вводим команду
sudo update-initramfs -u
вводим exit
готово
Спасибо за статью. Тут описано как сделать массив, если у вас есть установленная операционная система на другом диске. Как я понял тут на отдельно стоящем nvme m.2 SSD.
А можно ли создать программный массив до установки операционной системы на базе двух накопителей, например, в режиме зеркалирования. И уже потом на них установить ОС, да чтобы потом, при отключении (вытаскивании) одного из дисков (пускай при выключенном ПК) ОС нормально запускалась и работала?
это уже аппаратно только
Наболело, напишу свою историю. У меня манджаро, сижу на ней год. На новый комп захотел запилить зеркальный рейд массив.
Сделал всё про инструкции. На этапе "Затем нужно пересоздать initramfs с поддержкой этого массива" - вылезла ошибка что нет такой команды. Зашёл в магазин приложений, нужной программы не нашёл. Начал искать решение на арчвики. Сделал что там было написано, по идее аналогичное действие. И комп не выключился... При включении ошибка и всё. Надо переустанавливать систему.
Может я ламер и нуб, хотя опыт есть. Но то что для такой простой операции надо сломать голову - это выбивает из колеи. Почему на линуксе всё через одно место (терминал). Почему нет проги с интерфейсом и кнопкой сделать хорошо. Даже инструкции нормальной нет. Поэтому на линуксе сидят только энтузиасты. Если что-то сломалось, то ламеру легче поставить винду, чем разбираться.
В общем, с командой mdadm --create /dev/md0 --level=1 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1 не помогло.
Ругается.
Помогла эта статья и команды: https://internet-lab.ru/mdadm_raid10
root@o:~# mdadm --version
mdadm - v4.1 - 2018-10-01