mdadm支持missing两个硬盘的情况下组RAID10,因此可以先通过两个新硬盘+两个missing组RAID10,然后把现有RAID1中的数据拷贝到新的RAID10中,再把现有RAID1中的两个分区加入到新的RAID10中,让mdadm自动重建数据。
下面假设现有的RAID1分区是/dev/sda5与/dev/sdb5,新的两个分区是/dev/sdc5与/dev/sdd5,最终目的是要使用/dev/sda5、/dev/sdb5、/dev/sdc5以级/dev/sdd5组RAID10。
首先备份数据。
如果操作的是系统分区,使用LiveCD操作即可。
1 2 3 4 5 6 7 8 9 |
# /dev/sda5与/dev/sdb5是目前已经组了RAID1的分区,/dev/md0是现有在使用的RAID1 r1="/dev/md0" r1_part1="/dev/sda5" r1_part2="/dev/sdb5" # 下面两个是新的分区,将要用于把RAID1升级为RAID10 r10="/dev/md1" r10_part1="/dev/sdc5" r10_part2="/dev/sdd5" |
通过两个新的分区+两个missing构建RAID10(这种情况下等于RAID0):
1 |
mdadm -v --create ${r10} --level=raid10 --raid-devices=4 ${r10_part1} missing ${r10_part2} missing |
RAID10构建好后,把RAID1中的数据拷贝到RAID10中:
1 |
dd if=${r1} of=${r10} bs=32M conv=fdatasync status=progress |
从RAID1中移除第一个分区,加入到RAID10中:
1 2 |
mdadm ${r1} --fail ${r1_part1} --remove ${r1_part1} mdadm ${r10} --add ${r1_part1} |
查看重建进度:
1 |
mdadm --detail ${r10} |
重建完成后,把RAID1中剩余的另一个分区也加入到RAID10中:
1 2 3 |
mdadm --stop ${r1} mdadm --zero-superblock ${r1_part2} mdadm ${r10} --add ${r1_part2} |
第二个分区重建完成后,编辑/etc/mdadm/mdadm.conf,把旧的RAID1删除,并把RAID10的信息存入/etc/mdadm/mdadm.conf中,更新initramfs:
1 2 |
mdadm --detail --brief ${r10} | tee -a /etc/mdadm/mdadm.conf update-initramfs -u |
如果是通过LiveCD操作的,最后重建完成后的步骤,chroot进系统盘操作。