Byt*_*der 8 reboot boot grub2 login uefi
Ubuntu 用户经常需要快速重启,例如在内核更新后或测试一些需要重启的设置时。
我想要一种方法(例如脚本),可以让我尽可能多地节省执行重启的时间。
在用户会话准备好之前,可以避免这些事情以减少重新启动时间:
也许还有更多的东西可以跳过以快速重启。
我在 Ubuntu Wiki 中看到了RapidReboot规范,但该页面的最后编辑时间为 2010 年 2 月 3 日。
但是,即使我们可能还不能正确地使用所描述的kexec来跳过固件初始化和其他内容,暂时预选 GRUB 条目并使用自动登录进行一次重新启动应该是可能的。我该如何设置?
我在带有 UEFI 的 Acer Aspire E5-773G 机器上使用 Ubuntu 16.04、64 位和 Unity DE、lightdm 和 GRUB 与 Windows 10(很快还有更多 Linux 发行版)进行双启动。
在这个“过于忙碌”的世界中,我们有时可以推迟重新启动,并且不想浪费 5 或 15 秒。当我第一次看到这个问题时,使用 SSD 并进行调整后,我的启动时间从 45 秒缩短到了 14 秒systemd。
最近,我购买了一台“现代”笔记本电脑,配备 NVMe M.2 Gen 3.0 x 4 SSD,Windows 读取速度高达 3.4 GB/s,Linux 读取速度高达 2 GB/s。所以应该会更快吧?不。它慢得令人痛苦:
$ systemd-analyze
Startup finished in 6.823s (firmware) + 4.447s (loader) + 3.467s (kernel) + 8.412s (userspace) = 23.151s
Run Code Online (Sandbox Code Playgroud)
这次其实是经过调整之后的。80 秒的情况要糟糕得多,因为 nVidia 和 Dell 选择切断驱动 HDMI 端口的 nVidia GTX970M 显卡上 HDMI 音频的电源。由于setpci需要这样的命令,这会导致“低图形错误”消息,并且您必须等待 20 秒鼠标指针才能继续。然后它将重新加载所有图形驱动程序并重新启动 lightdm。
“现代”笔记本电脑的另一个问题是 BIOS POST 需要 15 秒。调整 BIOS 以关闭硬件错误检查、关闭加载网卡启动驱动程序以及其他我不记得的调整,刚刚将 BIOS POST 时间更改为 6 秒。相比之下,使用传统 BIOS CSM 且未进行 BIOS 调整的“旧”笔记本电脑 BIOS POST 时间仅为几秒钟。
RapidReboot2010 年的项目ByteCommander 的帖子中提到的Ubuntu RapidReboot项目是从 2010 年开始的。该项目的基本原理总结如下:
基本原理
在某些情况下,我们可以放心地假设用户不想看到引导加载程序;在这些情况下,我们应该使用 kexec 来避免长时间的重新启动、BIOS POST 和引导加载程序时间。在最佳情况下,这可能需要 10 秒;但对于 SCSI 或 RAID BIOS 以及网络引导 rom,时间可能会攀升至 20、30 甚至超过 60 秒,即使在加载内核和看到登录屏幕之间的时间为 30-60 秒的情况下也是如此。
该项目的使用示例:
用例
- Bob 刚刚升级了他的内核;update-notifier 通知他必须重新启动才能使更改生效,并且“重新启动”按钮使用 kexec 来加快速度。
- Alice刚刚升级了dbus;update-notifier 告诉她重新启动,并使用 kexec。
- Seveas 在过去一个月中执行了多次更新,由于不同的程序使用不同的共享库副本,现在面临着三倍的内存压力。他决定重新启动以清除此问题,并使用“快速重新启动”来加快速度。
- Keybuk 刚刚安装了 Ubuntu Edgy 并想要启动它。LiveCD使用kexec加载目标内核和initrd;卸载所有基于磁盘的文件系统;同步; 然后使用 kexec 启动新系统而不是重新启动。
kexec是我们施展的魔法,无需 BIOS 开机自检和其他一些低级发现机制(例如 RAID 设置)即可重新启动。
CONFIG_KEXEC内核必须使用标志编译第一步是确保您的内核是使用以下CONFIG_KEXEC=y选项编译的:
$ uname -r
4.14.2-041402-generic
$ grep KEXEC= /boot/config-`uname -r`
CONFIG_KEXEC=y
Run Code Online (Sandbox Code Playgroud)
第一个命令uname -r是可选的,只是为了显示您使用什么内核启动。正如我们在第二个命令中看到的,内核是由 Ubuntu 团队编译的,并设置了必要的标志。不确定何时添加,但可能 <= 2012 年。
kexec-tools下一步是安装kexec用户空间的工具:
$sudo apt install kexec-tools
Run Code Online (Sandbox Code Playgroud)
正常的二进制下载后,您会看到以下屏幕:
我回答No的部分原因是这个错误报告表明该选项与systemd.
然后继续安装(如下所示的片段):
Unpacking kexec-tools (1:2.0.10-1ubuntu2.4) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for systemd (229-4ubuntu21) ...
Setting up kexec-tools (1:2.0.10-1ubuntu2.4) ...
Generating /etc/default/kexec...
Generating grub configuration file ...
(... CUT ...)
Found Windows Boot Manager on /dev/nvme0n1p2@/EFI/Microsoft/Boot/bootmgfw.efi
Found Windows Boot Manager on /dev/sda1@/efi/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for EFI firmware configuration
done
Processing triggers for systemd (229-4ubuntu21) ...
Run Code Online (Sandbox Code Playgroud)
kexec我们 ArchLinux 的团队有很棒的 kexec 文档,但它需要针对 Ubuntu / Debian 发行版进行修改。
sudo kexec -l /boot/vmlinuz-`uname -r` --initrd=/boot/initrd.img-`uname -r` --reuse-cmdline
sudo kexec -e
Run Code Online (Sandbox Code Playgroud)
从现在开始,每次您单击重新启动时都会出现它,它会自动以快速重新启动模式重新加载最后一个内核。
创建文件/etc/systemd/system/kexec-load@.service:
[Unit]
Description=load %i kernel into the current kernel
Documentation=man:kexec(8)
DefaultDependencies=no
Before=shutdown.target umount.target final.target
[Service]
Type=oneshot
ExecStart=/usr/bin/kexec -l /boot/vmlinuz-%i --initrd=/boot/initrd.img-%i --reuse-cmdline
[Install]
WantedBy=kexec.target
Run Code Online (Sandbox Code Playgroud)
然后启用要加载的内核的服务文件,例如简单地设置当前内核uname -r:
$ sudo systemctl enable kexec-load@`uname -r`
Created symlink from /etc/systemd/system/kexec.target.wants/kexec-load@4.4.0-101-generic.service to /etc/systemd/system/kexec-load@.service.
Run Code Online (Sandbox Code Playgroud)
然后到 kexec:
$ sudo systemctl kexec
Run Code Online (Sandbox Code Playgroud)
如果您正在youtube运行,则可能存在系统抑制剂,阻止您重新启动,在这种情况下请使用:
$ sudo systemctl kexec -i
Run Code Online (Sandbox Code Playgroud)
如果您希望为下一个 kexec 加载不同的内核,例如 4.12.2-041202-generic,请禁用当前内核的服务并为新内核启用该服务:
$ sudo systemctl disable kexec-load@`uname -r`
$ sudo systemctl enable kexec-load@4.12.2-041202-generic
Run Code Online (Sandbox Code Playgroud)
我现在必须发布这个答案,因为是时候启动、修复、启动、修复、重复。我有一个复杂的设置,其中systemd加载了五个nVidia驱动程序,我必须卸载它们,运行setpci以打开 HDMI 音频电源,重新加载 nVidia 驱动程序并重新启动 lightdm。可能需要一段时间才能锻炼出来。
在使这些cli方法起作用后,我将创建一个桌面快捷方式,以便在提示密码的情况下一键重新启动sudo。之后,我将创建一个yad对话框的桌面快捷方式,允许您从已安装的内核中进行选择以重新启动。类似于grub的高级选项菜单。
san*_*rys -2
如果你想部分重启你的计算机(而不是加速启动),我的理解是:Linux启动有3个主要部分:
仅重新启动步骤 3:
仅重新启动步骤 2 和 3:
我不知道如何从启动管理器重新启动 Linux
重新启动所有步骤
| 归档时间: |
|
| 查看次数: |
5636 次 |
| 最近记录: |