飞牛系统盘迁移(大盘迁小盘)
迁移概要
由于容量原因,本人测试用DG进行克隆后无法正常引导。本次克隆采用的是无需进入PE,直接在终端输入指令即可复制系统文件,所以需要区分BIOS和UEFI引导的系统。
引导类型检测
首先需要确认自己的系统是BIOS还是UEFI引导,如果不确定,可以进入SSH终端输入:
lsblk
判断标准:
- BIOS引导:系统盘的第一分区没有挂载任何目录
- UEFI引导:系统盘的第一分区挂载在
/boot/efi
sda2
就是系统根目录(可以看到后面有个反斜杠)
BIOS引导(sda迁移到sdb)
BIOS引导不需要单独分区EFI,所以克隆起来会比较简单。
操作过程
给克隆的目标磁盘进行分区
挂载新磁盘以便后续操作
使用 rsync 动态复制系统文件
修改 fstab
重新生成GRUB引导文件
给克隆的目标磁盘进行分区
磁盘标识
以下命令中的 sdb
和 sda
需要根据实际情况修改为克隆的目标磁盘和原磁盘
进入SSH终端,输入以下指令:
# 进入fdisk分区工具
sudo fdisk /dev/sdb
分区操作步骤:
- 输入
n
创建新分区 - 输入
p
选择主分区 - 连续按回车键使用默认设置
- 输入
w
保存分区表并退出
格式化迁移分区
# 格式化为ext4文件系统
sudo mkfs.ext4 /dev/sdb1
挂载新磁盘并复制系统文件
# 挂载新磁盘到/mnt目录
sudo mount /dev/sdb1 /mnt
# 使用rsync复制系统文件(约需10分钟)
sudo rsync -q -avxHAX --progress \
--exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found"} \
/ /mnt/
注意事项
- 根据系统大小,复制过程约需10分钟
- 期间控制台可能无反应,属于正常情况
- 指令执行完毕后不会有任何输出
修改文件标识
获取磁盘UUID
查看克隆目标磁盘的标识:
sudo blkid /dev/sdb1
只需要复制UUID等号后面的字符串
# 编辑fstab文件
sudo nano /mnt/etc/fstab
按键盘 ctrl+X
再输入 y
然后 回车
编辑GRUB引导
# 绑定必要的系统目录
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /run /mnt/run
执行说明
全部命令可以一次性复制粘贴到终端执行,正常情况下不会有任何输出
进入克隆目标系统终端
# 进入chroot环境
sudo chroot /mnt
# 安装GRUB引导程序
grub-install /dev/sdb
# 生成GRUB配置文件
grub-mkconfig -o /boot/grub/grub.cfg
然后输入 exit
或者 ctrl+D
退回原系统
取消挂载系统分区
# 递归卸载所有挂载点(约需1分钟)
sudo umount -R /mnt
完成提示
执行完毕后不会有任何输出,此时克隆已完成
然后到这里就已经克隆完毕了,我们可以直接重启进入bios将引导切换到克隆到的目标磁盘或关机状态下拔掉当前系统盘。
验证系统
可以看到系统根目录已经是20G了
UEFI引导(sda迁移到sdb)
UEFI引导需要单独分区一个UEFI引导盘,所以会多一些步骤。但是大体与BIOS引导类似
操作过程
给克隆的目标磁盘进行分区
挂载新磁盘以便后续操作
复制EFI引导文件
复制系统文件
修改 fstab
重新生成GRUB引导文件
以下命令中 sdb
和 sda
需要自行分别修改为克隆的目标磁盘,克隆原磁盘。
给克隆的目标磁盘进行分区
# 进入fdisk分区工具
sudo fdisk /dev/sdb
分区操作步骤:
1. 创建EFI分区:
- 输入
n
->p
-> 回车 -> 回车 ->+94M
->y
2. 修改分区类型为EFI:
- 输入
t
->ef
3. 创建系统分区:
- 输入
n
->p
-> 回车 -> 回车 -> 回车 ->w
格式化分区
# 格式化EFI分区为FAT32
sudo mkfs.fat -F32 /dev/sdb1
# 格式化根分区为ext4
sudo mkfs.ext4 /dev/sdb2
复制文件
复制EFI文件
# 创建挂载点目录
sudo mkdir -p /mnt/old-efi /mnt/new-efi
# 挂载EFI分区
sudo mount /dev/sda1 /mnt/old-efi
sudo mount /dev/sdb1 /mnt/new-efi
# 复制EFI文件
sudo rsync -av /mnt/old-efi/ /mnt/new-efi/
# 卸载分区
sudo umount /mnt/old-efi /mnt/new-efi
复制系统文件
# 创建挂载点并挂载根分区
sudo mkdir -p /mnt/sdb2
sudo mount /dev/sdb2 /mnt/sdb2
# 复制系统文件(排除临时目录)
sudo rsync -aAXv -q \
--exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} \
/ /mnt/sdb2/
注意事项
- 根据系统大小,复制过程约需10分钟
- 期间控制台可能无反应,属于正常情况
- 指令执行完毕后不会有任何输出
修改文件标识
# 查看两个分区的UUID
sudo blkid /dev/sdb1 /dev/sdb2
注意事项
需要复制两个分区的UUID(等号后面的字符串)
# 编辑fstab文件
sudo nano /mnt/sdb2/etc/fstab
按键盘 ctrl+X
再输入 y
然后 回车
编辑GRUB引导
# 挂载根分区和EFI分区
sudo mount /dev/sdb2 /mnt/sdb2
sudo mount /dev/sdb1 /mnt/sdb2/boot/efi
# 绑定必要的系统目录
sudo mount --bind /dev /mnt/sdb2/dev
sudo mount --bind /dev/pts /mnt/sdb2/dev/pts
sudo mount --bind /proc /mnt/sdb2/proc
sudo mount --bind /sys /mnt/sdb2/sys
sudo mount --bind /run /mnt/sdb2/run
挂载报错
这里可能会有挂载报错的提示,可以忽略
进入克隆目标系统终端
# 进入chroot环境
sudo chroot /mnt/sdb2
# 安装UEFI引导程序
grub-install --target=x86_64-efi --efi-directory=/boot/efi /dev/sdb
# 更新GRUB配置
update-grub
操作完成
输入 exit
或者按 ctrl+D
退回原系统
取消挂载
# 按顺序卸载所有挂载点
sudo umount /mnt/sdb2/dev/pts
sudo umount /mnt/sdb2/dev
sudo umount /mnt/sdb2/proc
sudo umount /mnt/sdb2/sys
sudo umount /mnt/sdb2/run
sudo umount /mnt/sdb2/boot/efi
sudo umount /mnt/sdb2
到这里就已经克隆完毕了,可以直接重启进入BIOS将引导切换到目标磁盘,或在关机状态下拔掉原系统盘
验证系统
可以看到系统根目录已经是20G了