[内容] Linux 内核奔溃后临时自动恢复的开启

方法一:配置魔术键

1.1 修改 /etc/sysctl.conf 配置文件

# vim /etc/sysctl.conf

添加以下内容:

......
kernel.panic = 20
kernel.sysrq = 1


补充:
这里的 kernel.panic = 20 参数代表系统奔溃后系统会自动重启
这里的 kernel.sysrq = 1 参数代表系统奔溃后系统会可以使用鼠标和键盘

1.2 让 Linux 内核奔溃后临时自动恢复的设置生效

# sysctl -p /etc/sysctl.conf

1.3 下次系统再卡死时

同时按下 “Left” 键和 “Alt” 键和 “Print Screen” 键和 “c” 键,此时系统内核会自动生成 vmcore 文件,并自动重启系统

方法二:配置 NMI

2.1 配置 /etc/sysctl.conf 配置文件

# vim /etc/sysctl.conf

添加以下内容:

......
kernel.unknown_nmi_panic = 1
kernel.panic_on_unrecovered_nmi = 1
kernel.panic_on_io_nmi = 1

2.2 让 Linux 内核奔溃后临时自动恢复的设置生效

# sysctl -p /etc/sysctl.conf

2.3 下次系统再卡死时

硬件的 nmi 按钮或远程控制卡都可以触发 nmi 终端,此时系统内核会自动生成 vmcore 文件,并自动重启系统

[排错] 解决重启系统后无法进入系统,并提示 “/grub2/i386-pc/normoal.mod not found gpt”

报错代码

/grub2/i386-pc/normoal.mod not found gpt

解决方法

步骤一:挂载官方镜像

(步骤略)

步骤二:登录拯救模式

2.1 选择通过光盘启动

(步骤略)

2.2 进入拯救模式

(步骤略)

2.3 登录拯救模式

rescue login:root

步骤三:在救援模式确定系统的根 “/” 目录分区

(步骤略)


补充:
1) 物理分区可以使用 lsblk 命令、fdisk -l 或 cat /proc/partitions 命令辅助确定
2) 逻辑分区还可以可以使用 pvs 命令、lvs 命令或 lvdisplay 命令辅助确定

步骤四:在救援模式将系统的分区挂载到救援模式的 /mnt 目录

4.1 在救援模式将系统的根 “/” 分区挂载到救援模式的 /mnt 目录

tty1:rescue:~ # mount <root spartition> /mnt


补充:
1) 如果是物理分区,系统的根 “/” 分区就在救援模式的 /dev/ 目录里,例如救援模式的 /dev/sda1
2) 如果是逻辑分区,Rocky Linux & RHEL 的系统根 “/” 分区就是救援模式里的 /dev/<volume group>/<logical volume> 例如救援模式里的 /dev/vg/lv,openSUSE & SUSE 的系统根 “/” 分区就是救援模式里的 /dev/mapper/<volume group>-<logical volume> 例如救援模式里的 /dev/mapper/vg-lv

4.2 在救援模式将救援模式的 /dev 目录关联到救援模式的 /mnt/dev 目录

tty1:rescue:~ # mount --rbind /dev /mnt/dev


补充:
1) 此时所有对救援模式的 /mnt/dev 目录的访问都会变成对救援模式的 /dev 目录的访问
2) 步骤 4.2、步骤 4.3 和步骤 4.4 也可以用以下命令代替:

tty1:rescue:~ # for i in proc sys dev; do mount --rbind /$i /mnt/$i ; done

4.3 在救援模式将救援模式的 /proc 目录关联到救援模式的 /mnt/proc 目录

tty1:rescue:~ # mount --rbind /proc /mnt/proc


补充:
1) 此时所有对救援模式的 /mnt/proc 目录的访问都会变成对救援模式的 /proc 目录的访问
2) 步骤 4.2、步骤 4.3 和步骤 4.4 也可以用以下命令代替:

tty1:rescue:~ # for i in proc sys dev; do mount --rbind /$i /mnt/$i ; done

4.4 在救援模式将救援模式的 /sys 目录关联到救援模式的 /mnt/sys 目录

