刚好家里有台闲置的台式机正在装系统,所以实际做了个实验:
硬件配置:
CPU:Intel I5 760
主板:
华硕 P7P55D
显卡:技嘉 GV-N610-1GI
主硬盘:金士顿 (Kingston)V300 120G
内存:金士顿 4G*2
其它配置略
已经装好了 WIN7 的系统,手头有一个 320G 的移动硬盘,用 ghost 方式把整个 C 盘克隆到移动硬盘上,设置好 MBR,确认 WIN7 使用 MBR 方式启动,然后,重启。
开机的时候,一开始确实看到了 Windows 的开机画面,但很快,就看到了这个:
其实我之前分析的时候就想到了这个结果,做实验只是为了验证结果,符合预期。
然后开始讲讲为什么会这样,以下是技术分析,对技术不感兴趣的可以跳过:
Windows 启动的时候实际上分几个阶段进行的,boot 阶段的时候并不是完全运行在保护模式下,从 Windows 泄露的代码上看 boot 阶段会在实模式和保护模式下来回切换几次,因为此时没有磁盘驱动,Windows 需要使用 int13h 中断来读磁盘,当把主要的驱动都载入完以后,bootloader 会把控制权交给 Windows 内核 (NTOSKRNL.EXE),内核把通过 bootloader 载入的驱动都加载起来,开始进行后续的操作,而这个蓝屏就是死在这个位置上。
bootloader 需要加载开机必要的驱动,这个“必要”二字是很重要的,如果 bootloader 加载全部驱动,那么负担太重,如果什么都不加载,那么内核很难运行(Windows 不是宏内核结构,算是混合内核,内核文件不包括主要的驱动),所以 Windows 才有“最后一次正确配置”的说法,这个配置就是保存在注册表里的,bootloader 通过访问注册表决定载入哪些驱动。一个安装在硬盘的 Windows,最后一次正确的配置是,
通过 IDE 或者 SATA 控制器驱动来加载后续的文件
,但一个基于 USB 运行的 Windows 需要的是
通过 USB 控制器和 U 盘驱动来加载后续的文件
,但 bootloader 并不知道这一点,所以当把 Windows 移动到 U 盘上的时候,bootloader 需要的配置并没有改变,所以
当 bootloader 交出控制权的时候,Windows 的内核没办法访问磁盘,于是就挂了
。
===================操作系统的分割线===================
关于 Linux 是否能这么做,我并不看好,可以确定的是
内核镜像
能正确加载,但剩下的模块是否能加载就不好说了,Linux 里硬盘是 hda/sda 这些设备名,但 USB 好像不是这样的,各个路径能否正确挂载我觉得是一个疑问,有时间我会补充我 Linux 的实验,但折腾整个太麻烦了。
MacOS 我没有条件,估计需要用黑苹果了,手头没有条件。但是我认为同样困难很多。
===================总结的分割线===================
我认为大部分个人操作系统要这么做都很困难,原因是配置文件,大部分
操作系统
都需要保存上次的硬件配置,以备下次启动使用,而把操作系统从硬盘移动到 U 盘上,不仅仅是设备的变化,还包括加载这些设备的行为都发生的变化,SATA/IDE 驱动和 USB 驱动可完全不是一回事,除非更改配置文件。
===================补充的分割线===================
Windows8 有
WIN8 to go
,允许装到 U 盘上,但本质上说这是一个工具,而不是直接把 Windows8 复制到 U 盘上,所以这是有区别的,WIN8 to go 实际上是通过写入正确的配置(比如在启动阶段加载 USB 驱动)的方法来加载系统,跟直接复制 C 盘数据有本质区别。
补充一些其它的内容:
MBR 和 UEFI 方式有很大区别,有些 BIOS 里可以设置,UEFI 需要面对的困难更多。
WIN7 开始有时候会单独创建新分区放 bootloader 和 boot menu,如果是这样的话需要把这个分区也复制过去,否则是起不来的。
所谓的“复制”,应该是用 ghost 等软件克隆,直接复制是不可能的,并且由于权限的问题不是所有文件都会被正确复制。
Linux 需要 grub 等内容一起复制过去。
U 盘要足够大,最好用移动硬盘(Windows 里移动硬盘和 U 盘使用不同的上层驱动)。
能想到的就这么多。
最后,反对一下大部分回答,
题主问的是直接复制
,Windows 直接复制肯定是不行的。
===================Linux 实现结果的分割线===================
实验过程如下:
先在 SSD 上安装上 Linux,版本是 ubuntu 11.04,确认安装启动正常。
重启,用克隆软件 disk to disk 方式克隆磁盘到移动硬盘上,重启,禁用 SSD 主硬盘。
开机。
嗯?黑屏?啥情况???
多试了几次,还是黑屏。
好吧,使用工具修复以下 MBR,重启,还是黑屏??
好吧,动用神器,扇区对拷,把 SSD 上前 0x100000 字节复制到移动硬盘上。
重启,哎,有东西了,不过,不是你们想要的:
并且,键盘不能用(USB 键盘),别的没试反正卡在这里也是不动了。
实验到此为止。
结论:直接复制(硬盘对拷)不管是 Windows 还是 Linux 都是不行的,建议有条件的试试 MacOS 再做结论。我只相信实验数据。
另外,不要再强调 USB boot 这类东西了,题主问的不是这种情况,U 盘启动系统的方法很多,不用各位提醒我也是知道的