为Ubuntu和Windows 7安装创建可引导(UEFI GRUB)USB


12

我想创建一个可引导EFI USB以安装Ubuntu&Windows 7(也许使用PartedMagic之类的实用程序)。我以前使用MultiSystem做到了。但是,我使用的是GPT,因此需要以EFI模式启动Windows安装才能在GPT系统上安装。我想我必须改为使用GRUB EFI?如果没有像MultiSystem这样的应用程序可以创建GRUB EFI可启动USB,我该如何自己创建一个?

我想将USB格式化为GPT,并在其上安装GRUB EFI(如何?)。然后,我需要配置GRUB EFI以加载Ubuntu和Windows 7在EFI中的安装?我该怎么办?

更新

这是我尝试过的

  • 在我的USB上创建2个分区(GPT,100 + MB FAT32(/ dev / sdc1,设置启动标志),其余FAT32,/ dev / sdc2,用于安装)
  • 将Windows 7和Ubuntu 11.10 iso提取到Installer分区中的2个不同文件夹中
  • 尝试使用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.

难道sudo modprobe efivars有没有输出,但得到了同样的错误,我认为它是因为我不是bootted到EFI Ubuntu的?

接下来,我将尝试使用USB启动盘创建程序以EFI模式引导到实时系统中,然后重试

更新

我很迷茫,是Windows 1st安装了故障吗?我用UNetBootIn格式化并制作了适用于Ubuntu Alternate的可启动USB,但它也因没有可用内核的相同错误而失败。如果我制作了Ubuntu桌面,我将无法配置apt源

ubuntu桌面的系统日志安装http://pastebin.com/CdbUPXax

我觉得我最好不要浪费时间并尽快恢复到MBR ...这将意味着我必须以某种方式备份所有数据1st ...这就是为什么我将其推迟到万不得已...任何想法吗?

更新

我尝试以BIOS模式(Non-EFI)引导Ubuntu 11.10 Alternate,安装正常,除非无法安装引导加载程序。它显示致命错误。然后,我通过以恢复模式启动USB来安装GRUB。可行,但无法启动。引导时显示空白屏幕。如果我尝试进入恢复模式(在安装了ubuntu的HDD上),键盘似乎出现故障,但是鼠标点亮。


你看过这个吗?unetbootin.sourceforge.net
Dustin L.

Easy2Boot可能就是您想要的。
SteveSi 2014年

当答案不仅仅是一个链接或对某些潜在解决方案的引用时,答案是最好的。显示如何做某事或至少描述一般方法的答案是我们在这里追求的。
slm

Answers:


8

我正在对此问题/答案进行更新。
这不会没有错误,但是当我使用@jiewmeng时,我发现目标是使用USB将Windows和Ubuntu安装到一个硬盘驱动器UEFI上。
花费了一段时间,我找到了解决方案,但我们需要清除问题和答案。
也许也可以回答原始问题,但由于目标更多是在安装方面,因此单引导UEFI USB似乎不那么重要。
我目前正在使用两个USB记忆棒,一个用于Windows,一个用于Ubuntu。
这是一个要尽快更新的在制品

我已经为此工作了几天,在这里闲逛了几个小时,最后有了一个USB,它将启动并提供Windows 7和Ubuntu的安装。
我的配置是64位特定的,您可以尝试更改以适应32位intall,但文件名有很多差异。如果需要32位,请跟进。那就是...

您无法从GPT格式的USB安装Windows 7。
您可以使用gdisk或parted来创建GPT USB,该USB 通过UEFI引导。
您将能够配置UEFI引导管理器以从USB加载Windows安装程序,但是安装程序将搜索执行安装所需的文件和数据,它将无法识别GPT USB,而会找到MBR USB 。

但是,这几乎没有什么意义,因为UEFI会查看MBR / GPT和EFI分区,请参阅UEFI引导上Wikipedia条目。

尽管USB使用std MBR,也可以通过UEFI将其安装到GPT磁盘上。

以下在64位UEFI Asus Sabertooth上使用64位安装进行工作。
每个主板上的固件都是非常特定的,每个主板UEFI固件搜索UEFI引导的方式有所不同。您的主板可能找不到启动数据,但以下各项在我的ASUS上均可使用。

这是我制作可引导USB的方法,该USB具有Windows 7 64位DVD的可安装副本和Ubuntu ISO(在此示例中为11.10 64位桌面iso)。

使用16G USB,这是我手头的全部...将
我的USB安装为/ dev / sdc,将相关引用更改为适合您USB的设备。
确保已安装7zip。

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  
}

瞧!使用grub作为启动管理器的工作USB记忆棒,允许通过UEFI安装将其安装到GPT磁盘。

如果您有任何错误,请随时与我联系,我会进行调查。


我在“ 此时,我已启动USB并安装Windows 7这一点成功地启动Windows安装程序。但是,当grub-probe --target=fs_uuid /media/INSTALLS_/efi/microsoft/boot/bootmgfw.efi 4983-DA78我尝试时得到“未知的额外参数“ 4983-DA78”。
揭梦

运行grub-probe提供了要使用的uuid。然后将其替换为以下文本。
2012年

