如何在Linux环境下将无分区表备份的Windows GPT磁盘分区镜像重新组装为可引导完整镜像
如何在Linux环境下将无分区表备份的Windows GPT磁盘分区镜像重新组装为可引导完整镜像
嘿,我来帮你搞定这个问题!从你提供的镜像信息和挂载后的内容来看,我们已经能明确每个分区的作用,接下来一步步把它们组装回可引导的GPT磁盘:
第一步:先理清每个镜像对应的分区角色
先把5个镜像的定位搞清楚,这是后续操作的核心:
dev-sdc2.img:挂载后有EFI目录,是EFI系统分区(ESP)——GPT磁盘引导的核心组件,必须放在正确位置dev-sdc3.img:16MB大小且标记为data,这是微软保留分区(MSR),是GPT磁盘留给Windows做分区管理操作的预留空间dev-sdc4.img:体积最大的镜像,里面有Windows、Program Files等核心目录,毫无疑问是主系统分区(C盘)dev-sdc1.img和dev-sdc5.img:挂载后都有Recovery目录,属于Windows的恢复分区(一个可能是WinRE应急恢复环境,另一个是出厂系统恢复分区)
第二步:准备目标磁盘
⚠️ 重中之重:请确认你要写入的目标磁盘(比如/dev/sdX,X是你的磁盘字母)和原磁盘大小完全一致,而且磁盘上的所有数据都会被彻底清空!操作前务必做好重要数据的备份!
先通过以下命令确认目标磁盘的路径:
lsblk
找到你的目标磁盘(比如/dev/sdb),记好这个路径,后续所有操作都要用到它。
第三步:创建GPT分区表并匹配分区
我们用gdisk工具来创建GPT分区表,它能精确控制分区的类型和大小,比图形化工具更适合这类场景:
- 打开目标磁盘的gdisk操作界面:
sudo gdisk /dev/sdX
- 创建全新的GPT分区表:
- 输入
o,然后按回车确认(这会清空磁盘上所有现有分区表,谨慎操作!)
逐个创建对应分区,严格匹配每个镜像的类型和大小:
- 创建MSR分区(对应dev-sdc3.img):
- 输入
n新建分区 - 分区编号:直接回车用默认的
1 - 起始扇区:回车用默认值(2048)
- 结束扇区:输入
+16M(和镜像大小完全匹配) - 分区类型GUID:输入
E3C9E316-0B5C-4DB8-817D-F92DF00215AE(这是MSR分区的标准GUID)
- 输入
- 创建EFI系统分区(对应dev-sdc2.img):
- 输入
n新建分区 - 分区编号:回车用默认的
2 - 起始扇区:回车用默认值
- 结束扇区:输入
+100M(和你的镜像大小匹配) - 分区类型GUID:输入
C12A7328-F81F-11D2-BA4B-00A0C93EC93B(ESP分区的标准GUID)
- 输入
- 创建第一个恢复分区(对应dev-sdc1.img):
- 输入
n新建分区 - 分区编号:回车用默认的
3 - 起始扇区:回车用默认值
- 结束扇区:输入
+500M(和镜像大小匹配) - 分区类型GUID:输入
DE94BBA4-06D1-4D40-A16A-BFD50179D6AC(Windows恢复分区的标准GUID),接着输入c设置分区名称为Recovery
- 输入
- 创建主系统分区(对应dev-sdc4.img):
- 输入
n新建分区 - 分区编号:回车用默认的
4 - 起始扇区:回车用默认值
- 结束扇区:直接回车用剩余的大部分空间(因为这是最大的分区)
- 分区类型GUID:输入
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7(基本数据分区,对应Windows的C盘)
- 输入
- 创建第二个恢复分区(对应dev-sdc5.img):
- 输入
n新建分区 - 分区编号:回车用默认的
5 - 起始扇区:回车用默认值
- 结束扇区:输入
+550M(和镜像大小匹配) - 分区类型GUID:同样输入
DE94BBA4-06D1-4D40-A16A-BFD50179D6AC,设置名称为Recovery
- 输入
- 创建MSR分区(对应dev-sdc3.img):
保存分区表:
- 输入
w,然后按回车确认写入,gdisk会自动更新磁盘的分区表信息。
第四步:将镜像写入对应分区
用dd命令把每个镜像精准写入对应的目标分区,命令中的/dev/sdX1对应第一个创建的MSR分区,以此类推:
# 写入MSR分区 sudo dd if=dev-sdc3.img of=/dev/sdX1 bs=1M status=progress # 写入EFI系统分区 sudo dd if=dev-sdc2.img of=/dev/sdX2 bs=1M status=progress # 写入第一个恢复分区 sudo dd if=dev-sdc1.img of=/dev/sdX3 bs=1M status=progress # 写入主系统分区(C盘) sudo dd if=dev-sdc4.img of=/dev/sdX4 bs=1M status=progress # 写入第二个恢复分区 sudo dd if=dev-sdc5.img of=/dev/sdX5 bs=1M status=progress
bs=1M是为了提升写入速度,status=progress可以让你看到实时的写入进度。
第五步:修复Windows引导
分区写入完成后,大概率还无法直接引导,我们需要修复EFI引导项和Windows启动配置:
方法一:Linux下直接修复
- 先挂载主系统分区和EFI分区:
sudo mkdir -p /mnt/win /mnt/esp sudo mount /dev/sdX4 /mnt/win sudo mount /dev/sdX2 /mnt/esp
- 添加Windows EFI引导项:
# 查看当前已有的EFI引导项 sudo efibootmgr -v # 添加Windows引导项,指向ESP分区内的引导文件 sudo efibootmgr -c -d /dev/sdX -p 2 -L "Windows Boot Manager" -l "\EFI\Microsoft\Boot\bootmgfw.efi"
方法二:用Windows安装U盘修复(更稳妥)
如果Linux下的操作没成功,建议用Windows安装U盘启动:
- 选择「修复计算机」→「疑难解答」→「高级选项」→「命令提示符」
- 依次运行以下命令(注意盘符可能需要调整,
E:对应EFI分区,C:对应主系统分区):
bootrec /fixmbr bootrec /fixboot bootrec /scanos bootrec /rebuildbcd bcdboot C:\Windows /s E: /f UEFI
第六步:验证引导
完成所有操作后,重启电脑,在BIOS中选择「Windows Boot Manager」作为第一启动项,应该就能正常引导Windows了。
备注:内容来源于stack exchange,提问作者userho




