KISS: Arch EFISTUB ( 不使用GRUB,直接用主板作为引导器 )
archlinux吧
全部回复
仅看楼主
level 5
空色影像 楼主
2017年03月16日 09点03分 1
level 5
空色影像 楼主
2017年03月16日 10点03分 3
level 5
空色影像 楼主
2017年03月16日 10点03分 6
level 5
空色影像 楼主
尝试了一下 EFISTUB 方式,感觉熟悉以后配置起来并不很复杂。archwiki 的 UEFI ,EFISTUB 条目有一些介绍,但是没有经验的用户可能看起来并不容易。个人比较喜欢用 EFISTUB 启动方式,写一个简单的教程,供有需要的朋友参考。
1. EFISTUB简介:
较新的主板支持 UEFI 模式启动,简单的说,UEFI 可以看做主板内置的 GRUB。
图1上:传统的 GRUB 启动方式,BIOS --> GRUB -->各分区内系统 (sda1 sda2 sda3...)
图1下:新的 EFISTUB 方式启动,UEFI --> ESP各子目录内系统 (/ESP/Windows /ESP/Arch /ESP/Fedora ...)
2017年03月16日 10点03分 7
level 5
空色影像 楼主
图2:
可以看到 ESP 分区(分区格式为FAT32)的内容。
按照标准,各个操作系统把自己的操作系统启动文件放到 /EFI/操作系统名字 目录下面。
有些启动文件会放到其他地方,比如 Windows 会拷贝一份启动文件到 /Boot
UEFI主板内置启动管理器和存储器,可以给设定启动项,启动这些文件,相当于主板内置了 GRUB 和 grub.cfg 文件。
当然,ESP分区里也可以放别的东西,比如图片,歌曲,视频,都可以。它可以看做一个普通的 FAT32 分区。
2017年03月16日 10点03分 8
level 5
空色影像 楼主
安装 Arch 时如何设定 EFISTUB 模式呢?
只要你的主板支持,熟练以后其实设定过程很简单。安装到最后时,不用安装任何启动管理器,如 GRUB 等。
把 ESP 分区挂载到任何一个目录 xxx,建立一个 xxx/EFI/Arch 子目录,把 /boot 下面所有文件拷贝进去,然后用 efibootmgr 在主板存储器中添加一个启动项就可以了。(下面详细介绍如何添加启动项)
这样做不会对原来 Windows 内容有任何影响。
我们启动 Archlinux 后,并不需要挂载 ESP 分区。但是如果 pacman -Syu 升级了内核,那么需要再次手动挂载 ESP 分区并拷贝 /boot 文件。稍显麻烦,并且有时候会忘记做这一步,有可能启动失败。所以我们希望把 ESP 分区的 /EFI/Arch 目录挂载到 /Boot 上。但是挂载不能直接挂载目录,所以我们分两步,第一步,把冰箱们打开%¥#%¥ 把 ESP 分区挂载到随便一个目录,比如 /esp,然后把 /esp/EFI/Arch 挂载到 /Boot,这样就可以自动更新启动文件了。把目录挂载到目录术语叫 Bind Mount。
2017年03月16日 11点03分 9
把冰箱们打开%¥#%¥ 是什么?
2018年01月23日 14点01分
把冰箱们打开%¥#%¥
2018年01月23日 14点01分
第一步那里乱码了,不知道是什么东西,楼主更新下。我复制了都发不出来。
2018年01月23日 14点01分
乱码的是什么
2019年01月11日 14点01分
level 5
空色影像 楼主
2017年03月16日 12点03分 10
替代安装 GRUB 过程的,是如上一个命令,用来建立启动项。/dev/sda3 可以用 UUID=对应UUID数字 代替,但是 /dev/sda 不能用UUID, efibootmgr 在写入主板存储器时,会自动把前面的 -d /dev/sda -p -1 替换成真正的 UUID 数字。
2017年03月16日 12点03分
更正:大图中第一行最后应该加一个 -u 第二行最后应该加一个 双引号
2017年03月18日 08点03分
level 5
空色影像 楼主
运行上面命令后最好用 efibootmgr -v 查看一下是否有错误
2017年03月16日 12点03分 11
level 5
空色影像 楼主
最后修改下启动顺序,默认让 Arch Linux 先启动。
运行 efibootmgr ,查看启动顺序
如果想让 Arch (0001号)先启动,运行命令
efibootmgr -o 1 即可。可以用逗号分割,指定多个启动项的顺序,例如:
这样就完成了。
重启电脑,如果以上设置没有问题的话,Archlinux 将会顺利启动。
一般主板的启动管理器不会像 GRUB 那样弹出选择菜单,而是按照上面设定的自动引导第一个可用的系统, 如果想启动别的系统,比如 Windows,可以开机按 F12 键等选择启动磁盘的键(启动项与启动磁盘是在一起的)。
如果想默认让 Windows 启动,可以用上面方法( efibootmgr -o )修改,也可以直接进主板设定界面,像调整磁盘启动顺序一样调整 UEFI 启动项启动顺序。
2017年03月16日 12点03分 12
level 5
空色影像 楼主
下面是一个 fstab 例子,使用这样的挂载方式,可以自动更新 ESP 分区中的启动文件。
# /etc/fstab: static file system information
#
# <file system> <dir> <type> <options> <dump> <pass>
# 挂载 /esp 分区
UUID=3E72-6263 /esp vfat defaults 0 0
# Bind 挂载 /esp/EFI/arch 目录 到 /boot 目录
/esp/EFI/arch /boot none bind 0 0
#挂载 / 分区
/dev/sda3 / btrfs rw,relatime,ssd,space_cache,subvolid=5,subvol=/ 0 0
#挂载 /home 分区
/dev/sda4 /home ext4 rw,relatime,data=ordered 0 2
2017年03月16日 12点03分 13
level 5
空色影像 楼主
EFI分区按上述 fstab 挂载后的结果
2017年03月16日 12点03分 14
level 5
空色影像 楼主
一个实际的安装操作过程例子:
从官方教程最后的:# passwd 命令开始:
pacman -S efibootmgr
mkdir /esp
mount /dev/sda1 /esp
mkdir -p /esp/EFI/Arch
cp /boot/* /esp/EFI/Arch/
efibootmgr -d /dev/sda -p -1 -c -L "Arch Linux" -l /EFI/Arch/vmlinuz-linux -u
"root=/dev/sda3 rw initrd=/EFI/Arch/initramfs-linux.img" (此处为1行)
efibootmgr
efibootmgr -o 1
exit
reboot
启动完成后按上面例子修改 fstab 即可。
2017年03月16日 12点03分 15
level 5
空色影像 楼主
2017年03月16日 12点03分 17
level 5
空色影像 楼主
综上可以看到,加装操作系统时,只是需要将 EFI 启动文件拷贝到 ESP 分区,然后用 efibootmgr 命令添加一个启动项即可。
这样可以很方便的添加更多的操作系统,不管安装几个系统,它们都不会互相影响,后安装的系统不会使前面安装的系统无法启动。也很方便跨磁盘安装操作系统。
2017年03月16日 12点03分 18
level 6
讲的非常透彻,果然字不如表,表不如图。虽然和efistub、uefi条目其实内容一样。
# ls /dev/nvme*
/dev/nvme0 /dev/nvme0n1 /dev/nvme0n1p1... /dev/nvme0n1p7
问题是我-d /dev/nvme0n1 -p "p1" 或d /dev/nvme0n1 -p "p1" efibootmgr不认识(当然我还不知道裸设备块设备,没试过 -d /dev/nvme0 -p n1p1这种写法)
所以如果能手工做efibootmgr做的事情就好了
另外那三个文件特别是那个fallback我还是缺少认识,大神能够让我完全明白吗?
2017年03月16日 13点03分 19
不行试试 -d /dev/nvme0n1p1 -p 1 或 -d /dev/nvme0n1p -p 1 ,再不行可能时efibootmgr 的bug了,见下面回帖
2017年03月16日 13点03分
或 -d /dev/nvme0n1 -p 1
2017年03月16日 13点03分
1 2 3 尾页