防止服务器重启卡壳


日常使用 Linux 系统,总是能够给我们带来不一样的惊喜!

防止服务器重启卡壳 - 我是一匹自由的马儿


现在在互联网公司中,很大一部分开发都是使用 Ubuntu 作为主力操作系统,进行日常开发和娱乐的,所以如果遇到机器重启的时候卡住也非常常见,尤其是喜欢尝鲜的 Ubuntu 党。这就带来了一个非常严重的问题,就是如何处理系统重启卡壳的问题呢?如果你所管理和操作的服务器也使用 Ubuntu 操作系统的话,就变得更为尴尬了!因为遇到操作系统的更新、版本 Bug 的修复、系统崩溃等问题,在无法解决或者必要时,还是会重启服务器的。

为了解决重启卡壳的这个问题,我们需要在操作系统引导的时候向 Linux 内核传递 reboot 这个参数,可以编辑 /etc/default/grub 这个服务引导文件,找到 GRUB_CMDLINE_LINUX_DEFAULT 参数,进行修改即可。

  • reboot=warm -> don’t set the cold reboot flag
  • reboot=cold -> set the cold reboot flag
  • reboot=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 - init
  • reboot=kbd -> use the keyboard controller. cold reset (default)
  • reboot=acpi -> use the RESET_REG in the FADT
  • reboot=efi -> use efi reset_system runtime service
  • reboot=pci -> use the so-called “PCI reset register”, CF9
  • reboot=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

文章作者: Escape
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !