2012-07-10 9 views
7

Modyfikuję moduł kvm i dodałem instrukcje printk do kodu jądra. Po uruchomieniu maszyny wirtualnej, printk podaje mi adres błędu i inne informacje o gościu OS.Różnica między dmesg i /var/log/kern.log

Muszę wygenerować statystykę na podstawie tych informacji. Kiedy używam dmesg, widzę tylko adres o błędzie w przestrzeni jądra, tzn. Ich adres jest powyżej 0XC0000000. (Adres błędu jest potrzebny, gdy następuje VMEXIT, tj. Przełączamy się z gościa na tryb hosta)

Gdy widzę te same statystyki w pliku kern.log, otrzymuję również błąd z adresu użytkownika (poniżej 0XC0000000). Wydaje mi się, że dmesg ma ograniczoną pojemność, a podane informacje są podzbiorem z kern.log.
Mój plik kern.log jest zbyt duży, aby usunąć stare dane z kern.log, ponieważ polecenia przetwarzania tekstu, takie jak grep, join, awk, są zbyt długie, aby można było je uruchomić.

Moje pytanie brzmi:
Jaka jest różnica między dmesg i kern.log?
Jak zmniejszyć rozmiar pliku kern.log jako zadanie cron? (Usunąć wszystkie dane dodane w ciągu ostatnich 24 godzin)
Czy istnieje lepszy sposób na uzyskanie funkcjonalności printf z jądra?

Odpowiedz

5

/var/log/kern.log i jego obrócone logi (/var/log/kern.log.1 /var/log/kern.log.2 ....) zawiera dzienniki wygenerowane przez jądro i obsługiwane przez syslog.

dmesg jak wyjaśnia strony człowieka jest:

dmesg służy do sprawdzania i kontrolowania bufor pierścieniowy jądra.

W rzeczywistości wyświetli on ostatnie 16392 oktetów /var/log/kern.log od ostatniego uruchomienia.

+0

jest ok, aby usunąć zawartość .. kern.log i kern.log.1 kern.log.1 jest tak duży, że vi trwa 5 minut, aby go załadować ... Nie mogę przetworzyć pliku, jeśli są one tak długie .... Myślałem o zrobieniu 'cat/dev/null> kern.log' i' cat/dev/null> kern.log.1' ... Czy to jest w porządku, aby usunąć dane logów ??. – Deepthought

+2

@Weszłabyś tak, możesz usunąć te pliki, ale syslog zachowa tylko 5 ostatnich plików. –

+0

W moim Ubuntu 16.04 dane wyjściowe 'dmesg' prawie nie mają korelacji z ostatnimi 16392 oktetami'/var/log/kern.log' (które uzyskałem za pomocą 'tail -c 16392'). Niektóre (kilka) linii są podobne, ale trzeba wziąć pod uwagę różnice w formacie wyjściowym, wyświetlane pola i nie jest jasne, jaki rodzaj flag lub przetwarzanie "awk" spowoduje wygenerowanie danych wyjściowych, które mogą być łatwo ustalone, aby były takie same używając 'diff'. –