Lesbares dmesg time Format unter Linux

Linux hat leider die unangenehme Angewohnheit, im dmesg nur relative Zeitangaben zu speichern. Diese beziehen sich auf den Systemstart, also die Uptime. Wenn man also folgendes im dmesg findet, weiss man nicht, wann das Ereignis aufgetreten ist:

[6509063.707779] md: data-check of RAID array md0
[6509063.707784] md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
[6509063.707787] md: using maximum available idle IO bandwidth (but not more than 
	200000 KB/sec) for data-check.
[6509063.707794] md: using 128k window, over a total of 20482752 blocks.
[6509063.708619] md: md0: data-check done.

Um diese Angaben in absolute Datumswerte zu überführen, habe ich folgendes Skript gefunden:

#!/usr/bin/perl -w

use strict;
chomp (my $uptime = `cat /proc/uptime`);
$uptime =~ s/^([\d\.]+)\s+.*/$1/;
my $time = time;
open(CMD,"dmesg|") || die "$!\n";
while(<CMD>) {
        if (/^\[\s*(\d+)\.\d+\s*\]\s+(.*$)/) {
                my $event = $time -($uptime - $1);
                $event = scalar(localtime($event));
                print "$event: $2\n";
        } else { print; }
}       
close;

Das Ergebnis sind folgende, deutlich lesbarere Zeilen:

Sun May  1 00:57:00 2011: md: data-check of RAID array md0
Sun May  1 00:57:00 2011: md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
Sun May  1 00:57:00 2011: md: using maximum available idle IO bandwidth (but not more than 
	200000 KB/sec) for data-check.
Sun May  1 00:57:00 2011: md: using 128k window, over a total of 20482752 blocks.
Sun May  1 00:57:00 2011: md: md0: data-check done.

Flattr this!

Tags: , , ,

Leave a Reply