dmesg 시간 출력

이강우 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 옵션이 없으므로 아래의 스크립트를 사용하도록 한다.

dmesg_t.sh
#!/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
로그인하면 댓글을 남길 수 있습니다.
  • dmesg_시간_출력.txt
  • 마지막으로 수정됨: 2017/09/25 16:37
  • 저자 admin