Как проверить, активен ли кольцевой буфер ядра в Linux

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы узнаете, как проверить, активен ли кольцевой буфер ядра в Linux. Кольцевой буфер ядра является важной частью для понимания системных событий и устранения неполадок. Вы изучите три способа доступа к его содержимому и его проверки: с помощью команды dmesg для прямого просмотра буфера, проверки его наличия и содержимого через файл /proc/kmsg и, наконец, с использованием journalctl для изучения журналов ядра, управляемых системным журналом systemd. Эти шаги предоставят вам практические навыки мониторинга и анализа сообщений ядра в вашей системе Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/less("File Paging") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") subgraph Lab Skills linux/cat -.-> lab-558723{{"Как проверить, активен ли кольцевой буфер ядра в Linux"}} linux/less -.-> lab-558723{{"Как проверить, активен ли кольцевой буфер ядра в Linux"}} linux/grep -.-> lab-558723{{"Как проверить, активен ли кольцевой буфер ядра в Linux"}} end

Проверка буфера с помощью dmesg

На этом шаге вы узнаете, как использовать команду dmesg для просмотра кольцевого буфера ядра. Кольцевой буфер ядра представляет собой специальную область в памяти, где ядро Linux хранит сообщения о железе, драйверах устройств и системных событиях. Эти сообщения являются важными для устранения неполадок и понимания того, что происходит на низком уровне в вашей системе.

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

Если терминал еще не открыт, откройте его. Для этого нажмите на значок Xfce Terminal слева на рабочем столе.

Теперь введите следующую команду и нажмите Enter:

dmesg

Вы увидите, как в терминале будет прокручиваться большое количество вывода. Это содержимое кольцевого буфера ядра. Вывод может выглядеть примерно так (точное содержимое будет различаться в зависимости от вашей системы и времени ее работы):

[    0.000000] Linux version 5.15.0-xx-generic (buildd@lcy02-amd64-xx) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #xx-Ubuntu SMP Tue Feb 20 15:48:58 UTC 2024
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.15.0-xx-generic root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro console=ttyS0,115200
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
...
[   10.123456] usb 1-1: new high-speed USB device number 2 using xhci_hcd
[   10.567890] usb 1-1: New USB device found, idVendor=xxxx, idProduct=xxxx
[   10.567890] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
...

Временные метки в начале каждой строки указывают на время, прошедшее с момента запуска системы.

Поскольку вывод может быть очень длинным, часто бывает полезно направить вывод команды dmesg в постраничный просмотрщик, такой как less или more. Это позволяет вам просматривать вывод по страницам.

Попробуйте следующую команду:

dmesg | less

Теперь вы можете использовать стрелки на клавиатуре для прокрутки вверх и вниз и нажать q для выхода из less.

Вы также можете отфильтровать вывод команды dmesg с помощью grep, чтобы найти определенные ключевые слова. Например, чтобы увидеть сообщения, связанные с USB - устройствами, вы можете использовать:

dmesg | grep -i usb

Опция -i делает поиск регистронезависимым.

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

Нажмите Продолжить, чтобы перейти к следующему шагу.

Проверка буфера в /proc/kmsg

На предыдущем шаге вы использовали команду dmesg для просмотра кольцевого буфера ядра. Теперь давайте узнаем, откуда dmesg берет свою информацию. Кольцевой буфер ядра представлен в виде виртуального файла в файловой системе /proc, а именно по пути /proc/kmsg.

Файловая система /proc - это специальная файловая система в Linux, которая предоставляет информацию о процессах и другой системной информации. Это способ, которым ядро общается с программами в пользовательском пространстве. Файлы в /proc не являются реальными файлами на диске; они создаются ядром в режиме реального времени при доступе к ним.

Файл /proc/kmsg содержит те же сообщения ядра, которые отображает dmesg. Однако чтение напрямую из /proc/kmsg несколько отличается. Команда dmesg обрабатывает и форматирует вывод для более удобного чтения, в то время как прямое чтение /proc/kmsg дает вам необработанные сообщения.

Давайте попробуем прочитать содержимое /proc/kmsg с помощью команды cat.

Если терминал еще не открыт, откройте его.

Введите следующую команду и нажмите Enter:

cat /proc/kmsg

