具体折腾操作过程我自己也不记得了,再加上 LZ 用了比较不正常的东西……所以问题很可能是重现不了了。
宿主 Win10 x64 1803,VirtualBox 5.2.16 。
(还用了 VBoxHardenedLoader 来避免虚拟机检测,为了这个,宿主机还用 UPGDSED 关掉了 DSE 和 PatchGuard )
虚拟机用的是 Win7 x64,虚拟磁盘用的是微软的 VHD 格式,而不是 VBox 原生的 VDI 格式。
因为没装虚拟机附加组件,不方便拷文件,就用了一种蛋疼的办法:
首先让虚拟机正常关机,然后在宿主机上双击挂载 Snapshots 里的 VHD,挂载完就可以执行拷进 /拷出文件,以及其他操作(比如先用 sdelete 把虚拟盘的可用空间清零,再把 VHD 压缩)。操作完后右键卸载 VHD,就可以再启动虚拟机了(如果不卸载也不能启动虚拟机,提示文件被占用)。
来来回回这么折腾几次后,似乎就开始出问题了:宿主机拷进 VHD 的文件,在虚拟机启动后,似乎是损坏的。
而且,有的时候(我记得好像是刚刚新建快照的时候),VBox 新建的差分 VHD 在宿主机是不能双击挂载的,会报错;只有正常启动过一次虚拟机、再关机,那个 VHD 才能正常在宿主机双击挂载。
光是这个可能还不算什么……有一次,虚拟机刚开始启动时,居然直接弹出“老人坐禅”的报错窗口,崩溃掉了……
我当时那个懵逼啊……虚拟机里各种折腾,比如 bootsect /nt60 sys /mbr,没用……最后发现问题好像是在 100MB 的那个“系统保留”分区上——这个分区是活动分区,存放的是 bootmgr、BCD 等引导文件——我把它格式化一次(非快速格式化),再重新 bcdboot,貌似就好了。
总之……我猜,要么是因为我在宿主机双击挂载 VHD 这个动作触发了 VBox 的 Bug ;要么就是 UPGDSED、VBoxHardenedLoader 的魔改导致了问题。
发到这里的意义可能也不是很大,大概只是想问问有没有别人也试过宿主机双击挂载 VHD 这种骚操作,然后碰到问题的……
此外,出现这个情况有点让我担心 VBox 的可靠性,因为我曾在一位大佬的博客上看到过疑似 VBox 出问题导致数据损坏的案例:
https://ring0.me/2015/05/recover-code-from-corrupt-git-repo/
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/481285
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.