Answers:
使用grub legacy或grub2引导实际的ISO无效,但是对于较旧的Windows版本(例如XP),可以将i386文件夹从ISO解压缩到USB记忆棒,然后使用grub4dos调用引导加载程序:
title windows installer via setupldr.bin
find --set-root /i386/setupldr.bin
chainloader /i386/setupldr.bin
要么
title windows installer via /bootsect.bin
find --set-root /i386/setupldr.bin
chainloader /bootsect.bin
这可能不适用于较新的Windows版本或较新的硬件,但也可以选择。
显然,使用grub2可以在Windows 7中运行:
menuentry "Windows 7 (bootmgr)" --class windows --class os {
insmod part_msdos
insmod ntfs
insmod ntldr
### A: either use this line or the next one, but not both
set root='(hd0,msdos1)'
### B:
### search --no-floppy --fs-uuid --set=root ____INSERT_PARTITION_UUID_HERE___
ntldr ($root)/bootmgr
}
选项A假设您的可启动USB记忆棒/ HDD是第一个设备,并且具有msdos样式的分区表。调整以匹配您的配置。如果引导设备具有GPT分区表,则很可能需要使用(hd0,gpt1)
(一般来说,设置GPT较为棘手)。
选项B使用驱动器的唯一UUID,可以在Linux上sudo blkid
或在OSX上使用例如diskutil info disk0s1
(或Disk Utility> Info)查看。
例如,最终条目看起来像这样:
menuentry "Windows 7 installer" --class windows --class os {
insmod part_msdos
insmod ntfs
insmod ntldr
search --no-floppy --fs-uuid --set=root 0E239BC6-F960-3107-89CF-1C97F78BB46B
ntldr /bootmgr
}
是的,您会认为类似的方法会起作用:
menuentry "Boot Windoze" {
search -f "--set-root /Winblows.iso"
drivemap "/Winblows.iso" '(hd32)'
drivemap '--hook' ''
set root='(hd32)'
chainloader +1
}
但是Windows只会对此表示怀疑。
如果碰巧至少有4GB RAM,则可以选择将整个DVD iso加载到内存磁盘中并启动。为此,请下载 SysLinux并将memdisk
文件解压缩到您的boot
目录中。然后,您需要向Grub2添加类似这样的代码
menuentry "Boot Windoze" {
search -f "--set-root /Winblows.iso"
insmod memdisk
linux16 /boot/memdisk iso
initrd16 /Winblows.iso
}
但是,我什至不去测试代码,因为将3+ GB的数据放入RAM完全是错误的(从概念的角度来看)。不,我确实想要您想要的东西,但是最后,我使用Windows 7 USB / DVD下载工具将Windows安装到USB的分区上,并进行了链式加载。抱歉,我看不到其他任何方式。
从技术上讲,.iso
无法从Windows的文件进行安装。您可以从.iso
using grub 引导,但是在那之后Windows将失去与已安装位置的联系,否则它将无法执行。因此grub
,Windows均应注意安装和引导。Windows目前不支持。
因此,您需要提取/复制.iso
分区内容到根目录,然后使用链式加载到分区的根目录中grub
。