收起左侧

飞牛系统盘迁移(大盘迁小盘)

9
回复
2689
查看
[ 复制链接 ]
2025-3-24 00:11:09 显示全部楼层 阅读模式

如果需要更好阅读模式,可以点击这里前往我博客

迁移概要

由于容量原因,本人测试用DG进行克隆后无法正常引导。本次克隆采用的是无需进入PE,直接在终端输入指令即可复制系统文件,所以需要区分BIOS和UEFI引导的系统,首先需要先确认自己的系统是BIOS还是UEFI引导,如果自己不确定,可以进入SSH终端输入下面命令

lsblk

如果是BIOS引导,在你的系统盘的第一分区是没有挂载任何目录,如下图

如果是UEFI,那么这个分区后面是有 /boot/efi

sda2 就是系统根目录也可以看到他后面有个反斜杠

BIOS引导(sda迁移到sdb)

BIOS引导不需要单独分区EFI,所以克隆起来会比较简单。

操作过程

  1. 给克隆的目标磁盘进行分区
  2. 挂载新磁盘以便后续操作
  3. 使用 rsync 动态复制系统文件
  4. 修改 fstab
  5. 重新生成GRUB引导文件

给克隆的目标磁盘进行分区

以下命令中 sdb sda 需要自行分别修改为克隆的目标磁盘,克隆原磁盘。

进入SSH终端 输入以下指令

fdisk /dev/sdb 

按顺序输入 n -> p ->回车(默认)->回车(默认)->回车(默认)-> w (保存分区)

格式化迁移分区

mkfs.ext4 /dev/sdb1

挂载新磁盘并复制系统文件

mount /dev/sdb1 /mnt #指令执行完毕后不会有任何输出
rsync -q -avxHAX --progress --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found"} / /mnt/ #根据系统大小,需要10分钟左右,在此期间不要做其它操作!控制台没有任何反应属于正常情况!指令执行完毕后不会有任何输出

修改文件标识

查看克隆目标磁盘的标识

blkid /dev/sdb1

只需要复制UUID等号后面的

编辑fstab文件

nano /mnt/etc/fstab

按键盘 ctrl+X 再输入 y 然后 回车

编辑GRUB引导

mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
mount --bind /run /mnt/run

全部复制直接粘贴到终端回车即可,正常情况下指令没有任何输出。

进入克隆目标系统终端

chroot /mnt
grub-install /dev/sdb
grub-mkconfig -o /boot/grub/grub.cfg

然后输入 exit 或者 ctrl+D 退回原系统

取消挂载系统分区

umount -R /mnt

预计需要1分钟左右,执行完毕后没有任何输出

然后到这里就已经克隆完毕了,我们可以直接重启进入bios将引导切换到克隆到的目标磁盘或关机状态下拔掉当前系统盘。

验证系统

可以看到系统根目录已经是20G了

UEFI引导(sda迁移到sdb)

UEFI引导需要单独分区一个UEFI引导盘,所以会多一些步骤。但是大体与BIOS引导类似

操作过程

  1. 给克隆的目标磁盘进行分区
  2. 挂载新磁盘以便后续操作
  3. 复制EFI引导文件
  4. 复制系统文件
  5. 修改 fstab
  6. 重新生成GRUB引导文件

以下命令中 sdb sda 需要自行分别修改为克隆的目标磁盘,克隆原磁盘。

给克隆的目标磁盘进行分区

fdisk /dev/sdb

按顺序输入(创建EFI分区) n -> p ->回车(默认)->回车(默认)-> +94M -> y

按顺序输入(将EFI分区修改为EFI文件类型) t -> ef

按顺序输入(创建系统分区)n -> p ->回车(默认)->回车(默认)->回车(默认)-> w (保存分区)

格式化分区

mkfs.fat -F32 /dev/sdb1   # EFI分区
mkfs.ext4 /dev/sdb2       # 根分区

复制文件

复制EFI文件

mkdir -p /mnt/old-efi /mnt/new-efi
mount /dev/sda1 /mnt/old-efi
mount /dev/sdb1 /mnt/new-efi
rsync -av /mnt/old-efi/ /mnt/new-efi/
umount /mnt/old-efi /mnt/new-efi

复制系统文件

mkdir -p /mnt/sdb2
mount /dev/sdb2 /mnt/sdb2
rsync -aAXv -q --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /mnt/sdb2/

根据系统大小,需要10分钟左右,在此期间不要做其它操作!控制台没有任何反应属于正常情况!指令执行完毕后不会有任何输出

修改文件标识

blkid /dev/sdb1 /dev/sdb2

只需要复制UUID等号后面的。需要复制两个分区的UUID

nano /mnt/sdb2/etc/fstab

按键盘 ctrl+X 再输入 y 然后 回车

编辑GRUB 引导

mount /dev/sdb2 /mnt/sdb2
mount /dev/sdb1 /mnt/sdb2/boot/efi
mount --bind /dev /mnt/sdb2/dev
mount --bind /dev/pts /mnt/sdb2/dev/pts
mount --bind /proc /mnt/sdb2/proc
mount --bind /sys /mnt/sdb2/sys
mount --bind /run /mnt/sdb2/run

