Journald는 커널로부터 시작 메시지를 어떻게 얻나요?

Journald는 커널로부터 시작 메시지를 어떻게 얻나요?

나는 systemd-journald가 커널 부팅 후 로깅을 시작하고 스토리지 및 네트워크 서비스와 같은 시스템을 설정하는 데 시간이 걸린다고 생각합니다. 그러나 로그 로그에는 dmesg와 같은 커널 메시지가 있고 심지어 실제 타임스탬프도 있습니다. 하지만 커널은 초기 단계에서 RTC에서 실제 날짜/시간을 복구할 기회가 없습니다. Journald는 어떻게 커널 로그 메시지를 가져오거나 표시합니까?

답변1

/dev/kmsgJournald는 커널 로그가 포함된 링 버퍼 에서 읽습니다 . dmesg동일한 버퍼에 액세스합니다. 나는 로그가 시작될 때까지 초기 커널 로그에 대한 "실제 날짜/시간"이 매우 정확하다고 생각하지 않습니다.

여기에 예가 있습니다. dmesg둘 다 journalctl시작과 동일한 오프셋을 표시합니다.

root@ubuntu:~# dmesg | head -n 1
[    0.000000] Linux version 5.4.0-131-generic (buildd@lcy02-amd64-108) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022 (Ubuntu 5.4.0-131.147-generic 5.4.210)

root@ubuntu:~# journalctl --quiet -k -b --output short-monotonic | head -n 1
[    0.000000] ubuntu kernel: Linux version 5.4.0-131-generic (buildd@lcy02-amd64-108) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022 (Ubuntu 5.4.0-131.147-generic 5.4.210)

그러나 초기 커널 로그 메시지의 실제 시간은 9초 이상 다릅니다.

root@ubuntu:~# dmesg --time-format iso | head -n 1
2022-11-02T20:29:35,000000+00:00 Linux version 5.4.0-131-generic (buildd@lcy02-amd64-108) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022 (Ubuntu 5.4.0-131.147-generic 5.4.210)

root@ubuntu:~# journalctl --quiet -k -b --output short-iso-precise | head -n 1
2022-11-02T20:29:44.345820+0000 ubuntu kernel: Linux version 5.4.0-131-generic (buildd@lcy02-amd64-108) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022 (Ubuntu 5.4.0-131.147-generic 5.4.210)

초기 커널 로그의 "실시간" 차이가 로그가 시작되기 전에 걸리는 시간에 가까운 것이 우연인지 궁금합니다.

[    8.335415] systemd[1]: Started Journal Service.

Journald가 시작된 후 "실시간" 거리는 매우 dmesg가깝지만 journalctl정확히 동일하지는 않습니다.

또 다른 예가 있습니다. 새로운 커널 로그를 작성합니다.

root@ubuntu:~# echo "THE TIME IS NOW: $(date --iso-8601=ns)" | tee /dev/kmsg
THE TIME IS NOW: 2022-11-02T22:17:22,986374849+00:00

오프셋은 동일하게 유지됩니다.

root@ubuntu:~# dmesg | tail -n 1
[ 6467.404507] THE TIME IS NOW: 2022-11-02T22:17:22,986374849+00:00

root@ubuntu:~# journalctl --quiet -b -k --output short-monotonic | tail -n 1
[ 6467.404507] ubuntu unknown: THE TIME IS NOW: 2022-11-02T22:17:22,986374849+00:00

"실시간"은 여전히 ​​약간 다릅니다.

root@ubuntu:~# dmesg --time-format iso | tail -n 1
2022-11-02T22:17:22,404507+00:00 THE TIME IS NOW: 2022-11-02T22:17:22,986374849+00:00

root@ubuntu:~# journalctl --quiet -b -k --output short-iso-precise | tail -n 1
2022-11-02T22:17:22.988718+0000 ubuntu unknown: THE TIME IS NOW: 2022-11-02T22:17:22,986374849+00:00

dmesg나는 우리가 열심히 일하고 있다고 믿는다시간 계산journalctl사용 시 오프셋 __REALTIME_TIMESTAMP필드일기장에 포함된. 좀 더 확실해졌으면 좋겠어요.

관련 정보