在 EFI 上双启动 Windows 7 和 Debian 之前我应该​​做什么?

Mr.*_*nce 10 debian system-installation uefi

我即将购买带有 EFI 固件的 Asus 主板,并希望在硬件到货后为自己安装 Windows 和 Debian 做好准备。我希望走过这条路的人能给我一些指点。

在尝试在基于 UEFI 的新系统上安装 Windows 7 和 Debian 之前,我应该做哪些准备工作?

Mar*_*rco 8

编辑:当我写这个答案时,很少有发行版带有 EFI_STUB 配置的内核,所以必须构建一个自定义的内核。如今,大多数发行版都提供了适当配置的内核,不再需要自定义构建。在这种情况下,“设置分区”“设置”部分是有趣的部分,可以跳过“要求”和“编译内核”。

我不知道 Windows 是如何处理 UEFI 的,但从 Debian 方面来看,它非常简单。

设置分区

使用 GPT 分区方案,而不是 MBR。

要从带有 UEFI 的 GPT 分区引导,需要一个专用的引导分区,称为EFI 系统分区(ESP)。这不是强制性的,但最兼容的方法是使用 FAT32 分区。大多数情况下,200 MiB 的大小应该没问题。

要将分区注册为 ESP,必须对其进行标记boot。与 MBR 方案相反,引导标志仅用于指示 ESP,而不是能够从中引导的分区。

UEFI 使用目录结构\EFI\<vendor>\<application>.efi来存储 UEFI 应用程序。目录分隔符由反斜杠表示,即使在 Linux 上也是如此。 可能是分发名称,实际值与 UEFI 无关。

应用程序可以是系统实用程序,如内存检查器或 UEFI shell。它也可以是操作系统加载程序或操作系统本身。这些应用程序需要在 UEFI 中注册才能在启动时启动。

要求

Linux内核版本>=3.3可以通过UEFI直接加载。内核可以充当它自己的加载器。这称为EFISTUB。需要以下内核配置。

CONFIG_EFI=y
CONFIG_EFI_PARTITION=y
CONFIG_EFI_STUB=y
CONFIG_RELOCATABLE=y
CONFIG_FB_EFI=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_EFI_VARS=m

具有这种配置的内核目前还没有在 Debian 稳定版中。您可以烘焙自己的内核,也可以使用实验树中的内核,在这种情况下,您可以跳过下一段。

编译内核

(可能不再需要,请参阅编辑)

如果您决定编译内核,这里是如何执行此操作的简短说明。如果遇到问题,可以使用大量有关如何编译内核的信息。

获取源

git 克隆 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

查看一个特定版本

git 结帐 v3.6

配置内核

制作菜单配置

进行系统所需的设置,或者如果您没有要自定义的内容,则保持原样。这会将内核配置写入文件.config

确保设置了上一段中的设置。选择CONFIG_INPUT_EVBUG=n. 否则您的日志将充满垃圾 GiB。

构建内核

INSTALL_MOD_STRIP=1 make-kpkg --uc --us binary-arch

包在父目录中创建。

安装内核

dpkg -i linux-image-3.5.0_Custom.deb linux-headers-3.5.0_Custom.deb

构建initramfs

mkinitramfs -o /boot/initrd.img-3.6.0-amd64 3.6.0

3.6.0 是内核版本。它默认为正在运行的内核,这不是一个好的选择,因为您仍在运行旧内核。

设置东西

为了能够引导 Linux 内核,它必须与 initramfs 一起复制到 ESP。鉴于 ESP 安装在/boot/efi

/boot/efi/EFI/debian/vmlinuz-3.6.0.efi
/boot/efi/EFI/debian/initrd.img-3.6.0

注意:为了确保与大多数系统的兼容性,efi必须将扩展添加到内核中。

现在可以在 UEFI 中注册内核。我们efibootmgr为此使用该工具。

echo "root=UUID=3a4287b6-b3a7-4721-da38-acc38a928278 ro rootfstype=ext4 add_efi_memmap initrd=\\EFI\\debian\\initrd.img-3.6.0" |
  iconv -f ascii -t ucs2 |
  efibootmgr \
    - 创建 \
    --gpt \
    --磁盘 /dev/sda \
    --第 4 部分 \
    --label "Debian Linux 内核 3.6.0" \
    --loader "\\EFI\\debian\\vmlinuz-3.6.0" \
    --写签名\
    --append-binary-args-

of 的参数--disk是内核所在的设备,而不是 ESP。 --part是内核所在的分区号。--label是 UEFI 启动菜单中的条目。

要查看可用条目的列表,只需efibootmgr不带参数启动即可。删除特定条目的语法

efibootmgr -b 条目(十六进制)-B

例如:

efibootmgr -b 001a -B

这些指令不处理内核更新的情况。内核和 initramfs 不会自动复制到 ESP。这可以使用一个简短的脚本来完成,该脚本将内核和 initramfs 复制到 ESP 并运行efibootmgr。这个脚本可以放置在/etc/kernel/postinst.d内核更新后自动启动。

注意: 不需要像 GRUB 这样的引导管理器,UEFI 本身充当引导管理器。

Linux方面就这些了,不知道加Windows需要什么。


Mei*_*Mei 2

确保 UEFI 不会将 Linux 锁定在您的计算机之外;BIOS 中可能有一个设置可以达到此效果。检查并确认确定。如果需要的话,我会通过手册和制造商仔细检查这一点。

对此进行了一些广泛的讨论;ZDNet 有几篇文章。这是2011 年 9 月 21 日的一篇文章和9 月 23 日的一篇文章。

其次,根据历史数据,您可能需要先安装Windows。传统上,Windows 只是假设它是计算机上唯一的操作系统 - 因此,它会清除与 Linux 相关的所有启动数据。UEFI 可能会有所不同,我不知道。