这里会有一个报错,告诉你已经挂载了,可以忽略掉

进入克隆目标系统终端

chroot /mnt/sdb2
grub-install --target=x86_64-efi --efi-directory=/boot/efi /dev/sdb
update-grub

然后输入 exit 或者 ctrl+D 退回原系统

取消挂载

umount /mnt/sdb2/dev/pts /mnt/sdb2/dev /mnt/sdb2/proc /mnt/sdb2/sys /mnt/sdb2/run
umount /mnt/sdb2/boot/efi
umount /mnt/sdb2

然后到这里就已经克隆完毕了,我们可以直接重启进入bios将引导切换到克隆到的目标磁盘或关机状态下拔掉当前系统盘。

验证系统

可以看到系统根目录已经是20G了

收藏
送赞 3
分享
https://www.xiaozhuhouses.asia/欢迎访问我的博客

1

主题

41

回帖

0

牛值

江湖小虾

2025-3-26 13:58:49 显示全部楼层
大佬,我的系统盘上开了存储空间1,有办法把系统盘迁到一个新的硬盘上,存储空间迁到另一个新硬盘上么
存储空间不能迁移 建议在其它硬盘创建个存储空间单独迁移数据 是最简单安全的  详情 回复
2025-3-26 17:49
2025-3-26 17:49:35 楼主 显示全部楼层
漠邪x 发表于 2025-3-26 13:58
大佬,我的系统盘上开了存储空间1,有办法把系统盘迁到一个新的硬盘上,存储空间迁到另一个新硬盘上么
...

存储空间不能迁移 建议在其它硬盘创建个存储空间单独迁移数据 是最简单安全的
https://www.xiaozhuhouses.asia/欢迎访问我的博客

3

主题

58

回帖

0

牛值

初出茅庐

2025-3-27 10:09:20 显示全部楼层
感觉好麻烦,这种有没有一键转移的吗,后期能做成这样的效果吗
这就要看官方了  详情 回复
2025-3-27 16:54
2025-3-27 16:54:41 楼主 显示全部楼层
邓先生 发表于 2025-3-27 10:09
感觉好麻烦,这种有没有一键转移的吗,后期能做成这样的效果吗

这就要看官方了
https://www.xiaozhuhouses.asia/欢迎访问我的博客

0

主题

4

回帖

0

牛值

江湖小虾

2025-4-9 21:00:49 显示全部楼层
GPT的盘怎么弄,先转化MBR?
顺便问一下,以前的系统盘是个大的系统+数据盘,现在大换小ssd后,如何把原来的机械硬盘的efi和系统删除,扩容数据sda3,把空间解放出来?  详情 回复
2025-4-9 21:36

0

主题

4

回帖

0

牛值

江湖小虾

2025-4-9 21:36:34 显示全部楼层
正南齐北 发表于 2025-4-9 21:00
GPT的盘怎么弄,先转化MBR?

顺便问一下,以前的系统盘是个大的系统+数据盘,现在大换小ssd后,如何把原来的机械硬盘的efi和系统删除,扩容数据sda3,把空间解放出来?

0

主题

4

回帖

0

牛值

江湖小虾

2025-4-9 21:42:05 显示全部楼层

mkdir -p /mnt/sdc2
mount /dev/sdc2 /mnt/sdc2
rsync -aAXv --inplace --delete
--exclude={"/dev/","/proc/","/sys/","/tmp/","/run/","/mnt/","/media/*","/lost+found"}
/mnt/sda2/ /mnt/sdc2/
复制系统盘,deekseek让这样改

命令是没问题 我自己用新装的系统测试了很多次 默认是把系统根目录的所有文件进行迁移  详情 回复
2025-4-10 11:49
开始没加mnt/sda2,直接sdc2满了也没考完,应该是作者遗漏了  详情 回复
2025-4-9 22:54

0

主题

4

回帖

0

牛值

江湖小虾

2025-4-9 22:54:08 显示全部楼层
正南齐北 发表于 2025-4-9 21:42
mkdir -p /mnt/sdc2
mount /dev/sdc2 /mnt/sdc2
rsync -aAXv --inplace --delete

开始没加mnt/sda2,直接sdc2满了也没考完,应该是作者遗漏了
2025-4-10 11:49:22 楼主 显示全部楼层
正南齐北 发表于 2025-4-9 21:42
mkdir -p /mnt/sdc2
mount /dev/sdc2 /mnt/sdc2
rsync -aAXv --inplace --delete

命令是没问题 我自己用新装的系统测试了很多次而且也有很多人测试是成功的 因为默认就是把系统根目录的所有文件进行迁移 你这个命令是改成按盘符内容迁移,逻辑上一样,估计是你系统盘分区可能不一样。
https://www.xiaozhuhouses.asia/欢迎访问我的博客
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则