[排错] 解决 Linux 运行时报错 “watchdog: Bug: soft lockup – CPU……” (CPU 软锁)

报错代码:

watchdog: Bug: soft lockup - CPU......

分析:

当 CPU 的负载过高时,一个 CPU 在运行某一个进程时,在内核模式下超过 20 秒没有回应,则看门狗程序会将系统所有 CPU 软锁住,然后会让这些 CPU 显示各自正在运行的进程堆栈跟踪

缓解方法:

延长看门狗等待 CPU 内核模式下的回应时间

方法一:通过 /proc/sys/kernel/watchdog_thresh 文件提高看门狗软所 CPU 的时间

# echo 20 > /proc/sys/kernel/watchdog_thresh

(补充:这里以将看门狗的值提高到为 20 为例,也可以根据自己的需求提高更多,默认值为 10)

方法二:通过新建文件提高看门狗软所 CPU 的时间
2.1 通过新建文件提高看门狗软所 CPU 的时间

# echo "kernel.watchdog_thresh=20" > /etc/sysctl.d/99-watchdog_thresh.conf

(补充:这里以将看门狗的值提高到为 20 为例,也可以根据自己的需求提高更多,默认值为 10)

2.2 让新建文件立刻生效

# sysctl -p  /etc/sysctl.d/99-watchdog_thresh.conf

深究方法:

开启 Kdump,等此报错再次发生时分析 Kdump 在内核崩溃时搜集信息 vmcore

[步骤] PXE 新系统模板的添加

步骤目录:

步骤一:准备安装镜像
1.1 从官网上下载安装镜像
1.2 挂载安装镜像
1.2.1 创建用于挂载安装镜像的目录
1.2.2 挂载安装镜像

步骤二:准备用于进行 PXE 安装的数据
2.1 准备系统安装数据
2.1.1 创建用于存放系统安装数据的目录
2.1.2 拷贝安装镜像里的数据到用于存放系统安装数据的目录
2.1.2.1 拷贝安装镜像里的普通数据到用于存放系统安装数据的目录
2.1.2.2 拷贝安装镜像里的 .treeinfo 文件到用于存放系统安装数据的目录
2.2 准备安装引导文件
2.2.1 创建用于存放安装引导文件的目录
2.2.1.1 创建用于存放 BIOS 安装引导文件的目录
2.2.1.2 创建用于存放 EFI 安装引导文件的目录
2.2.2 拷贝安装镜像里的安装引导文件到存放安装引导文件的目录
2.2.2.1 拷贝安装镜像里的 BIOS 安装引导文件到存放 BIOS 安装引导文件的目录
2.2.2.2 拷贝安装镜像里的 EFI 安装引导文件到存放 EFI 安装引导文件的目录
2.3 准备系统安装配置文件
2.3.1 进入到用于存放系统安装配置文件的目录
2.3.2 创建系统安装配置文件
2.3.2.1 创建 BIOS 系统安装配置文件
2.3.2.2 创建 EFI 系统安装配置文件
2.3.3 设置系统安装配置文件的权限
2.3.3.1 设置 BIOS 系统安装配置文件的权限
2.3.3.2 设置 EFI 系统安装配置文件的权限
2.4 修改系统安装菜单文件 pxelinux.cfg
2.4.1 修改 BIOS 系统安装菜单文件 pxelinux.cfg
2.4.2 修改 EFI 系统安装菜单文件 grub.cfg

步骤三:取消挂载安装镜像

具体的操作步骤:

步骤一:准备安装镜像
1.1 从官网上下载安装镜像

(步骤略)

1.2 挂载安装镜像
1.2.1 创建用于挂载安装镜像的目录

# mkdir <directory for mounting the image>

1.2.2 挂载安装镜像

# mount -t iso9660 <image> <directory for mounting the image>

步骤二:准备用于进行 PXE 安装的数据
2.1 准备系统安装数据
2.1.1 创建用于存放系统安装数据的目录

# mkdir <directory of data for installing the system>

(注意:用于存放系统安装数据的目录必须要放在能够实现 PXE 安装时网络共享的目录里(例如:通过 httpd 服务进行网络共享))

2.1.2 拷贝安装镜像里的数据到用于存放系统安装数据的目录
2.1.2.1 拷贝安装镜像里的普通数据到用于存放系统安装数据的目录

# cp -rp <directory for mounting the image>/* <directory of data for installing the system>

