日常使用 Linux 系统,总是能够给我们带来不一样的惊喜!
现在在互联网公司中,很大一部分开发都是使用 Ubuntu
作为主力操作系统,进行日常开发和娱乐的,所以如果遇到机器重启的时候卡住也非常常见,尤其是喜欢尝鲜的 Ubuntu
党。这就带来了一个非常严重的问题,就是如何处理系统重启卡壳的问题呢?如果你所管理和操作的服务器也使用 Ubuntu
操作系统的话,就变得更为尴尬了!因为遇到操作系统的更新、版本 Bug
的修复、系统崩溃等问题,在无法解决或者必要时,还是会重启服务器的。
为了解决重启卡壳的这个问题,我们需要在操作系统引导的时候向 Linux
内核传递 reboot
这个参数,可以编辑 /etc/default/grub
这个服务引导文件,找到 GRUB_CMDLINE_LINUX_DEFAULT
参数,进行修改即可。
reboot=warm
-> don’t set the cold reboot flagreboot=cold
-> set the cold reboot flagreboot=bios
-> reboot by jumping through the BIOS (only for X86_32)reboot=smp
-> (reboot by executing reset on BSP or other CPU - only for X86_32)reboot=triple
-> force a triple fault - initreboot=kbd
-> use the keyboard controller. cold reset (default)reboot=acpi
-> use the RESET_REG in the FADTreboot=efi
-> use efi reset_system runtime servicereboot=pci
-> use the so-called “PCI reset register”, CF9reboot=force
-> avoid anything that could hang
正巧,前段时间我们有一批服务需要升级操作系统,在更新完毕之后重启服务器的时候,有几台机器直接给 hang
住了。而在系统重启时卡住了的话,大多数是因为 Linux
内核不知道如何继续执行重启的步骤了,即懵逼了。最后,只好让同事去机房处理了下。在这里记录下,防止遗忘和查找。
# 默认的Grub配置文件
$ cat /etc/default/grub
GRUB_DEFAULT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
......
# 修改之后的配置
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash reboot=force"
# 更改选项后使配置生效
$ sudo update-grub
# 验证配置是否生效
$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-5.4.0-52-generic ... ro quiet splash reboot=force