Расширяем RAID10 в mdadm
Решил поиграться с расширением software raid10 на своей машине. Заодно написать статью.
Подготовка
У меня в наличии GPT диск /dev/sdb, два раздела используются под /home (raid1) и swap. Все манипуляции буду делать с ним.
Текущее состояние разделов на диске:
$ sudo fdisk /dev/sdb
Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sdb: 465,8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 004791FC-E27A-4B7F-890A-96AE57B2420E
Device Start End Sectors Size Type
/dev/sdb1 2048 765640704 765638657 365,1G Linux RAID
/dev/sdb2 765642752 782223359 16580608 7,9G Linux swap
Подготавливаем раздел – создаем 4 раздела объемом 239МиБ.
Command (m for help): n
Partition number (3-128, default 3):
First sector (782223360-976773134, default 782223360):
Last sector, +sectors or +size{K,M,G,T,P} (782223360-976773134, default 976773134): +238,6M
Created a new partition 3 of type 'Linux filesystem' and of size 239 MiB.
Command (m for help): n
Partition number (4-128, default 4):
First sector (782712832-976773134, default 782712832):
Last sector, +sectors or +size{K,M,G,T,P} (782712832-976773134, default 976773134): +238,6M
Created a new partition 4 of type 'Linux filesystem' and of size 239 MiB.
Command (m for help): n
Partition number (5-128, default 5):
First sector (783202304-976773134, default 783202304):
Last sector, +sectors or +size{K,M,G,T,P} (783202304-976773134, default 976773134): +238,6M
Created a new partition 5 of type 'Linux filesystem' and of size 239 MiB.
Command (m for help): n
Partition number (6-128, default 6):
First sector (783691776-976773134, default 783691776):
Last sector, +sectors or +size{K,M,G,T,P} (783691776-976773134, default 976773134): +238,6M
Created a new partition 6 of type 'Linux filesystem' and of size 239 MiB.
В результате получилось такая картина:
Command (m for help): p Disk /dev/sdb: 465,8 GiB, 500107862016 bytes, 976773168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 004791FC-E27A-4B7F-890A-96AE57B2420E Device Start End Sectors Size Type /dev/sdb1 2048 765640704 765638657 365,1G Linux RAID /dev/sdb2 765642752 782223359 16580608 7,9G Linux swap /dev/sdb3 782223360 782712831 489472 239M Linux filesystem /dev/sdb4 782712832 783202303 489472 239M Linux filesystem /dev/sdb5 783202304 783691775 489472 239M Linux filesystem /dev/sdb6 783691776 784181247 489472 239M Linux filesystem
Записываем изменения на диск и выходим с утилиты fdisk:
Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Re-reading the partition table failed.: Device or resource busy
Ругнулся – перечитываю карту разделов утилитой partprobe
$ sudo partprobe /dev/sdb
Создаем массив raid10, ext4 на нем и монтируем:
$ sudo mdadm --create /dev/md10 --level=10 --raid-devices=4 /dev/sdb3 /dev/sdb4 /dev/sdb5 /dev/sdb6
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.
$ sudo mkfs.ext4 /dev/md10
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 487424 1k blocks and 121920 inodes
Filesystem UUID: f0be0e7f-d1dc-4ecc-bc3d-29781ca253c8
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
$ test -d /mnt/test || sudo mkdir /mnt/test
$ sudo mount /dev/md10 /mnt/test
$ sudo mdadm --detail /dev/md10
/dev/md10:
Version : 1.2
Creation Time : Thu Jan 5 12:51:15 2017
Raid Level : raid10
Array Size : 487424 (476.08 MiB 499.12 MB)
Used Dev Size : 243712 (238.04 MiB 249.56 MB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Jan 5 12:52:28 2017
State : active
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Name : panaceya:10 (local to host panaceya)
UUID : b3fb9ea9:5762490b:8755d242:3e36350d
Events : 20
Number Major Minor RaidDevice State
0 8 19 0 active sync set-A /dev/sdb3
1 8 20 1 active sync set-B /dev/sdb4
2 8 21 2 active sync set-A /dev/sdb5
3 8 22 3 active sync set-B /dev/sdb6
Расширение массива и файловой системы.
Я не стал заморачиваться с расширением существующих разделов – просто создал 4 раздела с большим объемом. Для тестов вполне хватит.
Нужно поочередно каждый раздел:
- поставить в статус fail
- удалить с массива
- произвести расширение блоков (для живого сервера – в этой статье я использую просто другой раздел)
- добавить новый раздел в массив
- дождаться окончания синхронизации (мета)данных на массиве
Порядок не важен. Я пошел с последнего.
Пример п.п. 1-4 для первого раздела /dev/sdb6 (заменяю на /dev/sdb7):
$ sudo mdadm --manage /dev/md10 --fail /dev/sdb6 mdadm: set /dev/sdb6 faulty in /dev/md10 $ sudo mdadm --manage /dev/md10 --remove /dev/sdb6 mdadm: hot removed /dev/sdb6 from /dev/md10 $ sudo mdadm --manage /dev/md10 --add /dev/sdb7
Ждем окончания синхронизации командой
sudo mdadm --wait /dev/md10
или смотрим watch`ем:
watch -n 1 cat /proc/mdstat
Остальные разделы меняем аналогично, и всегда дожидаемся окончания синхронизации.
Расширяем размер самого массива до максимально возможного.
mdadm --grow /dev/md10 --size=max
На живом проекте используйте опцию –backup-file, которая ведет на другой диск (неиспользуемый в массиве, NFS-шару или ISCSI)
mdadm --grow --backup-file=/mnt/backup /dev/md1 --size=max
В итоге у меня получился следующее состояние:
$ sudo cat /proc/mdstat
md10 : active raid10 sdb7[4] sdb10[7] sdb9[6] sdb8[5]
974848 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
$ sudo mdadm --detail /dev/md10
/dev/md10:
Version : 1.2
Creation Time : Thu Jan 5 12:51:15 2017
Raid Level : raid10
Array Size : 974848 (952.16 MiB 998.24 MB)
Used Dev Size : 487424 (476.08 MiB 499.12 MB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Jan 5 14:08:37 2017
State : active
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Name : panaceya-work:10 (local to host panaceya-work)
UUID : b3fb9ea9:5762490b:8755d242:3e36350d
Events : 158
Number Major Minor RaidDevice State
7 8 26 0 active sync set-A /dev/sdb10
6 8 25 1 active sync set-B /dev/sdb9
5 8 24 2 active sync set-A /dev/sdb8
4 8 23 3 active sync set-B /dev/sdb7
Размонтируем FS и расширяем:
$ sudo umount /dev/md10 $ sudo resize2fs -f /dev/md10 resize2fs 1.42.13 (17-May-2015) Resizing the filesystem on /dev/md10 to 974848 (1k) blocks. The filesystem on /dev/md10 is now 974848 (1k) blocks long.
Все. Монтируем обратно.
PS: почему-то я находил материалы, в которых сказано что raid10 не расширяется или не расширяется на горячем (online).

Ви маєте увійти, щоб оприлюднити коментар.