该命令仅是grub-probe --target=fs_uuid /media/INSTALLS_/efi/microsoft/boot/bootmgfw.efi 无参数。值'4983-DA78'是grub-probe返回的UUID,供您在以下文本中用作YOUR_UUID
bsd

安装好的Windows,但当我尝试Ubuntu时,它说没有内核,有什么想法吗?
孟梦杰

您是否将Ubuntu安装到已经通过UEFI USB记忆棒安装了Windows 7的计算机上?
2012年

3

我会尽力回答这个问题,希望能为您指明正确的方向。

如您所知,只能通过EFI从GPT安装Win7 x64。更糟糕的是,您无法使用任何混合磁盘,因为Win7 x64将任何混合磁盘视为旧版MBR。因此,您必须将USB重新标记/重新分区为GPT。考虑到可移植性,这种类型的设置对于USB而言并不理想。我并不是说不要做一个,只是不希望有任何自动化工具存在。我实际上相信,在格式化驱动器之后,您也许可以使用多系统。如果自动安装的Grub2不支持EFI / GPT,请用正确的Grub2版本覆盖它。

因此,我认为您可能必须手动进行一些安装,而这整体而言超出了此答案的范围。虽然我应该可以让您入门...

使用当前版本的parted,将驱动器重新标记为GPT。假设磁盘位于/ dev / sdc,

 parted -s /dev/sdc mklabel gpt

现在,您必须对驱动器进行分区,最好是USB应该是单个主驱动器。对于我的可启动USB,我总是使用FAT32。

parted -s /dev/sdc mkpart primary fat32 0 -1

parted mkpart不会像创建FS那样创建FS mkpartfs。该partedDOC建议使用合适的mkfs,而不是parted的内置支持。

mkfs.vfat /dev/sdc1

现在,驱动器已准备就绪,可以处理数据。在这一点上,我希望您可以使用多系统来设置驱动器。

完成所有这些操作后...我们需要设置Grub2,显然,我们打算保留该配置。多系统可能具有从EFI引导的能力,但是无论如何,您都必须弄乱模块配置。

Grub2配置位于boot/grub/grub.cfg。您应该看到一些模块被注释掉了。我看过与GPT有关的内容,但对EFI不确定。我会进行一些测试,考虑阅读一些Grub2文档。

如果仍有问题,请回覆后续问题。


2

从上面的bdowning答案开始,然后在此处继续添加Parted Magic。

有两种解决方法,但最简单的方法是将pmagic目录从Parted Magic ISO复制到USB磁盘的根目录,然后为其添加菜单项:

menuentry "Parted Magic" --class gnu-linux --class gnu --class os {
  linux /pmagic/bzImage
  initrd /pmagic/initrd.img
}

(您可能需要阅读grub2手册才能完全使用它;前几天我使用grub1时,配置文件有所不同。)

缺点是您将Windows,Ubuntu和现在Parted Magic的文件混合到单个文件系统中。更糟糕的是,我们将它们直接放入EFI系统分区中。它可以工作,但是当然可能不适用于每种操作系统,因此我们真正应该做的是在每个操作系统的驱动器上创建一个单独的分区。这样做需要告诉grub搜索正确的文件系统,这可以由guid完成。每个文件系统在创建时都会得到一个唯一的GUID,因此您必须使用grub-probe(或类似工具)来查找该GUID。然后,将其放入grub配置中的搜索命令中:

menuentry "Parted Magic" --class gnu-linux --class gnu --class os {
    search --no-floppy --fs-uuid --set 8d2acb74-5216-4696-90a8-c76f92d5e4ee
    linux /pmagic/bzImage
    initrd /pmagic/initrd.img
}

希望这可以帮助。


多重引导可以工作,但是在bdowning的答案中,当我尝试安装Ubuntu时,出现内核不可用(替代)或无法配置apt(桌面)错误的情况(请参阅bdowning的文章和评论),如何解决该问题?我们还聊天@ chat.stackexchange.com
孟杰

2

在非UEFI机器中,我们可以使用GRUB2使USB记忆棒可启动。然后,我们可以在GRUB2中使用“ ntldr”命令从USB启动Windows。

menuentry 'Install Windows 8' {
 ntldr /bootmgr
}

在我的博客上查看完整的答案从Linux创建可启动的Windows USB


1
尽管此链接可以回答问题,但最好在此处包括对答案的更详细描述,并提供链接以供参考。如果链接断开,仅链接的答案几乎变得无用。
G-Man说'Reinstate Monica''Aug

1

为什么要麻烦GRUB2?它只会使事情复杂化。通过将UEFI Shell添加到ESP,只需使用EFI STUB方法从ESP引导Linux内核。


很高兴知道。在我的特定情况下(旧的macbook pro),它不起作用,因为Apple将这种专有的废话重命名为“ EFI”,并说他的引导程序是EFI。但是实际上,它是一个未记录的,有错误的,自定义的引导程序,只能引导osx和Windows。因此,我将LILO安装到一个分区中,并向该引导加载程序说谎,它是Windows。这样就行了。因此,“ EFI”以BIOS仿真模式引导LILO,而LILO引导内核。
彼得-恢复莫妮卡
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.