我有以下设置:我在 dos 磁盘标签(不是 gpt)中安装了 win7 ultimate。在磁盘末尾的一些剩余空间上,我安装了 Arch Linux。我使用以下命令在 Arch Linux 上安装了 grub:
grub-install --target=i386-pc --disk-module=native /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg
我必须补充一点,--disk-module=native
因为 Linux 位于 /sda 的末尾,而 /sda 是一个大磁盘(250G),否则将无法加载。
Linux 正确启动,但 Windows 无法启动,并且出现以下错误。
Windows has encountered a problem communicating with a device connected to your computer.
This error can be caused by unplugging a removable storage device such as an external USB drive while the device is in use, or by faulty hardware such as a hard drive or CD-ROM drive that is failing. Make sure any removable is properly connected and then restart your computer
If you continue to receive this error message, contact the hardware manufacturer
File: \Boot\BCD
Status: 0xc00000e9
Info: An expected I/O error has occurred
为了同时启动这两个系统,我必须恢复标准 Win7 MBR 并在单独的 USB 闪存盘上安装 grub,这样我才能启动 Linux。关于 Windows 启动错误的真正含义以及如何避免它,有什么建议吗?当我尝试从 grub 启动 Windows 时,我没有连接 USB 设备,并收到此错误。我只想使用相同的 MBR 启动 Windows 和 Linux。
当然,这不是损坏的磁盘,因为只要我运行ms-sys --mbr7 /dev/sda
恢复 Win MBR,Windows 仍然会启动。这是一个全新的固态磁盘,除了启动之外,我没有遇到其他问题。顺便说一句,Windows 安装盘上的启动修复选项无法恢复 Win MBR!如果不是因为 linux ms-sys,我不得不重新安装整个 Windows 才能恢复 MBR……
Windows 是不是一个嫉妒心很强的操作系统,如果你更改了 MBR 中的小程序,它就无法再启动了?有什么解决方法吗?
PS:这是我的 grub.cfg 的一部分,它应该加载 Windows。它由 grub-mkconfig 自动生成:
### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows 7 (loader) (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-1A30667530665831' {
insmod part_msdos
insmod ntfs
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 1A30667530665831
else
search --no-floppy --fs-uuid --set=root 1A30667530665831
fi
parttool ${root} hidden-
chainloader +1
}
### END /etc/grub.d/30_os-prober ###