如何克隆带有多分区结构的双启动复杂磁盘至更大容量的第三方SSD
如何克隆带有多分区结构的双启动复杂磁盘至更大容量的第三方SSD
兄弟,我太懂你这种糟心情况了——刚发现常用的SSD坏了,还要把一堆分区的双启动系统(Linux多分区+Win11+另一个Ubuntu)完整移到更大的第三方SSD,确实得稳扎稳打。结合你提到的思路和我自己折腾双启动克隆的实操经验,给你捋个靠谱的落地方案:
一、先讲最稳妥的路子:用你现成的无错误dd镜像恢复
既然你手里有一个之前成功生成、没报错的旧盘dd镜像,那优先用这个!毕竟旧SSD已经有故障了,直接从它dd风险太高,搞不好半路崩了还耽误时间。
- 先找个Linux发行版的Live USB(比如Ubuntu安装盘就行),从它启动进入试用模式,别点“安装系统”——这样整个系统跑在内存里,不会占用你要操作的新旧硬盘。
- 先搞清楚所有磁盘的设备名,千万别搞混!用
lsblk或者fdisk -l命令查看,比如旧盘可能是/dev/sda,新盘是/dev/sdb,存镜像的外部盘分区是/dev/sdc1,记牢了,搞反设备名直接凉凉。 - 挂载存镜像的外部盘分区:
mount /dev/sdc1 /mnt/external - 执行镜像恢复命令:
dd if=/mnt/external/your-old-disk-image.img of=/dev/sdb bs=4M status=progress- 这里
bs=4M是用更大的块大小,能大幅提升克隆速度;status=progress能让你看到实时进度,不至于傻等。
- 这里
二、如果不想用旧镜像,就搞分区级克隆
要是你觉得镜像太旧,想同步最新的系统状态,那咱就退一步,逐个分区克隆,再补同步:
- 先给新盘做分区:确保新盘的分区表类型(GPT/MBR)和旧盘完全一致,然后照着旧盘的分区结构,在新盘上划出对应大小的分区(比如旧盘的/boot是
/dev/sda1,新盘就划个同样大小的/dev/sdb1,以此类推,包括swap、Windows分区、另一个Ubuntu的分区)。 - 逐个克隆分区:比如克隆/boot分区
dd if=/dev/sda1 of=/dev/sdb1 bs=4M status=progress,把所有分区都克隆一遍。 - 用
rsync同步最新文件:因为你说镜像有点旧,那挂载旧盘和新盘的对应分区,用rsync补全更新的内容。比如挂载旧盘的/分区到/mnt/old-root,新盘的/分区到/mnt/new-root,然后执行:rsync -aAXv /mnt/old-root/ /mnt/new-root/-a是归档模式,保留文件权限、时间戳等所有属性;-A保留ACL权限;-X保留扩展属性;-v能看到同步的文件列表,心里有数。
- 处理swap分区:克隆完swap分区后,记得用
mkswap /dev/sdbX(X是新盘swap分区的编号)重新初始化,然后用blkid查新swap的UUID,更新新盘系统里/etc/fstab文件里的swap UUID,不然启动会找不到swap。
三、搞定最头疼的Grub2引导
双启动系统最容易出问题的就是Grub,克隆完后必须折腾一下,不然大概率启动不了:
- 还是在Live USB的试用模式下,先挂载新盘的所有相关分区:
mount /dev/sdbX /mnt/new-root # 这里X是新盘的/分区编号 mount /dev/sdb1 /mnt/new-root/boot # 对应新盘的/boot分区 mount --bind /dev /mnt/new-root/dev mount --bind /proc /mnt/new-root/proc mount --bind /sys /mnt/new-root/sys - 进入新盘的系统环境:
chroot /mnt/new-root - 重新安装Grub到新盘:
grub-install /dev/sdb——注意这里是磁盘设备名(比如/dev/sdb),不是分区名! - 更新Grub配置:
update-grub,这个命令会自动扫描新盘里的所有系统(包括Win11和另一个Ubuntu),生成对应的引导项。 - 要是启动后Grub还是有问题(比如只进命令行,或者看不到Windows选项),别慌,再进Live USB重复上面的chroot步骤,多执行几次
update-grub,或者手动生成配置:grub-mkconfig -o /boot/grub/grub.cfg
四、最后利用新盘的额外空间
新盘比旧盘多了几千个扇区,克隆完后这些空间是未分配的,得利用起来:
- 用图形工具的话,直接打开Live USB里自带的
gparted,选中新盘,右键点击你想扩大的分区(比如/分区),选择“调整大小/移动”,把未分配的空间拉进去,点“应用”就搞定了。 - 要是习惯命令行,就用
parted或者fdisk调整分区大小,调整完之后,用resize2fs /dev/sdbX(如果是ext4文件系统)来同步文件系统的大小,这样系统就能识别到扩大后的空间了。
备注:内容来源于stack exchange,提问作者linuxisnotunix
相关产品推荐
相关产品推荐

