在 CentOS/RHEL如何 在dmesg 内核引导日志中添加时间戳

在问题分析或者日常操作期间,有时很难确定究竟是什么导致系统变慢,尤其是在启动过程中。
造成这种困难的一个原因是以下命令的输出:

# dmesg
NET: Registered protocol family 10
ip6_tables: (C) 2000-2006 Netfilter Core Team
nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
ip_tables: (C) 2000-2006 Netfilter Core Team
type=1305 audit(1445931490.439:4): audit_pid=1333 old=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:auditd_t:s0 res=1
SELinux: initialized (dev autofs, type autofs), uses genfs_contexts
SELinux: initialized (dev autofs, type autofs), uses genfs_contexts

显示内核环形缓冲区,但没有时间戳。
不输出关于每个条目的相对时间的信息。

每个条目的相对时间实际上是可用的,但默认情况下不显示。
编辑 /boot/grub/grub.conf 并将子句 printk.time 添加到内核命令行:

[...]
root (hd0,0)
kernel /vmlinuz-3.8.13-68.3.4.el6uek.x86_64 ro root=/dev/mapper/vg_ol67-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_ol67/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_ol67/lv_root KEYBOARDTYPE=pc KEYTABLE=be-latin1 rd_NO_DM rhgb quiet printk.time
[...]

此内核选项将启用内核 printk 模块的时间功能,然后提取消息环形缓冲区条目以及该消息的时间戳。
重复我们之前的启动示例,显示了以相对时间戳开头的日志条目。

[...]
[ 12.376443] NET: Registered protocol family 10
[ 12.381220] ip6_tables: (C) 2000-2006 Netfilter Core Team
[ 12.476857] nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
[ 12.574589] ip_tables: (C) 2000-2006 Netfilter Core Team
[ 16.414883] type=1305 audit(1445931490.439:4): audit_pid=1333 old=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:auditd_t:s0 res=1
[ 20.797095] SELinux: initialized (dev autofs, type autofs), uses genfs_contexts
[ 20.950517] SELinux: initialized (dev autofs, type autofs), uses genfs_contexts
[...]

时间戳表示为自系统启动以来的秒数。
两个计算日志条目之间经过的时间,只需从较小的时间戳中减去较大的时间戳即可。

其他时间戳形式(例如一天中的时间)不可用,因为复杂的日期操作(例如 NTP)尚未在启动序列的早期初始化。

日期:2020-09-17 00:12:25 来源:oir作者:oir