Archlinux和Win 10 在 UEFI下 双启动
实验室给配备了一台高性能的台式机,但是 UEFI 本身关不掉.而且有些操作还是离不开 Windows,于是便折腾 Win10 和 Archlinux 的双启动. 安装双系统基本上都是先装 Windows 再装 Linux 的.切忌这一点,安装顺序反了会很麻烦.
# Win10 配置
要安装 Archlinux,首先得对 Windows 进行相应的配置才行.Windows 的安装就不用我介绍了,大家基本都会的.
# UEFI Secure Boot
首先要进入 BIOS 把这个参数关掉,如果 BIOS 里面有快速启动之类的也关掉.
# Fast Start-Up
把 Win10 的这个加速系统开机的配置禁用掉,应该在电源管理界面可以禁用的.因为切换系统的话这个功能会导致你丢失数据.
# 制作 Arch 的 U 盘安装盘
如果你简单的使用dd (opens new window)命令就可以成功安装那是最好不过的了,但是有时候事与愿违...
假设你用 dd 刻录好之后,然后用电脑 U 盘启动,出现启动菜单 选择 Arch Linux archiso x86_64 UEFI CD
之后遇到黑屏的问题.
你可以先试试禁用 KMS (opens new window)
如果这个不行的话,那说明你得采用第二个办法了,使用 GRUB 进行引导启动盘.
# 手动制作启动盘
因为要使用 GRUB 进行引导,所以不能使用 dd 刻录,dd 刻录的 U 盘有写保护,我们无法修改.我们得手动制作安装盘 (opens new window)
# mkdir -p /mnt/{iso,usb}
# mount -o loop archlinux-2015.10.01-dual.iso /mnt/iso
# mount /dev/sdXn /mnt/usb
# cp -a /mnt/iso/* /mnt/usb
# sync
# umount /mnt/iso
2
3
4
5
6
光是拷贝还不行,我们还得有引导信息. 使用 syslinux 进行引导 (opens new window)
# cp -r /usr/lib/syslinux/bios/*.c32 /mnt/usb/arch/boot/syslinux/ ## copy ALL the *.c32 files from /usr/lib/syslinux/bios/, DO NOT SYMLINK
# extlinux --install /mnt/usb/arch/boot/syslinux/
2
如果你的 U 盘是 MBR 格式的,记得使用 fdisk 把当前分区设置为活动分区. fdisk /dev/sdX
然后输入 a
命令,选择要设置的活动分区.
还有 U 盘寻找启动分区是根据 U 盘的 label 标签来寻找的,确保你的卷标是 ARCH_2015XX
格式. 如果你不想用卷标的话,还可以用 UUID.
查找你 U 盘的 UUID 的命令是 sudo blkid
.
# 制作 GRUB standalone
这才只是手动制作好了启动 U 盘.你还要切换成 GRUB 引导.通过下面的命令制作出一个带有所有模块的 GRUB 引导文件.
grub-mkstandalone -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi --modules="part_gpt part_msdos" --fonts="unicode" --locales="en@quot" --themes="" -o "/tmp/grubx64_standalone.efi"
生成的 grubx64_standalone.efi 就是我们需要的文件.
然后回到我们的那个启动 U 盘.备份 EFI/boot/loader.efi 成 EFI/boot/gummiboot.efi.
拷贝两份 grubx64_standalone.efi. 分别命名为 EFI/boot/loader.efi 和 EFI/boot/bootx64.efi.
然后新建一个 EFI/boot/grub.cfg 把 wiki (opens new window)上的内容拷贝过去.记得替换掉 ARCH_YYYYMM 的值.
然后这样就应该用 grub 启动了. 如果你这样还是启动失败了, 得到了类似 invalid magic number
的错误.那只能说你跟我一样倒霉.
# 用 GRUB 挂载 ISO 进行引导
既然我们的 GRUB 是好的,那我们就用 GRUB 直接引导一个完整的 ISO 文件. 参考我之前发布的文章使用 GRUB2 引导 ISO 镜像 (opens new window).
在原有的 grub.cfg 上添加一个 menuentry.并把完整的 ISO 镜像拷贝到 U 盘里面.记得替换 UUID 和文件名.
menuentry "Archlinux-x86_64.iso" --class iso {
set isofile="/archlinux-2013.04.01-dual.iso"
search -s -f -n /archlinux-2013.04.01-dual.iso
probe --set=DB7B-2C3D -u $root
loopback loop /archlinux-2013.04.01-dual.iso
linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201304 img_dev=/dev/disk/by-uuid/DB7B-2C3D img_loop=$isofile earlymodules=loop
initrd (loop)/arch/boot/x86_64/archiso.img
}
2
3
4
5
6
7
8
这次总算可以引导出 arch 的安装环境了.接下来就是按照正常的步骤进行安装了. 在 Win 下直接使用Rufus (opens new window)刻录就没那么折腾了.
# 安装 Archlinux 之后配置双系统的 GRUB
到最后我们要安装 GRUB 到 UEFI (opens new window)上.如果你提前安装过 Windows,那么你肯定有 EFI 分区的.
# pacman -S dosfstools grub efibootmgr
# mkdir /boot/efi
# mount /dev/sda1 /boot/efi
2
3
把 EFI 分区挂载到系统上,然后安装 GRUB.
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub --recheck
# grub-mkconfig -o /boot/grub/grub.cfg
2
生成的 grub.cfg 里面并没有 Windows 的启动菜单,我们需要手动写.
menuentry "Microsoft Windows 10" {
insmod part_gpt
insmod fat
insmod search_fs_uuid
insmod chain
search --fs-uuid --set=root $hints_string $fs_uuid
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
2
3
4
5
6
7
8
$hints_string 的值是命令# grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
的输出.
$fs_uuid 的值是命令# grub-probe --target=fs_uuid /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
的输出.
替换这俩值,保存并退出即可.到此双系统配置完毕.最后别忘了进 BIOS 把第一启动项目设置为 GRUB.
# 参考
Preinstalled Windows 8.1 and Arch Linux dual boot (opens new window)
Unified Extensible Firmware Interface (opens new window)