Ubuntu – Create a Bootable (UEFI GRUB) USB for Ubuntu & Windows 7 Install

bootablesystem-installationUbuntuusbwindows

I want to create a Bootable EFI USB to install Ubuntu & Windows 7 (maybe with utilities like PartedMagic). I did that using MultiSystem previously. However, I am using GPT and Windows install needs to be launched in EFI mode to install on GPT system. I suppose I must use GRUB EFI instead? If theres no app like MultiSystem that creates a GRUB EFI Bootable USB, how can I create one myself?

I suppose I will format my USB as GPT, and install GRUB EFI on it (how?). Then I need to configure GRUB EFI to load Ubuntu & Windows 7 install in EFI? How can I do these?

UPDATE

Here's what I tried

  • Create 2 partitions on my USB (GPT, 100+MB FAT32 (/dev/sdc1, set boot flag), The rest FAT32, /dev/sdc2, for installs)
  • Extract Windows 7 & Ubuntu 11.10 iso's into Installer partition, 2 different folders
  • Tried using sudo elilo -b /dev/sdc1 –autoconf –efiboot -v`

jiewmeng@JM:~$ sudo elilo -b /dev/sdc1 --autoconf --efiboot -v
elilo: backing up existing /etc/elilo.conf as /etc/elilo.conf-
Loaded efivars kernel module to enable use of efibootmgr
elilo: Checking filesystem on /dev/sdc1...
elilo: Mounting /dev/sdc1...
e    lilo: 44298KB needed, 78781KB free, 42192KB to reuse
elilo: Installing primary bootstrap /usr/lib/elilo/elilo.efi onto /dev/sdc1...
elilo: Installing /tmp/elilo.k8NWXX on /dev/sdc1...
elilo: Installing /vmlinuz on /dev/sdc1...
elilo: Installing /vmlinuz.old on /dev/sdc1...
elilo: Installing /initrd.img on /dev/sdc1...
elilo: Installing /initrd.img.old on /dev/sdc1...
elilo: Updating EFI boot-device variable...
Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
Try 'modprobe efivars' as root.
Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
Try 'modprobe efivars' as root.
elilo: An error occured while updating boot menu, we'll ignore it
Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
Try 'modprobe efivars' as root.
Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
Try 'modprobe efivars' as root.
Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
Try 'modprobe efivars' as root.
elilo: Installation complete.

Did sudo modprobe efivars got no output but got the same error, I think its because I am not bootted into EFI Ubuntu?

Next, I'll try using USB Startup Disk Creator to boot into a live system in EFI mode to try again

UPDATE

I am so lost, is Windows installed 1st the fault? I formatted & made a bootable USB for Ubuntu Alternate with UNetBootIn, and it failed too with same error of no available kernel. If I made a Ubuntu Desktop I will get cannot configure apt sources

The syslog for ubuntu desktop install http://pastebin.com/CdbUPXax

I feel I better not waste time and revert back to MBR soon … that will mean I have to somehow backup all my data 1st … which is why I am delaying it to the last resort … any ideas?

UPDATE

I tried booting Ubuntu 11.10 Alternate in BIOS mode (Non-EFI), installed fine except I cannot install a boot loader. It says fatal error. I then installed GRUB by booting the USB in recovery mode. Works but it does not boot. Gives a blank screen on boot. If I try to enter recovery mode (on HDD, where ubuntu is installed), keyboard seems to fail, mouse have light though.

Best Answer

I'm working on an update to this question/answer.
This doesn't work without errors, but as I worked with @jiewmeng I uncovered that the goal was to use a USB to install both Windows and Ubuntu onto one hard drive, UEFI.
It has taken a while and I've found the solution but we need to clean the question and answer.
Maybe the original question can be answered as well but since the goal was more on the install side the single boot UEFI USB seemed less important.
I'm presently using two USB sticks one for Windows, one for Ubuntu.
This is a WIP to be updated ASAP

I've been working on this for a few days, spare hour here and there and finally have a single USB, that will boot and offer installation of windows 7 and ubuntu.
My config is 64 bit specific, you could try and change to accomodate a 32bit intall but there are many differences in filenames. Please follow up if you need 32bit. That said...

You cannot install Windows 7 from a GPT formatted USB.
You can use gdisk, or parted, and create a GPT USB, which will boot via UEFI.
You'll be able to configure the UEFI boot manager to load the Windows installer from the USB but the installer will search for files and data needed to perform the installation and it won't recognize the GPT USB, while it will find an MBR USB.

However, this is of little consequence as UEFI looks at the MBR/GPT and the EFI partition, see the Wikipedia entry on UEFI Booting

In spite of using a std MBR for the USB, one can install via UEFI to a GPT disk.

The following worked using 64bit installs, on 64bit UEFI Asus Sabertooth.
The firmware on each motherboard is very specific and each motherboard UEFI firmware searches for UEFI boot differently. You may have issues with your motherboard finding boot data, but the following works on my ASUS.

Here's how I made a bootable USB with an installable copy of the Windows 7 64bit DVD and an Ubuntu ISO (in this example, the 11.10 64bit desktop iso).

Using an 16G USB, which is all I had at hand...
my USB installed as /dev/sdc, change the relevant references to the appropriate device for your USB.
Make sure you have 7zip installed.

fdisk /dev/sdc
create new MBR, 'o' command
create new partition, part 1, size 8G, type ef, set bootable, write
mkfs.vfat -F32 /dev/sdc1
mkdir /mnt/USB
mount /dev/sdc1 /mnt/USB
insert Windows 7 x64 DVD, again, mine appeared as /media/UDF\ Volume, you need to change references below
# Extract/Copy the entire Windows DVD to the USB
cp -r /media/UDF\ Volume/* /mnt/USB
# I don't know what effect the following rename has, I copied blindly from another webpage.
mv /mnt/USB/sources/ei.cfg /mnt/USB/sources/ei.cfg_
cd /mnt/USB/efi/microsoft/boot/
7z e /mnt/USB/sources/install.wim 1/Windows/Boot/EFI/bootmgfw.efi
cp -r /mnt/USB/efi/microsoft/boot /mnt/USB/efi/
mv /mnt/USB/efi/boot/bootmgfw.efi /mnt/USB/efi/boot/bootx64.efi
# At this point I booted the USB, and installed Windows 7 to a GPT SSD
# Upon reboot I noticed the Windows Boot loader in my UEFI boot list (actually it made itself 1st).
# so, here we have a standalone Windows7 UEFI installer that will function correctly (64bit ASUS, at least).
# Now, on to adding Ubuntu
cd /mnt/USB
7z x /path2iso/ubuntu-11.10-desktop-amd64.iso
# If 7z finds prexisting files with the same name, just allow always overwrite
# (Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename all / (Q)uit? A

# At this point I booted the USB, and installed Ubuntu x64 to a GPT SSD
# we have a standalone Ubuntu 64bit installer that install Ubuntu 64

# Now, on to add a boot manager that will allow us to select between Windows 7 and Ubuntu

# Get the target UUID of the USB partition, using either blkid or the following command
grub-probe --target=fs_uuid /mnt/USB/efi/Microsoft/Boot/bootmgfw.efi  
will print YOUR_UUID # Substitute into the following references to YOUR_UUID

# Append the following menuentry to /mnt/USB/boot/grub/x86_64-efi/grub.cfg

menuentry "Microsoft Windows x86_64 UEFI-GPT Setup" {
    insmod usbms  
    insmod part_gpt  
    insmod part_msdos  
    insmod fat  
    insmod search_fs_uuid  
    insmod chain  
    search --fs-uuid --no-floppy --set=root YOUR_UUID # <- CHANGE THIS TO YOUR UUID
    chainloader (${root})/efi/Microsoft/Boot/bootmgfw.efi  
}

And voila! A working USB stick that uses grub as boot manager, allowing installation to GPT disks with UEFI install.

If you have an errors, don't hesitate to msg me, and I'll look into it.

Related Question