Skip to content

可选配置(进阶篇)

这一节的配置都是可选的。这些配置根据个人喜好进行配置,往往可以让系统变得更好用

如有需要可参阅 ArchWiki 相关内容 以及 rEFind 官方文档

除了 linux 内核,还有以下官方支持的内核可供选择:

  • linux-zen
    • 一些内核黑客合作的结果,是适合日常使用的优秀内核
    • 以吞吐量和功耗为代价来换取性能
    • 相对 linux 内核加入了 Fsync 功能,在一些采用 .Net 的 wine 游戏中会有 明显的性能提升
  • linux-lts
    • 包含了最新的长期支持的 Linux 内核和内核模块
    • 可以放心地在更长的时间内享受相同的内核版本
    • 若硬件不是最新硬件,则可以通过安装稍早的 LTS 内核提高稳定性
  • linux-hardened
    • 更加注重安全的内核,采用一系列 加固补丁 以减少内核和用户空间产生漏洞的风险
    • 启用了一些加固选项,比如用户命名空间(同时通过补丁禁用未授权用户的访问)、审计以及 SELinux
    • 需要注意的是使用此内核时部分软件包将不起作用
Terminal window
sudo pacman -S linux-zen linux-zen-headers

zen

lts

hardened

DKMS,即 Dynamic Kernel Module System。可以使内核变更(如升级)后自动编译模块,适配新内核。

  1. 为了让 GRUB 记住最后在 GRUB 引导菜单里选择的内核,以便在下次启动时自动使用对应的内核,需要编辑 /etc/default/grub 文件:
Terminal window
sudo vim /etc/default/grub

在适当位置添加或修改为如下三行:

Terminal window
GRUB_DEFAULT=saved # 默认使用保存的内核条目
GRUB_SAVEDEFAULT=true # 保存最后一个使用的内核条目
GRUB_DISABLE_SUBMENU=y # 可选,禁用 GRUB 子菜单,使选择内核的操作更简单

kernel-grub_step-0

kernel-grub_step-1

  1. 安装完毕后通过以下命令更新一下引导配置即可:
Terminal window
sudo grub-mkconfig -o /boot/grub/grub.cfg

kernel-grub_step-2

  1. rEFind 不需要做额外步骤,但会使用安装的最后一个内核作为默认内核。若想改变默认启动内核,需要修改 rEFind 配置文件:
Terminal window
sudo vim /boot/efi/EFI/refind/refind.conf

