Расширение 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 массива, иерархия разделов и логических томов и так далее.
Без учёта всех нюансов, необдуманные действия с хранимой информации неминуемо приведут к её потере!!! Будьте внимательны!!!