- Опубликовано 19.10.2015 13:54
- Просмотров: 3712
Как сделать из RAID1 -> RAID5 на linux mdadm
Предположим в нашем распоряжении уже есть работающий RAID1 состоящий из двух дисков. Всё замечательно, но однажды мы захотели расширить объём, добавив ещё один диск и соответственно перейти к RAID5.
В сети уже есть инструкция на данную тему:
Миграция с RAID1 на RAID5 в mdadm без потери данных - habrahabr.ru/post/100952
Но, откровенно говоря, мне не совсем понравился подход автора, который, по сути, предлагает создавать RAID5 поверх старого RAID1. Поэтому предлагаю свой способ.
Итак, у нас уже есть RAID1 - /dev/md0 состоящий из двух дисков /dev/sdb1 и /dev/sdc1, просмотрим информацию по нему:
[root@localhost /]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Mon Oct 19 13:02:18 2015
Raid Level : raid1
Array Size : 8383488 (8.00 GiB 8.58 GB)
Used Dev Size : 8383488 (8.00 GiB 8.58 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Mon Oct 19 13:23:48 2015
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Name : localhost:0 (local to host localhost)
UUID : 803589ac:17ccb613:6afdc1d0:b4f7ac19
Events : 19
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
Как видно, у нас уровень RAID - 1.
Первым делом необходимо соответствующим образом подготовить новый диск /dev/sdd. Для этого создадим на нём раздел, а также изменим тип файловой системы:
[root@localhost /]# fdisk /dev/sdd
Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x2624c075.
Команда (m для справки): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Номер раздела (1-4, default 1): 1
First sector (2048-16777215, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-16777215, default 16777215):
Created a new partition 1 of type 'Linux' and of size 8 GiB.
Команда (m для справки): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'.
Команда (m для справки): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
Для этого я использовал fdisk, который в используемом мною дистрибутиве Mageia 5, претерпел довольно серьёзные изменения, однако вы можете использовать например parted, сути этого не меняет.
Добавляем новый диск в массив:
[root@localhost /]# mdadm --manage /dev/md0 --add /dev/sdd1
mdadm: added /dev/sdd1
Если вывести информацию по нашему RAID, то можно увидеть что новый диск добавился в качестве резервного:
[root@localhost /]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Mon Oct 19 13:02:18 2015
Raid Level : raid1
Array Size : 8383488 (8.00 GiB 8.58 GB)
Used Dev Size : 8383488 (8.00 GiB 8.58 GB)
Raid Devices : 2
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Mon Oct 19 14:21:02 2015
State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Name : localhost:0 (local to host localhost)
UUID : 803589ac:17ccb613:6afdc1d0:b4f7ac19
Events : 20
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 49 - spare /dev/sdd1
Теперь собственно самое интересное, меняем уровень нашего RAID1 на RAID5:
[root@localhost /]# mdadm --grow /dev/md0 --level 5 --raid-devices 3
mdadm: level of /dev/md0 changed to raid5
Теперь вновь посмотрим на статус нашего массива:
[root@localhost /]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Mon Oct 19 13:02:18 2015
Raid Level : raid5
Array Size : 8383488 (8.00 GiB 8.58 GB)
Used Dev Size : 8383488 (8.00 GiB 8.58 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Mon Oct 19 14:30:16 2015
State : clean, reshaping
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 64K
Reshape Status : 31% complete
Delta Devices : 1, (2->3)
Name : localhost:0 (local to host localhost)
UUID : 803589ac:17ccb613:6afdc1d0:b4f7ac19
Events : 43
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 49 2 active sync /dev/sdd1
Как видно уровень нашего массива изменился на RAID5, идёт перестроение, и теперь в нём участвуют 3 диска (раздела) /dev/sdb1 /dev/sdc1 /dev/sdd1.
Если мы хотим увеличить скорость синхронизации то можно например это сделать дав команду:
[root@localhost /]# echo 200000 > /proc/sys/dev/raid/speed_limit_min
Осталось дело за малым, расширить файловую систему до размера изменённого RAID. Разумеется предварительно необходимо отмонтировать массив её и проверить файловую систему на на ошибки:
[root@localhost /]# umount /dev/md0
[root@localhost /]# e2fsck -f /dev/md0
e2fsck 1.42.12 (29-Aug-2014)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/md0: 11/524288 files (0.0% non-contiguous), 70287/2095872 blocks
[root@localhost /]# resize2fs /dev/md0
resize2fs 1.42.12 (29-Aug-2014)
Resizing the filesystem on /dev/md0 to 4191744 (4k) blocks.
The filesystem on /dev/md0 is now 4191744 (4k) blocks long.
После проделанных манипуляций массив надо вновь подмонтировать. Также по необходимости можно добавить информацию о новом диске в конфиг mdadm.conf.
При этом хотелось бы отметить что в процессе преобразования RAID1 в RAID5 не происходила его остановка, а отмонтирование происходило на непродолжительное время для изменения размера файловой системы, в моём случае это ext4.