fold_linux_kernels false 前面的注释(#)去掉:

kernel-refind-0

诚然,这不是一个优雅(elegant)的方案。它会将所有的内核直接在引导菜单首页显示出来,而不是在子菜单选择。但 唯有这样 rEFind 才能记住最后选择的内核,而不是安装的最后一个内核。

  1. 重启,查看引导菜单效果:

kernel-grub_step-3

kernel-refind-1

  1. 使用以下命令查看内核:
Terminal window
uname -r

kernel-version-1

kernel-version-2

如有需要可以参阅 ArchWiki 相关内容

KDE 自身提供开箱即用的睡眠功能(sleep),即将系统挂起到内存,消耗少量的电量。休眠(hibernate)则会将系统挂起到交换分区或交换文件,几乎不消耗电量。

挂起到硬盘的映像大小一般最大为物理内存的 2/5,其值在 /sys/power/image_size 中确定。故若想使用休眠功能,Swap 大小一般设置为物理内存的 60% 即可。

  1. 通过以下命令确认 Swap 分区的 UUID
Terminal window
lsblk -o name,mountpoint,size,uuid

输出结果应类似:

Terminal window
NAME MOUNTPOINT SIZE UUID
sda 64G
├─sda1 /boot/efi 244M E519-88D8
├─sda2 1G
├─sda3 1G
├─sda4 4G 13ec7b86-eb9c-45a9-ae50-9606279b506a
└─sda5 /run/timeshift/backup 57.8G 860b9d91-590c-44d0-9d38-e4bf137b5d90
sr0 755.3M 2021-05-01-05-18-20-00

UUID 即 Universally Unique Identifier(通用唯一识别码),它可以帮助 Linux 系统识别一个磁盘分区而不是块设备文件。

  1. 使用 vim 编辑 /etc/default/grub 文件:
Terminal window
sudo vim /etc/default/grub

将相关参数加入内核启动参数中 —— 找到 GRUB_CMDLINE_LINUX_DEFAULT 一行,在其值后添加类似如下数据(根据你自身的 UUID 确定,参数之间以空格分隔):

resume=UUID=13ec7b86-eb9c-45a9-ae50-9606279b506a

hibernate_step-1

这个内核启动参数在步骤 17. 安装引导程序 中也修改过,现在应该稍微熟悉一点了吧?

  1. 接下来参考步骤 共同后续步骤 完成配置。
  1. 首先确认 Swap 文件所在分区的 UUID
Terminal window
sudo findmnt -no UUID -T /swapfile
  1. 确认 Swap 文件的偏移值:
  • Btrfs 文件系统
Terminal window
sudo btrfs inspect-internal map-swapfile -r /swapfile

命令返回结果即所需要的数据。

  • Ext4 文件系统
Terminal window
sudo filefrag -v /swapfile

第一行数据中的 physical_offset 一列的值即为所需要的数据。

  1. 随后将这两个参数加入内核启动参数中。通过 vim 编辑 /etc/default/grub 文件:
Terminal window
sudo vim /etc/default/grub

找到 GRUB_CMDLINE_LINUX_DEFAULT 一行,在其值后添加类似如下两项数据,内容根据刚才查询的 UUID 以及偏移值确定。参数以空格分隔:

resume=UUID=9a940a0a-fa72-4973-9ccc-3eb93ad73b37 resume_offset=6418432
  1. 接下来参考步骤 共同后续步骤 完成配置。
  1. 通过以下命令更新 GRUB 配置:
Terminal window
sudo grub-mkconfig -o /boot/grub/grub.cfg

hibernate-same_step-1

  1. 除此之外,还需配置 initranfsresume 钩子。使用 vim 编辑 /etc/mkinitcpio.conf
Terminal window
sudo vim /etc/mkinitcpio.conf

在 HOOKS 行添加 resume 值。注意,resume 需要加入在 udev 后。若使用了 LVM 分区,resume 需要加入在 lvm2 后:

hibernate-same_step-2

  1. 最后通过以下命令重新生成 initramfs 镜像:
Terminal window
sudo mkinitcpio -P

hibernate-same_step-3

  1. 重启电脑

  2. 重启之后可以开几个应用,尝试休眠:

try-1

try-2

try-3

虚拟机也可以通过休眠成功唤醒。

如有需要可以参考 ArchWiki 相关内容

相对于 GRUB,rEFind 的启动项更加灵活,相对来说也更加美观。

  1. 使用以下命令安装 refind 包:
Terminal window
sudo pacman -S refind

refind-1

  1. 使用以下命令安装 rEFInd 启动管理器到 EFI 分区:
Terminal window
sudo refind-install

refind-2

  1. 使用以下命令复查安装情况:
Terminal window
ls -ahl /boot/efi/EFI/

refind-3

输出结果应该可以看到 refind 文件夹。

  1. 使用 vim 编辑 /boot/efi/EFI/refind/refind.conf 文件:
Terminal window
sudo vim /boot/efi/EFI/refind/refind.conf

修改等待时间为合适数值(自定义):

Terminal window
timeout 5

refind-4

为了使 rEFInd 支持 archlinux 内核命名方案并使其与各自的 initramfs 镜像相匹配,取消注释并编辑 extra_kernel_version_strings 所在行:

Terminal window
extra_kernel_version_strings linux-hardened,linux-zen,linux-lts,linux

refind-5

为了允许在 Btrfs 子卷上进行内核自动检测,取消注释并编辑 also_scan_dirs,在最后加上 @/boot

Terminal window
also_scan_dirs boot,ESP2:EFI/linux/kernels,@/boot

refind-6

  1. 保存并退出 vim

  2. 若安装 archlinux 时按照步骤 7. 分区和格式化(使用 Btrfs 文件系统) 使用了 Btrfs 文件系统,为了让 rEFind 支持 Btrfs 子卷,需要使用以下命令手动为 rEFind 安装驱动:

Terminal window
sudo cp /usr/share/refind/drivers_x64/btrfs_x64.efi /boot/efi/EFI/refind/drivers_x64/btrfs_x64.efi

refind-7

  1. 使用以下命令复查安装情况:
Terminal window
ls -ahl /boot/efi/EFI/refind/drivers_x64/

输出如下:

Terminal window
-rwxr-xr-x 1 root root 114K Jun 15 23:00 /boot/efi/EFI/refind/drivers_x64/btrfs_x64.efi
  1. 使用以下命令在内核所在文件夹(/boot)创建包含内核参数的 refind_linux.conf 文件:
Terminal window
sudo mkrlconf --force
  1. 加载微码的内核参数不会自动创建。为了加载微码,需要手动编辑 /boot/refind_linux.conf
Terminal window
sudo vim /boot/refind_linux.conf

在内核参数中加入以下内容:

initrd=@\boot\intel-ucode.img initrd=@\boot\initramfs-%v.img # Intel
initrd=@\boot\amd-ucode.img initrd=@\boot\initramfs-%v.img # AMD
  1. 复查 /boot/refind_linux.conf 文件:
Terminal window
cat /boot/refind_linux.conf

输出如下:

Terminal window
"Boot with standard options" "root=UUID=860b9d91-590c-44d0-9d38-e4bf137b5d90 rw rootflags=subvol=@ loglevel=5 nowatchdog resume=UUID=13ec7b86-eb9c-45a9-ae50-9606279b506a initrd=@\boot\intel-ucode.img initrd=@\boot\initramfs-%v.img"
"Boot to single-user mode" "root=UUID=860b9d91-590c-44d0-9d38-e4bf137b5d90 rw rootflags=subvol=@ loglevel=5 nowatchdog resume=UUID=13ec7b86-eb9c-45a9-ae50-9606279b506a initrd=@\boot\intel-ucode.img initrd=@\boot\initramfs-%v.img single"
"Boot with minimal options" "ro root=UUID=860b9d91-590c-44d0-9d38-e4bf137b5d90"
  1. 重启电脑,便可以看到 rEFind 的引导页面了:

refind-8

这个选项是通过 GRUB 套娃启动系统。

refind-9

这个选项是通过 rEFind 直接引导进入系统。

关于 rEFind 的美化请参阅 系统美化