2.1.2.2 拷贝安装镜像里的 .treeinfo 文件到用于存放系统安装数据的目录

# cp -rp <directory for mounting the image>/.treeinfo <directory of data for installing the system>

2.2 准备安装引导文件
2.2.1 创建用于存放安装引导文件的目录
2.2.1.1 创建用于存放 BIOS 安装引导文件的目录

# mkdir <directory of BIOS boot file for installing the system>

(注意:用于存放 BIOS 安装引导文件的目录必须要放在能够实现 TFPT 网络共享的目录里)

2.2.1.2 创建用于存放 EFI 安装引导文件的目录

# mkdir <directory of EFI boot file for installing the system>

(注意:用于存放 EFI 安装引导文件的目录必须要放在能够实现 TFPT 网络共享的目录里)

2.2.2 拷贝安装镜像里的安装引导文件到存放安装引导文件的目录
2.2.2.1 拷贝安装镜像里的 BIOS 安装引导文件到存放 BIOS 安装引导文件的目录

如果是 Rocky Linux & RHEL 的话则拷贝 initrd.img 文件、TRANS.TBL 文件和 vmlinuz 文件:

# curl <The URL of the network share when PXE installing>/<directory of data for installing the system>/images/pxeboot/initrd.img -O <directory of BIOS boot file for installing the system>/initrd.img
# curl <The URL of the network share when PXE installing>/<directory of data for installing the system>/images/pxeboot/TRANS.TBL -O <directory of BIOS boot file for installing the system>/TRANS.TBL
# curl <The URL of the network share when PXE installing>/<directory of data for installing the system>/images/pxeboot/vmlinuz -O <directory of BIOS boot file for installing the system>/vmlinuz

如果是 openSUSE & SLE 的话则拷贝 linux 文件和 initrd 文件:

# curl <The URL of the network share when PXE installing>/<directory of data for installing the system>/boot/x86_64/loader/linux -O <directory of BIOS boot file for installing the system>/linux
# curl <The URL of the network share when PXE installing>/<directory of data for installing the system>/boot/x86_64/loader/initrd -O <directory of BIOS boot file for installing the system>/initrd

2.2.2.2 拷贝安装镜像里的 EFI 安装引导文件到存放 EFI 安装引导文件的目录

如果是 Rocky Linux & RHEL 的话则拷贝 initrd.img 文件、TRANS.TBL 文件和 vmlinuz 文件:

# curl <The URL of the network share when PXE installing>/<directory of data for installing the system>/images/pxeboot/initrd.img -O <directory of EFI boot file for installing the system>/initrd.img
# curl <The URL of the network share when PXE installing>/<directory of data for installing the system>/images/pxeboot/TRANS.TBL -O <directory of EFI boot file for installing the system>/TRANS.TBL
# curl <The URL of the network share when PXE installing>/<directory of data for installing the system>/images/pxeboot/vmlinuz -O <directory of EFI boot file for installing the system>/vmlinuz

如果是 openSUSE & SLE 的话则拷贝 linux 文件和 initrd 文件:

# curl <The URL of the network share when PXE installing>/<directory of data for installing the system>/boot/x86_64/loader/linux -O <directory of EFI boot file for installing the system>/linux
# curl <The URL of the network share when PXE installing>/<directory of data for installing the system>/boot/x86_64/loader/initrd -O <directory of EFI boot file for installing the system>/initrd

2.3 准备系统安装配置文件
2.3.1 进入到用于存放系统安装配置文件的目录

# cd <directory of profile for installing the system>

(注意:进入到用于存放系统安装配置文件的目录必须要放在能够实现 PXE 安装时网络共享的目录里(例如:通过 httpd 服务进行网络共享))

2.3.2 创建系统安装配置文件
2.3.2.1 创建 BIOS 系统安装配置文件

如果是 Rocky Linux & RHEL 的话

# vim <BIOS system installation profile>

(步骤略)


补充:
1) 如果是 Rocky Linux & RHEL 的话系统安装配置文件是 CFG 文件,文件名最好以 .cfg 后缀结尾
2) 如果是 openSUSE & SLE 的话系统安装配置文件是 XML 文件,文件名最好以 .xml 后缀结尾

2.3.2.2 创建 EFI 系统安装配置文件

# vim <EFI system installation profile>

(步骤略)


