나는 systemd-journald가 커널 부팅 후 로깅을 시작하고 스토리지 및 네트워크 서비스와 같은 시스템을 설정하는 데 시간이 걸린다고 생각합니다. 그러나 로그 로그에는 dmesg와 같은 커널 메시지가 있고 심지어 실제 타임스탬프도 있습니다. 하지만 커널은 초기 단계에서 RTC에서 실제 날짜/시간을 복구할 기회가 없습니다. Journald는 어떻게 커널 로그 메시지를 가져오거나 표시합니까?
답변1
/dev/kmsg
Journald는 커널 로그가 포함된 링 버퍼 에서 읽습니다 . 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
필드일기장에 포함된. 좀 더 확실해졌으면 좋겠어요.