Расширение RAID Массива

Сегодня рассмотрим вопрос замены жёстких дисков в программном RAID массиве уровня RAID-1 обслуживающегося с помощью утилит mdadmи LVM - на более ёмкие.

Это довольно часто возникающая задача в повседневной жизни системного администратора.

Исходные данные

Итак в качестве тестового стенда, мы имеем виртуальную машину с Debian 12 в качестве ОС и программным RAID массивом уровня RAID-1, созданную на сервисе Yandex Cloud со следующими исходными данными по жестким дискам:

smaks@linadm:~$ lsblk
NAME            MAJ:MIN RM SIZE RO TYPE  MOUNTPOINTS
vda             254:0    0  10G  0 disk  
├─vda1          254:1    0   1M  0 part  
└─vda2          254:2    0  10G  0 part  /
vdb             254:16   0   2G  0 disk  
└─md0             9:0    0   2G  0 raid1 
  └─vg--0-lv--0 252:0    0   2G  0 lvm   /mnt/raid1
vdc             254:32   0   2G  0 disk  
└─md0             9:0    0   2G  0 raid1 
  └─vg--0-lv--0 252:0    0   2G  0 lvm   /mnt/raid1

Наша задача: увеличить софтовый RAID массив md0, и логический томом LVM lv-0, то есть заменить диски vdb и vdc размером 2 Гб на диски размером 4 Гб.

Файловая система логического тома ext4, сам том смонтирован в директорию /mnt/raid1. Для контроля создан файл /mnt/raid1/linux_raid_lvm_lesson.txt

smaks@linadm:~$ ls -l /mnt/raid1/
total 16
-rw-r--r-- 1 root root     0 Jul 22 03:45 linux_raid_lvm_lesson.txt
drwx------ 2 root root 16384 Jul 22 03:43 lost+found

Итак - приступим!

Внимание!!!
При повторении шагов описанных в данной статье ОБЯЗАТЕЛЬНО!!! правильно указывайте наименование ваших блочных устройств!!! Бездумное копирование команд - ни к чему хорошему не приведёт!

1. Помечаем один из дисков, как сбойный

sudo mdadm /dev/md0 --fail /dev/vdc

Получим следующий вывод терминала при выполнении данной команды:

smaks@linadm:~$ sudo mdadm /dev/md0 --fail /dev/vdc
mdadm: set /dev/vdc faulty in /dev/md0

2. Удаляем разделы блочного устройства

sudo mdadm /dev/md0 --remove /dev/vdc

Получим следующий вывод терминала при выполнении данной команды:

smaks@linadm:~$ sudo mdadm /dev/md0 --remove /dev/vdc
mdadm: hot removed /dev/vdc from /dev/md0

3. Проверяем состояние массива после удаления диска

cat /proc/mdstat

В выводе команды видим, что наш диск vdc помечен как сбойный ([2/1] [U_]):

smaks@linadm:~$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 vdb[0]
      2094080 blocks super 1.2 [2/1] [U_]
      
unused devices: <none>

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

Меняем старый диск vdc размером 2 Гб на новый диск vdc, только теперь размером 4 Гб и включаем его в массив:

  • проверяем командой lsblk что у нас сейчас получилось:
smaks@linadm:~$ lsblk
NAME            MAJ:MIN RM SIZE RO TYPE  MOUNTPOINTS
vda             254:0    0  10G  0 disk  
├─vda1          254:1    0   1M  0 part  
└─vda2          254:2    0  10G  0 part  /
vdb             254:16   0   2G  0 disk  
└─md0             9:0    0   2G  0 raid1 
  └─vg--0-lv--0 252:0    0   2G  0 lvm   /mnt/raid1
vdc             254:32   0   4G  0 disk

Видим наш заменённый диск vdc размером 4 Гб.

  • включаем новый диск vdc в массив:
sudo mdadm /dev/md0 --add /dev/vdc

видим в выводе команды, что диск успешно добавился в наш RAID массив:

smaks@linadm:~$ sudo mdadm /dev/md0 --add /dev/vdc
mdadm: added /dev/vdc
Внимание!!!

После этого шага необходимо дождаться полной синхронизации RAID массива!!!
Вывод команды cat /proc/mdstat, не синхронизированного массива выглядит примерно так:

smaks@linadm:~$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 vdb[3] vdc[2]
      2094080 blocks super 1.2 [2/1] [_U]
      [=====>...............]  recovery = 29.1% (611520/2094080) finish=1.0min speed=22648K/sec

Вывод команды cat /proc/mdstat, полностью синхронизированного массива должен выглядеть примерно так:

smaks@linadm:~$ cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 vdc[2] vdb[0]
      2094080 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>

5. Меняем второй диск

Производим замену второго диск /dev/vdb на диск большей ёмкости выполнив все шаги описанные в пунктах 1 - 4, не забывая менять в командах имя блочного устройства с vdc на vdb!

6. Расширяем RAID массив до максимального размера

Расширим наш RAID массив до максимального размера заменённых дисков:

sudo mdadm --grow /dev/md0 --size=max

Вывод команды будет следующим:

smaks@linadm:~$ sudo mdadm --grow /dev/md0 --size=max
mdadm: component size of /dev/md0 has been set to 4191232K