补充:
1) 如果是 Rocky Linux & RHEL 的话系统安装配置文件是 CFG 文件,文件名最好以 .cfg 后缀结尾
2) 如果是 openSUSE & SLE 的话系统安装配置文件是 XML 文件,文件名最好以 .xml 后缀结尾

2.3.3 设置系统安装配置文件的权限
2.3.3.1 设置 BIOS 系统安装配置文件的权限

# chmod 755 <BIOS system installation profile>

2.3.3.2 设置 EFI 系统安装配置文件的权限

# chmod 755 <EFI system installation profile>

2.4 修改系统安装菜单文件 pxelinux.cfg
2.4.1 修改 BIOS 系统安装菜单文件 pxelinux.cfg

# vim <directory of file for BIOS system installation menu>/pxelinux.cfg

如果是 Rocky Linux & RHEL 的话,添加以下内容:

......
label Rocky Linux or RHEL
  menu label ^Installation Rocky Linux or RHEL
  kernel <relative directory of pxelinux.cfg of BIOS boot file for installing the system>/vmlinuz
  append initrd=/<relative directory of pxelinux.cfg of BIOS boot file for installing the system>/initrd.img ks=<The URL of the network share when PXE installing>/<BIOS system installation profile>

(注意:这里的 vmlinuz 文件和 initrd.im 文件的位置要写 pxelinux.cfg 文件的相对路径)

如果是 openSUSE & SLE 的话,添加以下内容:

......
label openSUSE or SLE
  menu label ^Installation openSUSE or SLE
  kernel <relative directory of pxelinux.cfg of BIOS boot file for installing the system>/linux
  append initrd=<relative directory of pxelinux.cfg of BIOS boot file for installing the system>/initrd splash=silent showopts install=<The URL of the network share when PXE installing>/<directory of data for installing the system>/ autoyast=<The URL of the network share when PXE installing>/<BIOS system installation profile>

(注意:这里的 linux 文件和 initrd 文件的位置要写 pxelinux.cfg 文件的相对路径)

(注意:用于存放 BIOS 系统安装菜单文件的目录必须要放在能够实现 TFPT 网络共享的目录里)

2.4.2 修改 EFI 系统安装菜单文件 grub.cfg

# vim <directory of file for EFI system installation menu>/grub.cfg

如果是 Rocky Linux & RHEL 的话,添加以下内容:

......
label Rocky Linux or RHEL
  menu label ^Installation Rocky Linux or RHEL
  kernel <relative directory of pxelinux.cfg of EFI boot file for installing the system>/vmlinuz
  append initrd=/<relative directory of pxelinux.cfg of EFI boot file for installing the system>/initrd.img ks=<The URL of the network share when PXE installing>/<EFI system installation profile>

(注意:这里的 vmlinuz 文件和 initrd.im 文件的位置要写 pxelinux.cfg 文件的相对路径)

如果是 openSUSE & SLE 的话,添加以下内容:

......
label openSUSE or SLE
  menu label ^Installation openSUSE or SLE
  kernel <relative directory of pxelinux.cfg of EFI boot file for installing the system>/linux
  append initrd=<relative directory of pxelinux.cfg of EFI boot file for installing the system>/initrd splash=silent showopts install=<The URL of the network share when PXE installing>/<directory of data for installing the system>/ autoyast=<The URL of the network share when PXE installing>/<EFI system installation profile>

(注意:这里的 linux 文件和 initrd 文件的位置要写 pxelinux.cfg 文件的相对路径)

(注意:用于存放 EFI 系统安装菜单文件的目录必须要放在能够实现 TFPT 网络共享的目录里)

步骤三:取消挂载安装镜像

# umount <directory for mounting the image>

[命令] Rocky Linux 8 & RHEL 8 命令 update-crypto-policies

内容一:update-crypto-policies 参数的意义

1) DEFAULT 不严格的安全等级,可以让系统使用 TLSv1.2
2) FUTURE 严格的安全等级,只能让系统使用 TLSv1.2 不能使用 TLSv1.3

内容二:显示当前的 update-crypto-policies 参数

# update-crypto-policies --show
DEFAULT

(补充:从这里可以看出目前的 update-crypto-policies 参数是 DEFAULT)

内容三:设置 update-crypto-policies 参数

# update-crypto-policies --set=FUTURE

(补充:这里以将 update-crypto-policies 参数设置为 FUTURE 为例)