Jakie są pojęcia „bufor pierścieniowy jądra”, „poziom użytkownika”, „poziom dziennika”?

35

Często widziałem słowa „bufor pierścienia jądra”, „poziom użytkownika”, „poziom dziennika” i kilka innych słów pojawiających się razem. na przykład

/ var / log / dmesg Zawiera informacje o buforze pierścienia jądra.

/var/log/kern.log Zawiera tylko wiadomości jądra dowolnej loglevel

/var/log/user.log Zawiera informacje o wszystkich dziennikach na poziomie użytkownika

Czy wszystkie dotyczą dzienników? Jak są one powiązane i różne?

Przez „poziom” wyobrażam sobie hierarchię wielu poziomów?

Czy „poziom użytkownika” jest powiązany z „przestrzenią użytkownika”?

Czy są w jakiś sposób powiązane z poziomem pracy lub pierścieniem ochronnym ?

Tim
źródło

Odpowiedzi:

41

Tak, wszystko to ma związek z logowaniem. Nie, nie ma to nic wspólnego z poziomem pracy lub „pierścieniem ochronnym”.

Jądro przechowuje swoje dzienniki w buforze pierścieniowym. Głównym tego powodem jest to, że dzienniki z uruchamiania systemu są zapisywane, dopóki demon syslog nie będzie miał możliwości ich uruchomienia i zebrania. W przeciwnym razie przed uruchomieniem demona syslog nie byłoby żadnych zapisów. Zawartość tego bufora pierścieniowego można wyświetlić w dowolnym momencie za pomocą dmesgpolecenia, a jego zawartość jest również zapisywana /var/log/dmesgw momencie uruchamiania demona syslog.

Wszystkie dzienniki, które nie pochodzą z jądra, są wysyłane, ponieważ są generowane do demona syslog, więc nie są przechowywane w żadnych buforach. Dzienniki jądra są również pobierane przez demona syslog podczas ich generowania, ale są one nadal zapisywane (niepotrzebnie, prawdopodobnie) w buforze pierścieniowym.

Poziomy dziennika można udokumentować na stronie podręcznika syslog (3) i są one następujące:

  • LOG_EMERG : system nie nadaje się do użytku
  • LOG_ALERT : należy natychmiast podjąć działanie
  • LOG_CRIT : warunki krytyczne
  • LOG_ERR : warunki błędu
  • LOG_WARNING : warunki ostrzegawcze
  • LOG_NOTICE : normalny, ale istotny warunek
  • LOG_INFO : komunikat informacyjny
  • LOG_DEBUG : komunikat na poziomie debugowania

Każdy poziom ma być mniej „ważny” niż poprzedni. Plik dziennika, który rejestruje dzienniki na jednym poziomie, będzie także rejestrował dzienniki na wszystkich ważniejszych poziomach.

Różnica między /var/log/kern.logi /var/log/mail.log(na przykład) nie dotyczy poziomu, ale obiektu lub kategorii. Kategorie są również udokumentowane na stronie podręcznika.

Celada
źródło
Dzięki. (1) Czy „poziom użytkownika” jest powiązany z „przestrzenią użytkownika”? (2) Z tego, co powiedziałeś, /var/log/kern.logi /var/log/dmesgpowinien mieć taką samą treść jak komunikaty jądra? Ale ich zawartość nie jest taka sama.
Tim
O ile wiem, „poziom użytkownika” nie jest rzeczą. Istnieje poziom syslog, który jest poziomem „ważności” komunikatu syslog (wymieniłem poziomy) i nie ma on nic wspólnego z przestrzenią użytkownika a przestrzenią jądra. /var/log/kern.logpowinien zawierać dmesgtreść (być może sformatowaną inaczej) niż czas uruchamiania. Chyba że minęło dużo czasu od uruchomienia i zawartość została wyparta.
Celada,
Moje drugie pytanie brzmi: Podczas gdy dmesgdrukuje bieżące wartości bufora pierścieniowego jądra, poprzednie / stare wartości bufora są przechowywane w /var/log/dmesg. Tak więc dmesgwynik jest tylko najnowszym podzbiorem /var/log/dmesgtreści i są one różne. Czy zatem zawartość /var/log/dmesg(nie dmesgjak w komentarzu) jest /var/log/kernel.logtaka sama?
Tim
Zależy kiedy! Niedługo po uruchomieniu /var/log/dmesgzawartość będzie prawdopodobnie pod koniec /var/log/kern.log. Znacznie później go nie będzie, będzie się obracać. Zasadniczo /var/log/kern.logbędzie zawierać dzienniki, które są starsze niż jakakolwiek migawka bufora pierścienia dziennika jądra, a także dzienniki, które są nowsze niż migawka.
Celada,
17

Aby odpowiedzieć przynajmniej na pierwszą część pytania na temat dmesg:

/var/log/dmesg przechowuje zawartość „bufora pierścieniowego jądra”, bufora pamięci utworzonego przez jądro podczas rozruchu, w którym przechowuje dane dziennika, które generuje, gdy tylko przejdziesz przez fazę bootloadera.

Bufor pierścieniowy jest specjalnym rodzajem bufora, który zawsze ma stały rozmiar, usuwając najstarsze wiadomości, gdy przychodzą nowe wiadomości. Tekst zapisany w buforze pierścieniowym jądra jest tym, co widzisz, migając obok ciebie na ekranie, gdy uruchamiasz Uniksa jak maszyna w trybie konsoli (bez ekranu powitalnego, Plymouth). Dziennik jądra jest przechowywany w buforze pamięci, więc dzienniki rozruchowe muszą gdzieś być, dopóki system nie uruchomi się do momentu, w którym syslogdemon może przejąć kontrolę.

dmesgpod Linuksem jest częścią niezbędnego util-linuxpakietu narzędzi do konserwacji systemu opublikowanego przez kernel.org. Według dmesg(1)strony man,

dmesg służy do sprawdzania lub kontrolowania bufora pierścieniowego jądra.

Zobacz: http://www.computerhope.com/unix/dmesg.htm

W obszarze „systemd” init można użyć tego polecenia do wydrukowania bufora pierścieniowego jądra
# journalctl --dmesg or journalctl -k:, dzięki za poprawkę @don_crissti

Wydanie polecenia dmesg | grep -i ethernet na przykład spowoduje przeanalizowanie bufora pierścieniowego jądra dla łańcucha „ethernet”.

Mam nadzieję, że to pomoże przynajmniej w pierwszej części twojego zapytania.

nomadrc
źródło