— 이강우 2017/09/25 16:37
CentOS/RHEL 6 이하 버전은 dmesg 기본 출력시 시간이 출력되지 않는다. 시간이 나오도록 변경하는 방법은 아래와 같다.
printk.time= Show timing data prefixed to each printk message line Format: <bool> (1/Y/y=enable, 0/N/n=disable)
grub.conf의 부팅 커널 파라메터에 아래와 같이 해당 옵션을 추가한다. 아래는 예제내용이다.
title Red Hat Enterprise Linux (2.6.32-71.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=/dev/mapper/vg_dhcp21032-lv_root rd_LVM_LV=vg_dhcp21032/lv_root rd_LVM_LV=vg_dhcp21032/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb console=tty0 console=ttyS0,9600 rhgb quiet printk.time=1 initrd /initramfs-2.6.32-71.el6.x86_64.img
기본적으로 7버전 이상에서는 시간이 출력이 된다.
7 버전 이상에서는 dmesg -T
옵션으로 부팅 시작 이후 시간표시가 아니라 해당 시간 표시로 바뀌어서 출력된다.
6 이하 버전에서는 -T
옵션이 없으므로 아래의 스크립트를 사용하도록 한다.
#!/bin/bash # Translate dmesg timestamps to human readable format # koovis@gmail.com IFS='' # desired date format date_format="%a %b %d %T %Y" # uptime in seconds uptime=$(cut -d " " -f 1 /proc/uptime) # run only if timestamps are enabled if [ "Y" = "$(cat /sys/module/printk/parameters/time)" ]; then dmesg | while read line ; do if [ ${line:0:1} != '[' ]; then echo $line; else echo $line | sed "s/^\[[ ]*\?\([0-9.]*\)\] \(.*\)/\\1 \\2/" | read timestamp printf "[%s] %s\n" "$(date --date "now - $uptime seconds + $timestamp seconds" +"${date_format}")" "$line" fi done else echo "Timestamps are disabled (/sys/module/printk/parameters/time)" fi