I want to do it because I want to install Windows 7 and my BIOS menu doesn't appear; it skips to grub2 menu at start, but that's another story... Is there a way to boot the Windows 7 installation iso directly from grub2?
4 Answers
Booting Windows XP with grub4dos
Booting the actual ISO with grub legacy or grub2 won't work, but with older windows versions (i.e. XP) it is possible to unpack the i386 folder from the ISO to the USB stick, and then use grub4dos to call the bootloader:
title windows installer via setupldr.bin
find --set-root /i386/setupldr.bin
chainloader /i386/setupldr.bin
or
title windows installer via /bootsect.bin
find --set-root /i386/setupldr.bin
chainloader /bootsect.bin
This might not work with newer windows versions or with newer hardware but there is also the option of..
Booting Windows 7 with grub2
With grub2 apparently something like this could work for 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 --set=root --fs-uuid ____INSERT_PARTITION_UUID_HERE___
ntldr ($root)/bootmgr
}
Option A assumes your bootable USB stick/HDD is the first device and has a msdos style partition table. Adjust to match your configuration. If your boot device has a GPT partition table, then most likely you'll need to use (hd0,gpt1) (GPT in general is trickier to set up).
Option B uses the drive's unique UUID, which can be seen on Linux with sudo blkid or on OSX with e.g. diskutil info disk0s1 (or Disk Utility > Info).
The final entry might look for example like this:
menuentry "Windows 7 installer" --class windows --class os {
insmod part_msdos
insmod ntfs
insmod ntldr
search --no-floppy --set=root --fs-uuid 0E239BC6-F960-3107-89CF-1C97F78BB46B
ntldr /bootmgr
}
- 1,564
- 19
- 20
One would assume that something like this should work:
menuentry "Boot Windoze" {
search -f "--set-root /Winblows.iso"
drivemap "/Winblows.iso" '(hd32)'
drivemap '--hook' ''
set root='(hd32)'
chainloader +1
}
But Windows will just balk at that.
If you have at least 4GB RAM, you can load the whole DVD iso in memdisk and boot off that. To do that, download SysLinux and extract the memdisk file into your boot directory. Then add to Grub2 something like this
menuentry "Boot Windoze" {
search -f "--set-root /Winblows.iso"
insmod memdisk
linux16 /boot/memdisk iso
initrd16 /Winblows.iso
}
...yet, after more testing, turned out this won't work with all windows versions; what does work is putting the Windows install on a dedicated partition on a USB drive using the Windows 7 USB/DVD download tool and chainloading the drive boot record in grub. There doesn't seem to be an easier way.
Technically installing from windows's .iso file can't be possible. You can boot from the .iso using grub but after that Windows will loss contact with the mounted location or it is not capable of it. So both grub & Windows should aware of mount and boot. Currently Windows doesn't support.
So you need to extract/copy the content of .iso to root of a partition and then chain-load into it using grub.
you can make an NTFS partition or format the USB drive to NTFS, extract the Windows 7/8/10/11 ISO file to this partition or the USB drive, make sure that all of the files extracted,sudo update-grub and reboot to see specific Windows boot menu entry which you can use to install windows.
You can install grub2 on the USB drive and make multiboot USB by Ubuntu without any special tool to install Ubuntu and Windows.
- 1,340