Вы, возможно, увидите некоторый вывод, но он может быть не так удобен для чтения, как вывод dmesg. Кроме того, чтение /proc/kmsg иногда может блокировать выполнение, если нет новых сообщений, или может показать уже прочитанные сообщения.

<level>message
<level>message
...

Часть <level> указывает уровень журнала сообщения (например, критическое, ошибка, предупреждение, информация, отладка).

Хотя вы можете читать /proc/kmsg напрямую, dmesg является стандартным и рекомендуемым инструментом для просмотра кольцевого буфера ядра, так как он предоставляет лучшие возможности по форматированию и фильтрации. Понимание того, что /proc/kmsg является источником, помогает вам понять, как работает dmesg "под капотом".

В большинстве практических случаев вы будете использовать dmesg, а не читать /proc/kmsg напрямую. Этот шаг в основном призван показать вам исходный источник вывода dmesg.

Нажмите Продолжить, чтобы перейти к следующему шагу, где мы рассмотрим более современную систему логирования.

Просмотр журналов с помощью journalctl

На предыдущих шагах вы узнали о кольцевом буфере ядра и о том, как просматривать его содержимое с помощью команды dmesg. Хотя dmesg отлично подходит для просмотра сообщений ядра, современные системы Linux используют более комплексную систему логирования, называемую systemd-journald. Команда journalctl является основным инструментом для взаимодействия с журналом systemd-journald.

systemd-journald собирает журнальные сообщения из различных источников, включая ядро (как те сообщения, которые вы видели с помощью dmesg), системные сервисы, приложения и даже стандартный вывод и стандартную ошибку процессов. Он хранит эти журналы в структурированном, проиндексированном формате, что упрощает поиск и фильтрацию сообщений.

Давайте рассмотрим команду journalctl.

Если терминал еще не открыт, откройте его.

Введите следующую команду и нажмите Enter:

journalctl

Эта команда отобразит все журнальные сообщения, собранные systemd-journald. Как и в случае с dmesg, вывод может быть очень длинным и обычно автоматически передается в постраничный просмотрщик, например, less.

-- Journal begins at Tue 2024-07-23 10:00:00 UTC, ends at Tue 2024-07-23 10:30:00 UTC. --
Jul 23 10:00:01 hostname systemd[1]: Starting Network Manager...
Jul 23 10:00:02 hostname kernel: Linux version 5.15.0-xx-generic (...)
Jul 23 10:00:03 hostname systemd[1]: Started Network Manager.
Jul 23 10:00:04 hostname systemd[1]: Starting OpenSSH server daemon...
...

Вы можете использовать стрелки на клавиатуре для прокрутки и нажать q для выхода из постраничного просмотрщика.

У команды journalctl есть множество опций для фильтрации журналов. Вот несколько примеров:

Для просмотра только сообщений ядра (аналогично dmesg):

journalctl -k

Для просмотра журналов определенного сервиса, например, сервиса SSH:

journalctl -u ssh.service

Для просмотра журналов с определенного времени, например, с "сегодня":

journalctl --since "today"

Для просмотра самых свежих журналов и отслеживания новых сообщений по мере их поступления (как tail -f):

journalctl -f

Нажмите Ctrl+C для выхода из команды journalctl -f.

journalctl - это мощный инструмент для системного администрирования и устранения неполадок. Он предоставляет централизованное место для хранения журналов и гибкие опции для их просмотра и фильтрации.

Попробуйте некоторые из опций journalctl в своем терминале, чтобы увидеть, как они влияют на вывод.

Нажмите Продолжить, чтобы завершить этот практический урок.

Резюме

В этом практическом уроке вы узнали, как проверить, активен ли кольцевой буфер ядра в Linux. Вы начали с использования команды dmesg для просмотра содержимого кольцевого буфера ядра, который хранит важные сообщения о аппаратном обеспечении, драйверах устройств и системных событиях. Вы увидели, как dmesg отображает эти сообщения с временными метками, предоставляя низкоуровневый журнал системной активности.

Вы также узнали, что вывод dmesg может быть обширным, и перенаправление его в постраничный просмотрщик, такой как less или more, является полезной техникой для навигации по выводу. Этот первый шаг показал основной метод доступа к содержимому кольцевого буфера ядра и понимания его роли в мониторинге и устранении неполадок системы.