7. Расширяем группу томов LVM

Посмотрим вывод команды lsblk:

smaks@linadm:~$ lsblk
NAME            MAJ:MIN RM SIZE RO TYPE  MOUNTPOINTS
vda             254:0    0  10G  0 disk  
├─vda1          254:1    0   1M  0 part  
└─vda2          254:2    0  10G  0 part  /
vdb             254:16   0   4G  0 disk  
└─md0             9:0    0   4G  0 raid1 
  └─vg--0-lv--0 252:0    0   2G  0 lvm   /mnt/raid1
vdc             254:32   0   4G  0 disk  
└─md0             9:0    0   4G  0 raid1 
  └─vg--0-lv--0 252:0    0   2G  0 lvm   /mnt/raid1

Видим, что наш RAID массив md0 после выполнения Пункта 6 настоящей статьи , увеличился до 4 Гб, а вот группа томов LVM и сами логические тома остались прежнего размера.
Увеличим размер группы томов md0:

sudo pvresize /dev/md0

Вывод команды следующий:

smaks@linadm:~$ sudo pvresize /dev/md0
  Physical volume "/dev/md0" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

8. Расширяем логический том LVM

Теперь расширим наш логический том lv-0 командой:

sudo lvextend -l +100%FREE /dev/mapper/vg--0-lv--0

Вывод команды:

smaks@linadm:~$ sudo lvextend -l +100%FREE /dev/mapper/vg--0-lv--0 
  Size of logical volume vg-0/lv-0 changed from <2.00 GiB (511 extents) to <4.00 GiB (1023 extents).
  Logical volume vg-0/lv-0 successfully resized.

9. Проверки LVM

Теперь проверим, что у нас получилось в результате выполнения команд описанных в разделах 7 и 8 настоящей статьи:

  • проверяем группу томов:
sudo vgs

вывод команды:

smaks@linadm:~$ sudo vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  vg-0   1   1   0 wz--n- <4.00g    0 

Видим, что всё пространство занято группой томов vg-0 - всё в порядке.

  • проверяем логический том командой:
sudo lvs

вывод команды:

smaks@linadm:~$ sudo lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv-0 vg-0 -wi-ao---- <4.00g 

Здесь тоже всё в порядке, размер логического тома lv-0 группы томов vg-0 изменён.
Теперь остаётся расширить файловую систему ext4, что мы и сделаем ниже.

10. Расширяем файловую систему

Файловая система ext4 расширяется командой:

sudo resize2fs /dev/mapper/vg--0-lv--0

Вывод команды:

smaks@linadm:~$ sudo resize2fs /dev/mapper/vg--0-lv--0 
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/mapper/vg--0-lv--0 is mounted on /mnt/raid1; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/vg--0-lv--0 is now 1047552 (4k) blocks long.

Заключение

Проверим всё ли у нас получилось выполнив следующие команды:

  • lsblk:
      smaks@linadm:~$ lsblk
NAME            MAJ:MIN RM SIZE RO TYPE  MOUNTPOINTS
vda             254:0    0  10G  0 disk  
├─vda1          254:1    0   1M  0 part  
└─vda2          254:2    0  10G  0 part  /
vdb             254:16   0   4G  0 disk  
└─md0             9:0    0   4G  0 raid1 
  └─vg--0-lv--0 252:0    0   4G  0 lvm   /mnt/raid1
vdc             254:32   0   4G  0 disk  
└─md0             9:0    0   4G  0 raid1 
  └─vg--0-lv--0 252:0    0   4G  0 lvm   /mnt/raid1

Всё в порядке. Все разделы RAID массива имеют новый размер, равный 4 Гб.

  • df -h:
smaks@linadm:~$ df -h
Filesystem               Size  Used Avail Use% Mounted on
udev                     961M     0  961M   0% /dev
tmpfs                    197M  644K  196M   1% /run
/dev/vda2                9.8G  1.9G  7.6G  20% /
tmpfs                    983M     0  983M   0% /dev/shm
tmpfs                    5.0M     0  5.0M   0% /run/lock
tmpfs                    197M     0  197M   0% /run/user/1000
/dev/mapper/vg--0-lv--0  3.9G   24K  3.7G   1% /mnt/raid1

Здесь тоже всё как нам и нужно.

  • проверим сохранился ли наш файл /mnt/raid1/linux_raid_lvm_lesson.txt, который мы создавали для контроля сохранности информации:
smaks@linadm:~$ ls -l /mnt/raid1/
total 16
-rw-r--r-- 1 root root     0 Jul 22 03:45 linux_raid_lvm_lesson.txt
drwx------ 2 root root 16384 Jul 22 03:43 lost+found

Файл на месте.

Итак, все поставленные задачи нам удалось выполнить без потери информации.

Совет
Прежде чем приступить к выполнению действий в данной статье, всё внимательно проанализируйте!
Есть много разных нюансов, которые зависят от многих факторов, например: схема разбивки дисков, тип RAID массива, иерархия разделов и логических томов и так далее.
Без учёта всех нюансов, необдуманные действия с хранимой информации неминуемо приведут к её потере!!! Будьте внимательны!!!
0%