: :

ПнВтСрЧтПтСбВс

2018-06-25 11:27:07 13363 2

Настройка программного RAID на Линукс

Массивы RAID были разработаны в целях повышения надежности хранения данных, увеличения скорости работы с дисками и для обеспечения возможности объединения нескольких дисков в один большой диск. Разные типы RAID решают разные задачи.

Рассмотрим основные виды RAID-массивов:

  • RAID 0 (Stripe) - Массив, в котором достугается максимальная производительность, но при этом минимальная отказоустойчивость. В этом режиме минимальное необходимое количество дисков - 2. Производительность повышается за счет поочередной записи или чтения с дисков, то есть при записи один блок данных пишется на один диск, а следующий блок данных пишется на другой диск и т.д., при этом при выходе из строя хотя бы одного диска в массиве, все данные будут утеряны. Пользователь получает диск с объемом, равным сумме объемов всех дисков в массиве;
  • RAID 1 (Mirror) - Массив зеркало, запись на все диски массива (обычно 2) идет синхронно, т.е. диски полностью дублируют друг друга. При этом при выходе из строя одного из дисков, информация сохраняется на другом. Пользователь получает в пользование объем самого малого диска в массиве;
  • RAID 10 - Комбинация RAID 0 и RAID 10 (RAID 0 из двух RAID 1), получаем высокую производительность и высокую отказоустойчивость, минус это дороговизна, минимум необхоодимо 4 диска, при этом полезный объем равен половине суьье всех объемов дисков в массиве;
  • RAID 5 - Массив использующий распределенное хранение данных аналогично RAID 0 + распределенное хранение кодов четности для восстановления данных при сбоях. По сути, является компромиссом между RAID0 и RAID1, обеспечивая достаточно высокую скорость работы при неплохой надежности хранения данных. При отказе одного диска из массива данные могут быть восстановлены без потерь в автоматическом режиме. Минимальное количество дисков для такого массива - 3.
  • JBOD - Последовательное объединение нескольких физических дисков в один логический, не влияет на производительность, но при этом надежность падает до отказа одного диска, возможно использование дисков разных размеров.

Существует еще много разных видов массивов дисков, но мы рассмотрели основные из них.

Теперь перейдем к настройке программного RAID на Линукс Ubuntu 16.04.

У нас в системе имеется 4 диска объемом по 10Гб, на них и будем реализовывать различные схемы массивов.

sudo fdisk -l

Диск /dev/sdb: 10 GiB, 10737418240 байтов, 20971520 секторов
Единицы измерения: секторов из 1 * 512 = 512 байтов
Размер сектора (логический/физический): 512 байт / 512 байт
I/O size (minimum/optimal): 512 bytes / 512 bytes


Диск /dev/sdc: 10 GiB, 10737418240 байтов, 20971520 секторов
Единицы измерения: секторов из 1 * 512 = 512 байтов
Размер сектора (логический/физический): 512 байт / 512 байт
I/O size (minimum/optimal): 512 bytes / 512 bytes


Диск /dev/sdd: 10 GiB, 10737418240 байтов, 20971520 секторов
Единицы измерения: секторов из 1 * 512 = 512 байтов
Размер сектора (логический/физический): 512 байт / 512 байт
I/O size (minimum/optimal): 512 bytes / 512 bytes


Диск /dev/sde: 10 GiB, 10737418240 байтов, 20971520 секторов
Единицы измерения: секторов из 1 * 512 = 512 байтов
Размер сектора (логический/физический): 512 байт / 512 байт
I/O size (minimum/optimal): 512 bytes / 512 bytes

Создание массива RAID 0

Для создания и управления массивами в линукс существует утилита mdadm, создадим массив RAID 0 из дисков sdb,sdc

sudo mdadm --create -v /dev/md0 --level=0 --raid-devices=2 \

 /dev/sdb /dev/sdc 
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Проверяем создание массива

cat /proc/mdstat

Personalities : [linear][multipath][raid0][raid1][raid6][raid5][raid4][raid10] 
md0 : active raid0 sdc[1] sdb[0]
      20955136 blocks super 1.2 512k chunks
      
unused devices: none

Теперь создадим файловую систему на нашем массиве

sudo mkfs.ext4 /dev/md0

И смонтируем наш новый массив

sudo mount /dev/md0 /mnt/

Посмотрим, что получилось

df -h

Файл.система   Размер Использовано  Дост Использовано% Cмонтировано в

/dev/md0          20G          44M   19G            1% /mnt

Как видим у нас появилась файловая система с объемом равным объему обоих дисков.

Теперь давай те осуществим настройку, что бы после перезагрузки системы, массив был собран автоматически, для этого в файл конфигурации /etc/mdadm/mdadm.conf необходимо добавить вывод команды mdadm

sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf

После этого обновим initRAM

sudo update-initramfs -u

Ну и для того что бы наш массив автоматически был смонтирован при загрузке системы, добавим его в /etc/fstab

cat /etc/fstab

/dev/md0 /mnt ext4 defaults 0 0

Если вы хотите удалить массив, то сначала его необходимо отмонтировать, а потом остановить и удалить

sudo umount /dev/md0

sudo mdadm --stop /dev/md0

sudo mdadm --remove /dev/md0

И еще можно забить их нулями, что бы стереть старую инфу

sudo mdadm --zero-superblock /dev/sdb

sudo mdadm --zero-superblock /dev/sdc

И обновляем initRAM

sudo update-initramfs -u

Создание RAID 1

Аналогично как и для RAID 0 создаем RAID 1 из двух дисков

