- Программный raid в Linux
- Что такое RAID
- Создание программного RAID в Linux
- Шаг 1. Установка mdadm
- Шаг 2. Подготовка дисков
- Шаг 3. Создание RAID 0
- Шаг 4. Тестирование RAID 0
- Шаг 5. Информация о RAID
- Шаг 6. Сохранение RAID массива
- Шаг 7. Переименование RAID массива
- Шаг 8. Удаление RAID массива
- Шаг 10. Создание массива RAID 1
- Выводы
- Installing via the GUI
- Configuring the RAID
- Boot Loader
- Boot from Degraded Disk
- Verify the RAID
- Troubleshooting
- Swap space doesn’t come up, error message in dmesg
- Using the mdadm CLI
- Checking the status of your RAID
- Disk Array Operation
- Known bugs
- Resources
Программный 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 выполните такую команду:
Для установки утилиты в CentOS/Fedora/RedHat необходимо выполнить:
Шаг 2. Подготовка дисков
Посмотреть список дисков, подключённых к системе можно с помощью команды 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:
Именно так можно посмотреть RAID Linux. Посмотреть более детальную информацию о массиве /dev/md0 можно с помощью самой утилиты mdadm:
Здесь в том числе отображается состояние 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 с поддержкой этого массива:
С полученным массивом можно обращаться как с обычным разделом диска. Например, для того чтобы автоматически монтировать его в систему добавьте такую строчку в /etc/fstab:
/dev/md0 /mnt/ ext4 defaults 0 0
На этом создание raid массива linux завершено.
Шаг 7. Переименование RAID массива
Если вы не выполните предыдущий пункт и перезагрузите компьютер, то можете получить RAID массив с именем md127 вместо md0, такое имя также может быть присвоено второму RAID массиву. Для того чтобы переименовать массив, его придется пересобрать. Для этого сначала остановите существующий массив:
Затем выполните команду переименования. Синтаксис у неё такой:
$ 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, его можно удалить. Для этого выполните такую команду:
Она удалит все метаданные с дисков /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 создан посмотрев информацию о нём:
Ну и с помощью lsblk можно оценить размер устройства:
Как и ожидалось, размер не увеличился, поскольку копии данных будут записываться на все три диска. Теперь давайте посмотрим на скорость:
Скорость записи данных такая же как и у одного диска. Это цена сохранности данных. Если вы отключите один из дисков, то все данные всё равно будут вам доступны.
Выводы
В этой статье мы рассмотрели как создать программный RAID в Linux. Как видите здесь нет ничего очень сложного. Может и программный RAID не такой производительный, как аппаратный, зато полностью решает задачи объединения дисков.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Installing via the GUI
Warning: the /boot filesystem cannot use any softRAID level other than 1 with the stock Ubuntu bootloader. If you want to use some other RAID level for most things, you’ll need to create separate partitions and make a RAID1 device for /boot.
Warning: this will remove all data on hard drives.
1. Select «Manual» as your partition method
2. Select your hard drive, and agree to «Create a new empty partition table on this device ?»
3. Select the «FREE SPACE» on the 1st drive then select «automatically partition the free space
4. Ubuntu will create 2 partitions: / and swap, as shown below:
5. On / partition select «bootable flag» and set it to «on»
6. Repeat steps 2 to 5 for the other hard drive
Configuring the RAID
- Once you have completed your partitioning in the main «Partition Disks» page select «Configure Software RAID»
- Select «Yes»
- Select «Create new MD drive»
- Select RAID type: RAID 0, RAID 1, RAID 5 or RAID 6
- Number of devices. RAID 0 and 1 need 2 drives. 3 for RAID 5 and 4 for RAID 6.
- Number of spare devices. Enter 0 if you have no spare drive.
- select which partitions to use..
- Repeat steps 3 to 7 with each pair of partitions you have created.
- Filesystem and mount points will need to be specified for each RAID device. By default they are set to «do not use».
- Once done, select finish.
Boot Loader
In case your next HDD won’t boot then simply install Grub to another drive:
Boot from Degraded Disk
- Additionally, this can be specified on the kernel boot line with the bootdegraded=[true|false]
- You also can use #dpkg-reconfigure mdadm rather than CLI!
Verify the RAID
- shut-down your server
- remove the power and cable data of your first drive
- start your server and see if your server can boot from a degraded disk.
Troubleshooting
Swap space doesn’t come up, error message in dmesg
Provided the RAID is working fine this can be fixed with:
sudo update-initramfs -k all -u
Using the mdadm CLI
For those that want full control over the RAID configuration, the mdadm CLI provides this.
Checking the status of your RAID
Two useful commands to check the status are:
Personalities : [raid1] [raid6] [raid5] [raid4] md5 : active raid1 sda7[0] sdb7[1] 62685504 blocks [2/2] [UU] md0 : active raid1 sda1[0] sdb1[1] 256896 blocks [2/2] [UU] md6 : active raid5 sdc1[0] sde1[2] sdd1[1] 976767872 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
From this information you can see that the available personalities on this machine are «raid1, raid6, raid4, and raid5» which means this machine is set-up to use raid devices configured in a raid1, raid6, raid4 and raid5 configuration.
You can also see in the three example meta devices that there are two raid 1 mirrored meta devices. These are md0 and md5. You can see that md5 is a raid1 array and made up of disk /dev/sda partition 7, and /dev/sdb partition 7, containing 62685504 blocks, with 2 out of 2 disks available and both in sync.
The same can be said of md0 only it is smaller (you can see from the blocks parameter) and is made up of /dev/sda1 and /dev/sdb1.
md6 is different in that we can see it is a raid 5 array, striped across three disks. These are /dev/sdc1, /dev/sde1 and /dev/sdd1, with a 64k «chunk» size or write size. Algorithm 2 shows it is a write algorithm pattern, which is «left disk to right disk» writing across the array. You can see that all three disks are present and in sync.
sudo mdadm --query --detail /dev/md*
Replace * with the partition number.
Disk Array Operation
Note: You can add, remove disks, or set them as faulty without stopping an array.
Where /dev/md0 is the array device.
2. To remove a disk from an array:
sudo mdadm --remove /dev/md0 /dev/sda1
Where /dev/md0 is the array device and /dev/sda is the faulty disk.
sudo mdadm --add /dev/md0 /dev/sda1
Where /dev/md0 is the array device and /dev/sda is the new disk. Note: This is not the same as «growing» the array!
4. Start an Array, to reassemble (start) an array that was previously created:
ddadm will scan for defined arrays and start assembling it.
5. To track the status of the array as it gets started:
Known bugs
Ubuntu releases starting with 12.04 does not support nested raids like levels 1+0 or 5+0 due to an unresolved issue https://bugs.launchpad.net/ubuntu/+source/mdadm/+bug/1171945
Resources
Installation/SoftwareRAID (последним исправлял пользователь c-50-152-255-153 2015-09-12 06:06:22)
The material on this wiki is available under a free license, see Copyright / License for details
You can contribute to this wiki, see Wiki Guide for details