Каковы понятия «кольцевой буфер ядра», «уровень пользователя», «уровень журнала»?

35

Я часто видел слова «ядро кольцевой буфер», «уровень пользователя», «уровень журнала» и некоторые другие слова появляются вместе. например

/ var / log / dmesg Содержит информацию о кольцевом буфере ядра.

/var/log/kern.log Содержит только сообщения ядра любого уровня логирования

/var/log/user.log Содержит информацию обо всех журналах уровня пользователя

Они все о бревнах? Как они связаны и отличаются?

Под "уровнем" я бы представил иерархию нескольких уровней?

Связан ли «уровень пользователя» с «пространством пользователя»?

Они как-то связаны с уровнем запуска или защитным кольцом ?

Тим
источник

Ответы:

41

Да, все это связано с регистрацией. Нет, это никак не связано с уровнем запуска или "защитным кольцом".

Ядро хранит свои журналы в кольцевом буфере. Основная причина этого заключается в том, что журналы запуска системы сохраняются до тех пор, пока демон syslog не получит возможность запустить и собрать их. В противном случае не было бы записи каких-либо журналов до запуска демона syslog. Содержимое этого кольцевого буфера может быть просмотрено в любое время с помощью dmesgкоманды, и его содержимое также сохраняется в тот /var/log/dmesgмомент, когда запускается демон syslog.

Все журналы, которые не приходят из ядра, отправляются по мере их создания в демон syslog, поэтому они не сохраняются ни в каких буферах. Журналы ядра также извлекаются демоном syslog по мере их генерации, но они также продолжают сохраняться (без необходимости, возможно) в кольцевой буфер.

Уровни журналов можно увидеть в документации на странице syslog (3) :

  • LOG_EMERG : система не работает
  • LOG_ALERT : действие должно быть предпринято немедленно
  • LOG_CRIT : критические условия
  • LOG_ERR : условия ошибки
  • LOG_WARNING : условия предупреждения
  • LOG_NOTICE : нормальное, но существенное условие
  • LOG_INFO : информационное сообщение
  • LOG_DEBUG : сообщение уровня отладки

Каждый уровень разработан так, чтобы быть менее «важным», чем предыдущий. Файл журнала, в котором записываются журналы на одном уровне, также будет записывать журналы на всех более важных уровнях.

Разница между /var/log/kern.logи/var/log/mail.log (например) связана не с уровнем, а с объектом или категорией. Категории также описаны на странице руководства.

Celada
источник
Спасибо. (1) Связан ли «уровень пользователя» с «пространством пользователя»? (2) Из того, что вы сказали, /var/log/kern.logи /var/log/dmesgдолжен иметь тот же контент, что и сообщения ядра? Но их содержание не совпадает.
Тим
Насколько мне известно, «уровень пользователя» - это не вещь. Существует уровень системного журнала, который является уровнем «важности» сообщения системного журнала (я перечислил уровни), и он не имеет никакого отношения к пространству пользователя по сравнению с пространством ядра. /var/log/kern.logдолжен содержать dmesgконтент (возможно, отформатированный по-разному) со времени загрузки. Если не прошло много времени с момента загрузки, и это содержимое было изменено.
Селада,
Мой второй вопрос: пока dmesgвыводятся текущие значения кольцевого буфера ядра, в нем хранятся прошлые / старые значения буфера /var/log/dmesg. Таким образом, dmesgвывод - это только недавнее подмножество /var/log/dmesgконтента, и они отличаются. Тогда содержание /var/log/dmesg(не так, dmesgкак в вашем комментарии) и /var/log/kernel.logто же самое?
Тим
Зависит, когда! Вскоре после загрузки /var/log/dmesgконтент, скорее всего, будет ближе к концу /var/log/kern.log. Намного позже, этого не будет, оно будет вращаться. В общем случае /var/log/kern.logбудут содержать журналы, которые старше любого данного снимка буфера кольца журнала ядра, а также журналы, которые новее снимка.
Селада,
17

Чтобы ответить хотя бы на первую часть вашего вопроса о dmesg:

/var/log/dmesg хранит содержимое «кольцевого буфера ядра», буфера памяти, созданного ядром при загрузке, для хранения данных журнала, которые он генерирует, как только вы пройдете фазу загрузчика.

Кольцевой буфер - это особый тип буфера, который всегда имеет постоянный размер, удаляя самые старые сообщения при поступлении новых сообщений. Текст, хранящийся в кольцевом буфере ядра, - это то, что вы видите, вспыхивая на экране при первой загрузке Unix -подобная машина в режиме консоли (без заставки, Плимут). Журнал ядра хранится в буфере памяти, так что журналы загрузки должны быть где-то до тех пор, пока система не загрузится до того момента, когда syslogдемон сможет вступить во владение.

dmesgпод Linux входит в состав необходимого util-linuxпакета инструментов обслуживания системы, публикуемого kernel.org. Согласно dmesg(1)справочной странице,

dmesg используется для проверки или управления кольцевым буфером ядра.

Смотрите: http://www.computerhope.com/unix/dmesg.htm

При инициализации 'systemd' эта команда может использоваться для печати кольцевого буфера ядра:,
# journalctl --dmesg or journalctl -kthxs для исправления @don_crissti

Выполнение команды, dmesg | grep -i ethernet например, проанализирует кольцевой буфер ядра для строки 'ethernet'.

Я надеюсь, что это поможет, по крайней мере, с первой частью вашего запроса.

nomadrc
источник