为 Ubuntu 和 Windows 7 安装创建可启动 (UEFI GRUB) USB

为 Ubuntu 和 Windows 7 安装创建可启动 (UEFI GRUB) USB

我想创建一个可启动的 EFI USB 来安装 Ubuntu 和 Windows 7(可能使用诸如PartedMagic)。我这样做是使用多系统之前。但是,我使用的是 GPT,Windows 安装需要以 EFI 模式启动才能在 GPT 系统上安装。我想我必须使用 GRUB EFI 来代替?如果没有像 MultiSystem 这样的应用程序可以创建 GRUB EFI 可启动 USB,我该如何自己创建一个?

我想我会将 USB 格式化为 GPT,并在其上安装 GRUB EFI(如何?)。那么我需要配置 GRUB EFI 来加载 EFI 中的 Ubuntu 和 Windows 7 安装吗?我怎样才能做到这些?

更新

这是我尝试过的

  • 在我的 USB 上创建 2 个分区(GPT、100+MB FAT32(/dev/sdc1,设置启动标志),其余 FAT32、/dev/sdc2,用于安装)
  • 将 Windows 7 和 Ubuntu 11.10 iso 提取到安装程序分区的 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输出但得到相同的错误,我认为这是因为我没有启动到 EFI Ubuntu?

接下来,我将尝试使用 USB Startup Disk Creator 以 EFI 模式启动到实时系统,然后重试

更新

我很迷茫,是Windows安装第一个错误吗?我使用 UNetBootIn 格式化并制作了 Ubuntu Alternate 的可启动 USB,但它也失败了,并出现同样的错误,即没有可用内核。如果我制作了 Ubuntu 桌面,我将无法配置 apt 源

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

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

更新

我尝试在 BIOS 模式(非 EFI)下启动 Ubuntu 11.10 Alternate,安装良好,但无法安装启动加载程序。它说致命错误。然后我通过在恢复模式下启动 USB 来安装 GRUB。可以工作,但无法启动。启动时出现空白屏幕。如果我尝试进入恢复模式(在安装了 ubuntu 的 HDD 上),键盘似乎无法使用,但鼠标有灯。

答案1

我正在更新这个问题/答案。
这并不是没有错误的,但当我与 @jiewmeng 合作时,我发现目标是使用 USB 将 Windows 和 Ubuntu 安装到一个硬盘驱动器 UEFI 上。
我花了一段时间才找到解决方案,但我们需要清理问题和答案。
也许最初的问题也可以得到回答,但由于目标更多地在安装方面,单引导 UEFI USB 似乎不太重要。
我目前使用两根 USB 棒,一根用于 Windows,一根用于 Ubuntu。
这是一个待更新的 WIP

我已经为此工作了几天,到处闲暇,终于有了一个 USB,可以启动并提供 Windows 7 和 ubuntu 的安装。
我的配置是 64 位特定的,您可以尝试更改以适应 32 位安装,但文件名有很多差异。如果需要32位请跟进。那是说...

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

然而,这并不重要,因为 UEFI 会查看 MBR/GPT 和 EFI 分区,请参阅UEFI 启动的维基百科条目

尽管 USB 使用标准 MBR,但仍可以通过 UEFI 安装到 GPT 磁盘。

以下内容在 64 位 UEFI Asus Sabertooth 上使用 64 位安装进行工作。
每个主板上的固件都非常具体,并且每个主板 UEFI 固件搜索 UEFI 启动的方式也不同。您的主板查找启动数据时可能会遇到问题,但以下内容适用于我的华硕。

以下是我如何使用 Windows 7 64 位 DVD 的可安装副本和 Ubuntu ISO(在本例中为 11.10 64 位桌面 iso)制作可启动 USB。

使用 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 磁盘。

如果您有错误,请随时给我留言,我会进行调查。

答案2

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

如您所知,只能通过 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 应该是单个主驱动器。我总是使用 FAT32 作为我的可启动 USB。

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

parted mkpart不会像以前那样创建 FS mkpartfs。 DOCparted建议使用正确的mkfs,而不是parted内置的支持。

mkfs.vfat /dev/sdc1

您的驱动器现已准备就绪,可以处理数据了。此时我希望您可以使用多系统来设置您的驱动器。

完成所有这些后...我们需要设置 Grub2,显然我们打算保留配置。多系统可能能够从 EFI 启动,但无论如何你都必须修改模块配置。

Grub2 配置位于boot/grub/grub.cfg.您应该会看到一些模块已被注释掉。我看过一篇与 GPT 相关的文章,但不确定 EFI 的情况。我会查看并做一些测试,考虑阅读一些 Grub2 文档。

如果您仍有任何问题,请通过后续问题进行评论。

答案3

从上面 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
}

希望这可以帮助。

答案4

为什么要费心使用 GRUB2?它只会让事情变得复杂。只需使用 EFI STUB 方法通过将 UEFI Shell 添加到 ESP 即可从 ESP 引导 Linux 内核。

相关内容