YGHMXFAL
2023-07-30 16:17:10 +08:00
BCD 是一个数据库,里面记录了(包括但不限于)WIN 系统启动时应该寻找哪一块磁盘上的哪一个分区作为 systemroot,这个 systemroot 也就是你启动成功之后所看到得 C 盘(当然在 WINPE 中也就是 X 盘,如果你没有特地魔改为其它盘符的话)
但是如何精确定位这个 systemroot(或者说任意磁盘的任意分区)呢?在典型地 UEFI+GPT 模式中,WIN 启动所需地 systemroot 的位置被记录于 BCD 数据库中---以 GUID 的形式---而且会自动显示为人类`读写友好`的盘符
如何理解`自动人类读写友好`呢?
比如说你有一个正常运行地 WIN 系统,它 C 盘有 251GB 大小,你手撸 BCDEDIT 枚举一下启动项,看到确实有某一个启动项视此时地 C 盘为 systemroot
然后你又在这台电脑上启动一个 WINPE,注意,此时那个 251GB 的分区,它未必就是 C 盘了(虽然绝大多数魔改 WINPE 都还会把那个 251GB 的分区分配为 C 盘,但是那是额外跑了开机脚本来理顺盘符,总之你要知道那不是 WINPE 的默认行为)
但是在 WINPE 中你再枚举启动项,肯定会发现也有一个启动项视`某一个分区`为 systemroot,再打开分区助手之类一看,这`某一个分区`大小为 251GB,而且不是 C 盘
总结:写入 BCD 数据库的一定是某一个分区的 GUID,但是显示给你看的一定是`该分区在被枚举时所分配得盘符`
在 UEFI+GPT 模式中,还要求存在一个 FAT32(好像 FAT16 也可以?我没实测过)分区来作为 ESP,此分区存储了启动系统所需地关键组件,而且这些`关键组件`都可以拿 BCDBOOT 从 systemroot 生成(插眼,此处也是楼主这问题的解决办法,文末就不再说一次了)
换言之,你想"先备份后还原系统"或者"迁移系统"的话,ESP 是"不需要"也"强烈不建议"备份得,ESP 应该由 systemroot 来全新生成其中所有启动所需关键组件(注意此处说得是微软原版 ISO 安装得系统,各种野鸡系统可能自作聪明移除了 systemroot 中用于生成 ESP 中的关键组件的相关资源)
理解了`启动时寻址使用 GUID 而非盘符`和`ESP 可由 systemroot 来生成`这俩点之后,我们再回到问题本身
楼主放得蓝屏图,大意就是啥"不可访问设备"是吧,前面说了,你克隆前后,BCD 数据库(作为一个文件而存在)肯定是没有变化,其中记录的 systemroot 的 GUID 肯定也没有变化
但是你此时想启动地 systemroot,和你的源 systemroot,其 GUID 一样吗?这取决于你"克隆"这个操作所使用得工具和方式,如果你不能保证这俩 GUID 一致,BCD 还在拿着旧 GUID 记录找原来的 systemroot,那必然就是"不可访问设备"了