hwclock --systohc是将校准后的系统时间写入硬件时钟的唯一可靠方式,必须以root权限执行,否则重启后时间将回退;它不自动触发,需手动或定时调用,且chronyd、systemd-timesyncd等ntp服务默认均不执行该操作。

hwclock --systohc 是唯一可靠写入方式
系统时间(内核维护)和硬件时间(RTC,靠主板电池供电)默认是分离的。关机后系统时间丢失,下次启动时会从硬件时间加载——所以必须把校准后的系统时间主动写回硬件时钟,否则重启就退回误差值。
直接执行 hwclock --systohc 即可完成写入。它等价于 hwclock -w,但前者语义更清晰,推荐始终用这个写法。
- 必须以 root 或 sudo 权限运行,普通用户会报错
Permission denied - 不加
--utc参数时,默认按本地时区写入(多数中文环境是 CST);若系统设为 UTC 模式(如某些云主机),应加--utc,否则硬件时间会被误写成本地时间,导致双系统下 Windows 时间错乱 - 写入前建议先确认系统时间已准确:运行
timedatectl status看 “System clock synchronized” 是否为 yes,或手动用chronyc makestep/ntpdate -u pool.ntp.org校准过
systemd-timesyncd 不自动写回硬件时间
很多人以为启用 timedatectl set-ntp true 就万事大吉,其实 systemd-timesyncd 只管同步系统时间,完全不管硬件时钟。它甚至没有配置项能开启写回功能。
这意味着:即使你每天都在自动同步系统时间,只要没手动或定时执行 hwclock --systohc,一断电再开机,硬件时间仍是上次关机时的老值,系统又得花几十秒重新追赶。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 验证是否写回:关机前运行
hwclock --show记下时间,重启后立刻再运行一次对比 - 临时补救:在
/etc/rc.local或systemd开机服务里加一行hwclock --systohc(注意权限和执行时机) - 长期方案:配合 cron 定时写入,例如每小时一次:
0 * * * * /usr/bin/hwclock --systohc,但要注意避免与 chronyd 的makestep冲突
chronyd 默认也不写回,需额外配置
chrony 作为现代主流时间服务,比 ntpd 更智能,但它默认同样不会把系统时间写回硬件时钟。这个行为不是 bug,而是设计选择——避免频繁写入损耗 RTC 芯片寿命。
要让它开机/服务启动时自动写回,必须显式启用该功能:
- RHEL/CentOS 系统:编辑
/etc/sysconfig/chronyd,确保包含OPTIONS="-s"(-s表示 startup sync,即启动时调用hwclock --hctosys);同时需在/etc/chrony.conf中启用makestep并设置合理阈值,否则首次启动可能因偏差过大被跳过 - Debian/Ubuntu 系统:chrony 不读取
/etc/sysconfig/chronyd,需改用chronyd的-s启动参数。方法是创建/etc/systemd/system/chronyd.service.d/override.conf,内容为:[Service] ExecStart= ExecStart=/usr/sbin/chronyd -s -u chrony $DAEMON_OPTS
- 无论哪种系统,都建议搭配
timedatectl set-local-rtc false(设为 UTC 模式),避免双系统时间混乱
别信“重启自动同步”这种说法
很多文档说“系统启动时会自动从硬件时间加载并开始同步”,这没错,但反向操作(系统 → 硬件)从来不是自动发生的。Linux 内核只在启动初期读一次 RTC,之后全程由 NTP 客户端维护系统时间,硬件时间就像一块停摆的表,除非你动手去拨。
最容易被忽略的点是虚拟机场景:KVM/Xen 虚拟机常被宿主机强制同步时间(virsh domtime 或 qemu-ga),此时硬件时间根本不可信,hwclock --systohc 写入反而会导致时间漂移。判断方法:运行 timedatectl status,如果看到 “RTC in local TZ: no” 且 “PMP: active”,大概率是被虚拟化层接管了。










