家里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
重启一次。

发表评论

您的电子邮箱地址不会被公开。