我即将购买带有 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 是一种“危险的黑客行为”,因为存在去同步的危险。