저는 Debian Stretch와 Linux 커널 버전 4.9.110-3+deb9u4를 수정된 구성으로 실행하고 있습니다. 다음과 같은 이상한 동작을 관찰했습니다.
- 하드웨어 시계를 다음으로 설정하세요.
2016-01-01 00:00:00 UTC
- 재시작
dmesg
이전에 설정된 것과 유사한 하드웨어 시계 읽기를 보고합니다.date
보고서2016-11-03 17:16:42 UTC
위의 동작은 이전 날짜에 관찰되었을 것입니다 2016-11-03 17:00:00 UTC
. 더 이상 좁히지 않았어요.
커널 소스 코드는 변경되지 않았으며 사용자 정의 커널 모듈을 실행하고 있지 않습니다. 또한 Debian 저장소의 4.9.168 커널과 Stretch-backports의 4.19.37 커널을 사용하여 이를 관찰했습니다. Stretch와 4.9.168을 실행하는 DigitalOcean Droplet에서도 이것을 재현할 수 있었습니다.
2016-11-03 이후에 날짜를 설정하면 이 문제가 발생하지 않습니다. 그럴 것 같지는 않지만 커널은 최소 날짜를 적용하는 것 같습니다.
누구든지 이것에 대한 단서를 가지고 있습니까?
내 가상 머신의 로그:
root@debian-vm:~# timedatectl
Local time: Thu 2016-11-03 17:17:02 UTC
Universal time: Thu 2016-11-03 17:17:02 UTC
RTC time: Fri 2016-01-01 00:29:00
Time zone: Etc/UTC (UTC, +0000)
Network time on: yes
NTP synchronized: no
RTC in local TZ: no
root@debian-vm:~# dmesg | grep rtc
[ 0.985653] rtc_cmos 00:01: registered as rtc0
[ 0.985670] rtc_cmos 00:01: alarms up to one month, y3k, 114 bytes nvram, hpet irqs
[ 1.032409] rtc_cmos 00:01: setting system clock to 2016-01-01 00:28:37 UTC (1451608117)
DigitalOcean Droplet의 로그:
root@debian-s-1vcpu-1gb-sfo2-01:~# timedatectl
Local time: Thu 2016-11-03 17:17:05 UTC
Universal time: Thu 2016-11-03 17:17:05 UTC
RTC time: Fri 2016-01-01 00:00:46
Time zone: Etc/UTC (UTC, +0000)
Network time on: yes
NTP synchronized: no
RTC in local TZ: no
답변1
이것은 Linux 커널이 아니라 systemd에 있는 것으로 나타났습니다. systemd 시계 유틸리티는 정의된 최소 시계 값으로 구축되었으며, RTC에서 읽은 시간이 해당 시계 시간보다 이전인 경우 시스템 시계를 해당 최소 시간으로 강제 설정합니다. 이 "최소 시간"은 Meson 빌드 시스템에서 지정하거나 빌드 환경에서 NEWS 파일 생성 시간에서 읽을 수 있습니다.
다음 로그는 systemd가 시계를 앞당기고 최소 시계 값을 표시함을 보여줍니다.
root@debian-vm:~# journalctl -b | grep time | grep systemd
Nov 03 17:16:43 debian-vm systemd[1]: System time before build time, advancing clock.
root@debian-vm:~# date --date="$(uptime -s)" +%s
1478193400
root@debian-vm:~# uptime -s
2016-11-03 17:16:40
최소 클럭을 확인하는 systemd 소스 코드를 볼 수 있습니다여기