tty1:rescue:~ # mount --rbind /sys /mnt/sys


补充:
1) 此时所有对救援模式的 /mnt/sys 目录的访问都会变成对救援模式的 /sys 目录的访问
2) 步骤 4.2、步骤 4.3 和步骤 4.4 也可以用以下命令代替:

tty1:rescue:~ # for i in proc sys dev; do mount --rbind /$i /mnt/$i ; done

4.5 在救援模式将救援模式的 /run 目录关联到救援模式的 /mnt/run 目录 (选做)

tty1:rescue:~ # mount --rbind /run /mnt/run

(补充:此时所有对救援模式的 /mnt/run 目录的访问都会变成对救援模式的 /run 目录的访问)

步骤五:将当前的根 “/” 目录从救援模式的根 “/” 目录切换到系统的根 “/” 目录

5.1 将当前的根 “/” 目录从救援模式的根 “/” 目录切换到系统的根 “/” 目录

tty1:rescue:~ # chroot /mnt

(补充:这里以 /mnt 作为系统根 “/” 目录为例)

5.2 在系统模式挂载所有需要开机自动挂载的目录

bash-4.3# mount -a

5.3 在系统模式确认当前根 “/” 目录下的目录

bash-4.3# ls
bin boot dev home lib lib64 mnt opt proc root run sbin selinux srv sys tmp usr var

(补充:这里显示的是常见的 Linux 根 “/” 目录 下的目录)

步骤六:在系统模式修复 GRUB2

6.1 在系统模式确定系统的 GRUB2 目录分区

(步骤略)


补充:
1) 物理分区可以使用 lsblk 命令、fdisk -l 或 cat /proc/partitions 命令辅助确定
2) 逻辑分区还可以可以使用 pvs 命令、lvs 命令或 lvdisplay 命令辅助确定

6.2 在系统模式修复 GRUB2

bash-4.3# grub2-install <disk which GRUB2 in>

6.3 在系统模式修复 /boot/grub2/grub.cfg

bash-4.3# grub2-mkconfig -o /boot/grub2/grub.cfg

步骤七:重启系统

7.1 从当前系统的根 “/” 目录切换回救援模式的根 “/” 目录

bash-4.3# exit

7.2 重启系统

bash-4.3# reboot

补充:boot 分区的文件系统损坏的情况

如果以上步骤都不起作用,且 /boot 是单独分区的话,则可能是 boot 分区的文件系统损坏,可以尝试以下补充:

1) 重复本文步骤五和之前步骤的内容
2) 将 /boot 目录里的内容全部拷贝出来
3) 取消挂载 /boot 目录的分区
4) 将挂载 /boot 目录的分区重新格式化成 ext4 格式
5) 格式化后分区的 UUID 会改变,所以需要更新 /etc/fstab 文件中挂载 /boot 目录分区的 UUID
6) 将格式化后的分区重新挂载 /boot 目录
7) 将刚刚从 /boot 目录拷贝出来的内容拷贝回 /boot 目录
8) 重复此文的步骤六

(注意:不建议使用 Btrfs 文件系统给 /boot 目录分区)

参考文献:

https://www.suse.com/support/kb/doc/?id=000018770

[步骤] Linux 用户开机自动登录 (GNOME 版)

步骤一:创建用于自动登录的用户

1.1 创建用于自动登录的用户

# useradd monitor

(补充:这里以创建 monitor 用户为例)

1.2 清空用于自动登录用户的密码

# passwd -d monitor

(补充:这里以清空 monitor 用户的密码为例)

步骤二: 设置 Linux 用户开机自动登录

如果是 Rocky Linux & RHEL:

# vim /etc/gdm/custom.conf

在:

......
[daemon]
......

下面添加以下内容:

......
AutomaticLoginEnable=True
AutomaticLogin=monitor
......

如果是 openSUSE & SUSE:

# vim /etc/gdm/custom.conf

将以下内容:

......
DISPLAYMANAGER_AUTOLOGIN=""
......

修改为:

......
DISPLAYMANAGER_AUTOLOGIN="monitor"
......

(补充:这里以设置 monitor 用户开机自动登录为例)

步骤三:重启系统

# reboot