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

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

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

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

答案1

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

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

设置您的分区

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

要从具有 UEFI 的 GPT 分区启动,必须​​使用专用的启动分区,称为电喷系统分区(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 checkout v3.6

配置内核

制作菜单配置

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

确保上一段中的设置已设置。选择也是有道理的CONFIG_INPUT_EVBUG=n。否则你的日志将充满 GiB 的垃圾。

构建内核

INSTALL_MOD_STRIP=1 make-kpkg --uc --us 二进制架构

这些包是在父目录中创建的。

安装内核

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 | iconv -f ascii -t ucs2 | iconv -f ascii -t ucs2
  efibootmgr \
    - 创造 \
    --gpt \
    --磁盘 /dev/sda \
    --第 4 部分 \
    --label "Debian Linux 内核 3.6.0" \
    --loader "\\EFI\\debian\\vmlinuz-3.6.0" \
    --写签名 \
    --追加二进制参数-

的参数--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 需要什么。

答案2

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

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

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

答案3

您不一定需要在 UEFI 上双重启动 Windows 和 Linux。跟着指导将 UEFI 转换为 MBR-BIOS 而不会丢失数据。

本指南是我制作的。此外,所引用的博客永远不会被删除。虽然我已经使用了大约 10 次,没有任何数据丢失,但我建议您在使用我的程序之前备份数据。

答案4

我可以衷心推荐Rod Smith 撰写的 UEFI 文章系列。他特别提到“混合”GPT-MBR 是一种“危险的黑客行为”,因为存在去同步的危险。

相关内容