sudo mdadm --create -v /dev/md0 --level=1 --raid-devices=2 \

 /dev/sdb /dev/sdc
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store "/boot" on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
mdadm: size set to 10477568K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Выдаст предупреждение, что если вы собираетесь использовать этот массив для хранения директории /boot, необходимо обеспечить что бы загрузчик системы мог работать с массивами.

Проверяем созданием массива

cat /proc/mdstat

Personalities : [raid0][linear][multipath][raid1][raid6][raid5][raid4][raid10] 
md0 : active raid1 sdc[1] sdb[0]
      10477568 blocks super 1.2 [2/2] [UU]
      [=========>...........]  resync = 46.5% (4882176/10477568)
      finish=1.5min speed=60552K/sec

Как видим массив создан, но еще идет процесс синхронизации дисков, подождем когда процесс завершится.

Создадим файловую систему и смонтируем диск

sudo mkfs.ext4 /dev/md0

sudo mount /dev/md0 /mnt

И как и с RAID 0 обеспечим что бы наш RAID собирался автоматически при перезагрузке системы

sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf

sudo update-initramfs -u

Теперь давай те рассмотрим ситуацию, что наш диск вышел из строя и заменим его другим диском

Создадим файл на нашем массиве

dd if=/dev/zero of=/mnt/raid1 bs=1M count=100

Теперь отключим один из дисков от компьютера

cat /proc/mdstat

Personalities : [raid1][linear][multipath][raid0][raid6][raid5][raid4][raid10] 
md0 : active raid1 sdb[1]
      10477568 blocks super 1.2 [2/1] [_U]

Проверяем, что файлы на нашем массиве остались в порядке и не пропали

ls -l /mnt

drwx------ 2 root root     16384 июн  8 16:21 lost+found
-rw-r--r-- 1 root root 104857600 июн  8 16:26 raid1

Видим, что наш массив помечен как _U, это значит что один из дисков сбойный. Вообще если диск просто сбойный и он отображается как часть массива, но работает нестабильно, то его сначала надо пометить как сбойный, а потом убрать из массива

sudo mdadm --manage /dev/md0 --fail /dev/sdc

sudo mdadm --manage /dev/md0 --remove /dev/sdc

но в нашем случае диск просто был вынут, поэтому можно сразу заменять его новым диском sdd

После подключения нового диска, нужно на нем создать такую же разметку, как и на соседнем диске, копируем разметку командой

sudo sfdisk -d /dev/sdb | sfdisk --force /dev/sdd

Добавляем новый диск в наш массив

sudo mdadm --manage /dev/md0 --add /dev/sdd

И снова дожидаемся пока данные на дисках будут синхронизованы

cat /proc/mdstat

Personalities :[raid1][linear][multipath][raid0][raid6][raid5][raid4][raid10] 
md0 : active raid1 sdd[2] sdb[1]
      10477568 blocks super 1.2 [2/1] [_U]
      [==>..................]  recovery = 11.8% (1241920/10477568)
      finish=6.7min speed=22662K/sec
      
unused devices: none

После окончания синхронизации

Personalities :[raid1][linear][multipath][raid0][raid6][raid5][raid4][raid10] 
md0 : active raid1 sdd[2] sdb[1]
      10477568 blocks super 1.2 [2/2] [UU]
      
unused devices: none

Создание RAID 5

Для RAID 5 возьмем три диска sdb, sdc, sdd

sudo mdadm --create -v /dev/md5 --level=5 --raid-devices=3 \

 /dev/sdb /dev/sdc /dev/sdd

Проверяем

cat /proc/mdstat

Personalities:[raid1][linear][multipath][raid0][raid6][raid5][raid4][raid10] 
md5 : active raid5 sdd[3] sdc[1] sdb[0]
  20955136 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
      
unused devices: none

Восстанавливается RAID 5 отличается от RAID 1

cat /proc/mdstat

Personalities :[linear][multipath][raid0][raid1][raid6][raid5][raid4][raid10] 
md5 : inactive sdc[0](S) sdd[1](S)
      20955136 blocks super 1.2

Как видим после отключения одного из дисков массив ушел в положение inactive

Останавливаем RAID

sudo mdadm --stop /dev/md5

Пробуем пересобрать его

sudo mdadm --assemble --scan --force

mdadm: /dev/md5 has been started with 2 drives (out of 3).

Проверяем

cat /proc/mdstat

Personalities :[linear][multipath][raid0][raid1][raid6][raid5][raid4][raid10] 
md5 : active raid5 sdc[0] sdd[1]
   20955136 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]

Массив снова в положении active

дальше все как и с массивом RAID 1, добавляем новый диск в массив, ждем пока закончится синхронизация и пользуемся

Создание RAID 10

Для создания RAID 10 будем использовать 4 диска sdb,sdc,sdd,sde

sudo mdadm --create -v /dev/md0 --level=10 --raid-devices=4 \

 /dev/sdb /dev/sdc /dev/sdd /dev/sde 

cat /proc/mdstat

Personalities :[linear][multipath][raid0][raid1][raid6][raid5][raid4][raid10] 
md0 : active raid10 sde[3] sdd[2] sdc[1] sdb[0]
      20955136 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      
unused devices: none

Восстановление RAID 10, после сбоя диска, по-аналогии с RAID 5.






Введите ответ:

+

=



Николай!

2020-11-11 18:37:44

Статья СУПЕР! Респект и уважуха автору! Пишите по другим аспектам! Например по zram''ам и по zswap''ам!!! Народ будет только признателен! Спасибо!


Дмитрий

2018-12-03 13:59:45

Вот такие статьи, это то, чего не хватает Linux - всё четко и понятно, без ненужной теории (теории в интернетах полно) и с практическим примером. Спасибо!