前言
Linux下有很多可以用于重启的命令,例如reboot
、shutdown -r
和sudo systemctl reboot
等。然而,前面列出的这些命令都是执行完整重启的命令,会关闭所有的进程,然后从UEFI引导程序重新启动系统,重启耗时较长。
本文简单介绍在Linux下快速重启的方案。
kexec
首先是较为知名的kexec
。kexec
是一个用于加载内核镜像的命令,可以在绕过UEFI引导程序的情况下直接由原内核加载新内核,从而实现快速重启。
安装
在Arch Linux下,可以用以下命令安装kexec-tools
:
sudo pacman -S kexec-tools
使用
如果没有使用systemd-boot
引导或使用了systemd-boot
但有多个启动条目,使用kexec
重启前需要先指定切换内核镜像路径,例如:
sudo kexec -l /boot/vmlinuz-linux-zen --initrd=/boot/initramfs-linux-zen.img --reuse-cmdline
然后使用kexec
重启:
sudo systemctl kexec
kexec
重启过程较为完整,包含了内核加载过程,可以用于更换新的内核。然而,在某些固件下,kexec
可能会因为兼容性问题而引发某些Bug,比如在笔者的设备上,UEFI固件升级以后使用kexec
重启会导致核显出现问题,GUI无法正常显示(透明度和鼠标的光标有Bug),但是笔者切换到Wayland后这一Bug消失了。
systemd
的软重启支持
systemd
从版本254
开始支持软重启,可以在不重新加载内核的情况下重启系统,从而实现快速重启。软重启只需要执行:
systemctl soft-reboot
软重启显著较其他重启方式快,它在关闭所有用户态进程后,直接将新的根文件系统挂载到/run/nextroot/
,然后在新的根文件系统中启动systemd
,从而实现快速重启。但是,这种重启方式不会重新加载固件和内核,在某些情况下可能会引发问题。