[步骤] Linux Kdump 的开启 (用于收集内核崩溃时的信息) (openSUSE & SLES 版)

步骤一:确保 crash 和 kernel-debuginfo 两个软件包已安装

# rpm -qa | grep crash || zypper install crash ; rpm -qa | grep kernel-debug || zypper install kernel-debug

(注意:此方法只有 openSUSE & SLES 可以使用)

步骤二:给 Kdump 预留内存

2.1 给 Kdump 预留内存

2.1.1 方法一:通过在 /etc/default/grub 配置文件里修改 crashkernel 参数

2.1.1.1 在 /etc/default/grub 配置文件里修改 crashkernel 参数
# vim /etc/default/grub

在这一行里:

.....
GRUB_CMDLINE_LINUX_DEFAULT="......"
.....

确保有:

.....
GRUB_CMDLINE_LINUX="crashkernel=auto......"
.....

并确保此文件其他地方没有和 crashkernel= 相关的参数


补充:这里的 auto 代表系统会根据内存大小自动设置一个值,也可以指定一个值,例如:crashkernel=128M,high、crashkernel=256M,high 等等。如果设置成一个固定值,建议
1) 1 GB 到 4 GB 内存设置成 160 M
2) 4 GB 到 64 GB 内存设置成 192 M
3) 64 GB 到 1 TB 内存设置成 256 M
4) 大于 1 TB 内存设置成 512 M

2.1.1.2 让刚刚修改的内核参数生效
# grub2-mkconfig -o /boot/grub2/grub.cfg

2.1.2 方法二:通过 yast 工具修改 crashkernel 参数

2.1.2.1 方法二:通过 yast 工具修改 crashkernel 参数
# yast kdump

之后将 –Start-Up 中的 Kdump Low Memory [MiB] (72 – 3069) 修改为 256,将 –Start-Up 中的 Kdump High Memory [MiB] (0 – 7168) 修改为 512,之后再选择 [ OK ]

(补充:当 Kdump Low Memory 设置为 256,Kdump High Memory 设置为 512 时更易触发 Kdump)

(注意:此方法只有 openSUSE & SLES 可以使用)

2.1.2.2 让刚刚修改的内核参数生效
# reboot

2.2 显示给 Kdump 预留内存的大小

# makedumpfile --mem-usage /proc/kcore

步骤三:修改 Kdump 的配置信息

3.1 修改 Kdump 的配置文件

# vim /etc/kdump.conf

将以下内容:

......
path /var/crash
core_collector makedumpfile -l --message-level 1 -d 31
......

修改为:

......
path /var/crash
core_collector makedumpfile -c -l --message-level 1 -d 31
default reboot
......


补充:
1) path /var/crash
2) -c 参数会对搜集的内核崩溃时的信息进行压缩
3) default reboot 参数会让 KDUMP 收集完内核崩溃时的信息后重启

3.2 让刚刚修改的 Kdump 配置文件生效

# systemctl enable kdump.service ; systemctl restart kdump.service

步骤四:测试 Kdump

4.1 造成系统内核崩溃

# echo 1 > /proc/sys/kernel/sysrq ; echo c > /proc/sysrq-trigger

(注意:此时系统会自动崩溃并重启)

4.2 显示 Kdump 生成内核崩溃信息

# ls /var/crash/<date>/vmcore

(补充:这里的内核崩溃信息存放目录 /var/crash/,是刚刚在 /etc/kdump.conf 文件里指定的)

[内容] Linux Umask 的设置

内容一:Umask 值的含义

如果 Umask 的值是 0022:
创建的新目录的默认权限是:777 – 022 = 755
创建的新文件的默认权限是:666 – 022 = 644

内容二:临时设置 Umask

2.1 查看当前 Umask 值

# umask
0022

2.2 临时设置 Umask 值

2.2.1 方法一:使用权限数字设置默认权限值
# umask 0002
2.2.2 方法二:使用权限标志设置默认权限值
# umask -S u=rwx,g=rwx,o=rw

内容三:永久设置 umask

3.1 给某个用户单独永久设置 Umask

3.1.1 切换到要永久设置 Umask 的用户
# su - root

(补充:这里以切换到 root 用户为例)

3.1.2 给某个用户单独添加 Umask 参数
# vim ~/.bashrc 

添加以下内容:

......
umask 022

(补充:这里以将 Umask 设置为 022 为例)

3.1.3 让 Umask 设置生效
# source ~/.bashrc

3.2 全局永久设置 Umask 的方法

3.2.1 在 /etc/login.defs 配置文件里设置默认 Umask 参数
# vim /etc/login.defs

将以下内容:

UMASK ......

修改为:

UMASK           022

(补充:这里以将 Umask 的默认值设置为 022 为例)

3.2.2 在 /etc/profile 配置文件里设置全局 Umask 参数
# vim /etc/profile

将以下内容:

......
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask ......
else
    umask ......
fi
......

修改为:

......
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi
......

(补充:这里以将 UID 小于 199 的用户 Umask 设置为 002,UID 大于等于 199 的用户 Umask 设置为 022 为例)

(注意:openSUSE & SLES 的 /etc/profile 配置文件里没有这些内容,所以如果是对 openSUSE & SLES 进行操作时则需要手动创建这些内容)

或者:

# vim /etc/profile

添加以下内容:

......
umask 022

(补充:这里以将所有用户的全局 Umask 设置为 022 为例)

3.2.3 在 /etc/bashrc 配置文件里设置全局 Umask 参数
# vim /etc/bashrc

将以下内容:

......
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask ......
else
    umask ......
fi
......

修改为:

......
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi
......

(补充:这里以将 UID 小于 199 的用户 Umask 设置为 002,UID 大于等于 199 的用户 Umask 设置为 022 为例)

(注意: openSUSE & SLES 没有 /etc/bashrc 配置文件,所以如果是对 openSUSE & SLES 进行操作时则需要手动创建此文件和这些内容)

或者:

# vim /etc/bashrc

添加以下内容:

......
umask 022

(补充:这里以将所有用户的全局 Umask 设置为 022 为例)

(注意: openSUSE & SLES 没有 /etc/bashrc 配置文件,所以如果是对 openSUSE & SLES 进行操作时则需要手动创建此文件)

3.2.4 让永久设置的 Umask 设置生效
# source /etc/bashrc ; source /etc/profile


注意:
1) 当永久设置的 Umask 生效后,用户必须要重新登录后才会刷新 Umask
2) 当 /etc/login.defs 配置文件、/etc/bashrc 配置文件和 /etc/profile 配置文件里设置的 Umask 值不一致时,会以 /etc/profile 文件里设置的为准
3) 当同一个文件里设置了多个 Umask 个值时,会以最后一个值为准