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


10

我准备购买配备EFI固件的华硕主板,并准备为硬件到来后安装Windows和Debian做准备。我希望走这条路的人能给我一些指导。

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

Answers:


8

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

我不知道Windows如何处理UEFI,但从Debian角度来看,这非常简单。

设置分区

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

要使用UEFI从GPT分区启动,必须​​使用专用的启动分区,称为EFI SYSTEM PARTITION(ESP)。这不是强制性的,但最兼容的方法是使用FAT32分区。在大多数情况下,200 MiB的大小应该可以。

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

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

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

要求

UEFI可以直接加载Linux内核版本> = 3.3。内核可以充当自己的加载器。这称为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 clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

签出一个特定的版本

git checkout v3.6

配置内核

制作menuconfig

进行系统上所需的设置,或者如果您无需自定义,则将其保留不变。这会将内核配置写入文件.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为此使用工具。

回声“ 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 \
    --disk / dev / sda \
    -第4部分
    --label“ Debian Linux内核3.6.0”
    --loader“ \\ EFI \\ debian \\ vmlinuz-3.6.0” \
    --write-signature \
    --append-binary-args-

的参数--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可能有所不同。


2

您不一定需要在UEFI上同时启动Windows和Linux。按照指南将UEFI转换为MBR-BIOS,而不会丢失数据。

本指南是我制作的。而且,所引用的博客永远不会被删除。尽管我已经使用了10次,而没有任何数据丢失,但是我还是建议您在使用该过程之前先备份数据。


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.