Главная >> Инструкции >> Программный raid в Linux

Программный raid в Linux

В высоконагруженных производственных серверах жесткие диски и 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

/dev/md0 /mnt/ ext4 defaults 0 0

На этом создание 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 не такой производительный, как аппаратный, зато полностью решает задачи объединения дисков.

Creative Commons License
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

14 комментариев к “Программный raid в Linux”

  1. Отличная статья, спасибо.

    "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?

    Ответить
  2. мне кажется удаление массива описано не верно
    должна использоваться опция --stop, а --remove - это про удаление диска из массива

    Ответить
  3. Поддерживаю. --remove ничего не дало.

    Я смог удалить raid вот так:
    # mdadm --stop /dev/mdX
    # mdadm --zero-superblock /dev/sdX1
    # mdadm --zero-superblock /dev/sdX2

    Ответить
  4. Добрый день!
    Если необходимо ввести новый диск в массив, который был создан на разделах, то для подготовки нового диска командой sudo parted /dev/sda mkpart primary ext4 2048 460Gb (из вашего текста) какой командой можно узнать текущие значения существующего массива (2048 и 460Gb)?

    Ответить
  5. Для тех у кого умерла система
    nano /etc/fstab
    Удаляем эту строчку
    /dev/md0 /mnt/ ext4 defaults 0 0
    вводим команду
    sudo update-initramfs -u
    вводим exit
    готово

    Ответить
  6. Спасибо за статью. Тут описано как сделать массив, если у вас есть установленная операционная система на другом диске. Как я понял тут на отдельно стоящем nvme m.2 SSD.

    А можно ли создать программный массив до установки операционной системы на базе двух накопителей, например, в режиме зеркалирования. И уже потом на них установить ОС, да чтобы потом, при отключении (вытаскивании) одного из дисков (пускай при выключенном ПК) ОС нормально запускалась и работала?

    Ответить
  7. Наболело, напишу свою историю. У меня манджаро, сижу на ней год. На новый комп захотел запилить зеркальный рейд массив.
    Сделал всё про инструкции. На этапе "Затем нужно пересоздать initramfs с поддержкой этого массива" - вылезла ошибка что нет такой команды. Зашёл в магазин приложений, нужной программы не нашёл. Начал искать решение на арчвики. Сделал что там было написано, по идее аналогичное действие. И комп не выключился... При включении ошибка и всё. Надо переустанавливать систему.
    Может я ламер и нуб, хотя опыт есть. Но то что для такой простой операции надо сломать голову - это выбивает из колеи. Почему на линуксе всё через одно место (терминал). Почему нет проги с интерфейсом и кнопкой сделать хорошо. Даже инструкции нормальной нет. Поэтому на линуксе сидят только энтузиасты. Если что-то сломалось, то ламеру легче поставить винду, чем разбираться.

    Ответить

Оставьте комментарий