快速完美迁移大容量少数据ext4 rootfs启动分区

任务

周五遇到一个容量为300多G的SAS盘,MBR分区表,只有一个文件系统为ext4的分区,已用空间只有7GB。我们打算把SAS物理盘的数据迁移到虚拟机的磁盘文件,如何进行快速迁移呢?

方案

有两个方案比较容易想到
– 分区拷贝方案:使用resize2fs+dd进行全盘迁移
– 数据拷贝方案: 新建分区,复制MBR,PBR及数据

其中第一个方案操作较为简单,但是需要拷贝的数据为resize2fs后的容量。我们打算给目标分区留50G的空间,如果resize2fs直接调整为50G,则拷贝的时间会比较长。如果resize2fs到8GB,则resize2fs原地读写的时间会很长。所以这个方案相比而言在时间上不占优势。

而方案二,由于只在源分区上单纯读,在目标位置上单纯写,性能会最好,且直接操作文件内容,只需要拷贝7GB的数据,时间最短。

因此我们选择方案二

实操

新建磁盘文件

我们打算在磁盘上提前预留所有空间,因此采用预分配的形式创建磁盘文件

实际在RAID10的阵列上不到2分钟执行完毕。

创建分区与文件系统

首先我们将磁盘文件挂载到一台kvm虚拟机上,挂载后设备文件为vdb。

首先进行分区,执行fdisk /dev/vdb,使用n创建新分区,使用a命令设置为启动分区,使用w命令确认写入。

然后格式化分区,执行mkfs.ext4 /dev/vdb1

接下来重点来了,我们要迁移MBR和PBR及grub的coreimg。首先在旧机器A上执行以下命令

接下来在kvm虚拟机上将MBR和PBR及coreimg进行还原

另外,我们还需要还原一下分区的UUID,保证启动时可以正常找到分区
在旧机器上使用blkid找到sda1的UUID,保存下来
在kvm机器上使用tune2fs进行配置

这样分区UUID就还原完成了

拷贝文件

首先在kvm上挂载/dev/vdb1

在旧设备上使用rsync将文件从旧设备拷贝到新分区中,由于rootfs中有挂载的/data//data2/目录,我们要忽略掉。

执行完成后,在kvm机器上执行ls来确认文件系统正常拷贝

至此磁盘、分区与数据均拷贝完成

验证

最后将构建好的磁盘文件挂载到最终的kvm机器,并设置为启动磁盘。
启动虚拟机,确认机器正常引导。迁移完成。

发表评论

为防机器,验证码请直接输入4个数字1

*