在debian里面把阵列由Raid 1升级到Raid 10
家里NAS里的两个14T硬盘快满了,想着要增加硬盘的容量。目前的环境是,安装的esxi,里面有一个debian 10的虚拟机,把这两个14T的硬盘直通过去,用mdadm组了软阵列,再垃圾的数据也是无价的,所以宁愿多花点钱来组阵列。所以又买了两块14T的硬盘,准备4*14T来组Raid 10,由于数据量比较大,接近12T,无损升级就比较重要了。
网上找了一圈,发现可以无损的从Raid 1升级到Raid 10,思路如下:
1,先用两个新硬盘组成Raid 10,这个时候组的Raid 10其实是一个Raid 0,也就是两个硬盘相加的容量
2,把旧阵列上的数据复制到新阵列上面来
3,停用旧阵列上的一个硬盘,加入到新阵列上面,等待数据同步完成
4,停用旧阵列,把第四个硬盘增加到新阵列上来,等待数据同步完成
5,四个硬盘的数据都同步完成后,就是一个完整的Raid 10了。
说干就干,先在另一个虚拟机上试验。虽然说是无损升级,但还是强烈要求备份重要数据。
一,新增加两个新硬盘
请注意,sdb和sdc是旧硬盘,是之前组的Raid 1,新的硬盘名称是sdd和sde,请一定要区分好新旧硬盘。
二,先用两个新硬盘,建立好缺失的Radi 10
说明一下,/dev/sdd和/dev/sde是新硬盘,/dev/sdb和/dev/sdc是旧硬盘
mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sdd missing /dev/sde missing
以这个阵列之中,/dev/sdd对应有一个丢失的硬盘,/dev/sde对应也有一个丢失的硬盘,其实这种数据是不安全,实际上是一个raid 0的阵列。
root@debian:~# mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sdd missing /dev/sde missing mdadm: layout defaults to n2 mdadm: layout defaults to n2 mdadm: chunk size defaults to 512K mdadm: size set to 8379392K mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md1 started.
一个新的阵列就建立了,名称是:/dev/md1
三,查看刚才创建好的新阵列
mdadm -D /dev/md1
root@debian:~# mdadm -D /dev/md1 /dev/md1: Version : 1.2 Creation Time : Sun Sep 5 19:38:29 2021 Raid Level : raid10 Array Size : 16758784 (15.98 GiB 17.16 GB) Used Dev Size : 8379392 (7.99 GiB 8.58 GB) Raid Devices : 4 Total Devices : 2 Persistence : Superblock is persistent Update Time : Sun Sep 5 19:38:30 2021 State : clean, degraded Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Layout : near=2 Chunk Size : 512K Consistency Policy : resync Name : debian:1 (local to host debian) UUID : dd82cce6:dca9eccf:aa0bc1c0:425a8ee3 Events : 2 Number Major Minor RaidDevice State 0 8 48 0 active sync set-A /dev/sdd - 0 0 1 removed 2 8 64 2 active sync set-A /dev/sde - 0 0 3 removed
我们可以看到,1号盘和3号盘是空缺状态,0号盘和2号盘是存在状态,这两个空缺的位置,后面会补上。
四,保存阵列
把刚才新建立的阵列保存起来,以免在重启时丢失。
# View current mdadm config: cat /etc/mdadm/mdadm.conf # Add new layout (grep is to make sure you don't re-add md0): mdadm --detail --scan | grep "/dev/md1" | tee -a /etc/mdadm/mdadm.conf # Save config to initramfs (to be available after reboot) update-initramfs -u
五,格式化和挂载
我们新建一个目录名,mkdir -p /mnt/R10
格式化:mkfs.ext4 -F /dev/md1
然后挂载:mount /dev/md1 /mnt/R10
复制文件到新阵列:cp -a /mnt/Public/* /mnt/R10
特别提示一下,这里的复制文件,如果数据量很大,可以需要复制很长的时间,有的甚至要一天。所以建议用screen命令,让复制在后台运行。
六,将旧阵列里的硬盘,添加到新阵列里来,先添加第一个
1,在raid 1里标记旧硬盘为fail,先对/dev/sdb进行操作
mdadm /dev/md0 --fail /dev/sdb --remove /dev/sdb mdadm /dev/md1 --add /dev/sdb
请注意,这里会将旧硬盘/dev/sdb上所有的数据都清除掉。这时,旧的md0应该还能用,因为还有一块硬盘。这时,新的md1已经在开始同步数据了。
用以下命令查看
mdadm -D /dev/md1
这里可以看到,1号盘已到位了,并且数据已同步完成,还差3号盘空缺。
七,如果是把系统安装在阵列上面,还需要在新阵列上安装GRUB。安装好后,用新的阵列启动,如果没有问题,就把旧的阵列删除。如果系统没有安装在阵列上面,可以忽略这一步。
八,删除旧阵列上的第二块硬盘,添加到新阵列之中
先取消旧的阵列挂载:umount /mnt/Public
停用旧阵列:mdadm --stop /dev/md0
移除旧阵列上的第二个硬盘:mdadm /dev/md0 --remove /dev/sdc
把最后一个硬盘添加到新阵列:mdadm /dev/md1 --add /dev/sdc
等待同步完成,如果数据巨大,可能要等上一天的时间
九,同步完成之后,查看一下新阵列的最新状态
cat /proc/mdstat
可以看到,raid10是活动状态,并且是四个硬盘。
mdadm -D /dev/md1
四个硬盘同步完成。
十,更新mdadm.conf配置
在/etc/mdadm/mdadm.conf里面删除md0,然后保存
update-initramfs -u
重启一次。