先量化偏差再谈修正
时间线还原前必须把目标主机的时钟偏差量化出来,否则无法判断两条来源之间的时间差是时区问题、时钟漂移还是事件本身就有先后。Linux 上 chrony 的 chronyc tracking 会给出本机时钟相对参考源的当前差值,Windows 上 w32tm 的 stripchart 可以按样本对比参考源。测量值要连同测量时刻一起记录:漂移会随时间变化,一次读数只对相邻的一段时间有效。
基本信息
| Linux 工具 | chronyc tracking(差值)、chronyc sources(参考源状态)、ntpq -p(ntpd) |
|---|---|
| Windows 工具 | w32tm /stripchart /dataonly(对比参考源)、w32tm /query /status(同步状态) |
| 关键读数 | System time / Last offset(当前差值)、RMS offset(平均波动)、Frequency/Skew(漂移率) |
| 测量前提 | 需要与可信参考源通信;离线环境可用外部时钟或另一台已校准主机 |
| 记录要素 | 测量时刻、测得的偏移量与方向、使用工具与原始输出 |
| 误差考虑 | 网络往返与不对称会带入毫秒级误差,秒级以上偏差远超这一量级 |
典型使用场景
- 离线主机日志与流量时间对不上,先测出差值以确定修正量
- 判断差值是整数小时的时区错位,还是几十秒的时钟漂移
- 多台主机合并前逐台测量,避免用一台的偏移去修正全部
- 虚拟机暂停恢复后重新测量,确认是否发生跳变
- 域环境中确认客户端同步对象,测量域控比测量客户端更有意义
- 为报告给出时间精度说明:判定精度受时钟误差影响的程度
两侧测量
两侧测量
# chrony:看当前差值、平均波动与漂移率
chronyc tracking | sed -n '1,8p'
# 参考源列表与状态,确认是否真的同步上了
chronyc sources -v | sed -n '1,6p'
# 传统 ntpd 环境
ntpq -p
# Windows(管理员 PowerShell):对参考源取多个样本,仅要数据
w32tm /stripchart /computer:time.windows.com /samples:3 /dataonly
# Windows:查看当前同步状态与本机时间源
w32tm /query /status
# 记录测量时刻,作为修正区间的起点
date -u +"%Y-%m-%dT%H:%M:%SZ"chronyc tracking 读数逐项
| 读数 | 含义 | 判读要点 |
|---|---|---|
| Reference ID | 当前参考源 | 为 0 或异常值说明未同步成功,本轮读数不可用 |
| System time | 本机时钟相对参考源的差值(正为快) | 修正方向由它决定,务必抄下符号 |
| Last offset | 上一次校时的偏移量 | 与 System time 结合看趋势 |
| RMS offset | 偏移的均方根波动 | 数值大说明时钟不稳定,需更频繁测量 |
| Frequency | 本机晶振相对参考的漂移率(ppm) | 用于估算两次测量之间偏移的增长量 |
| Skew | 频率估计的误差范围 | Skew 很大时偏移推算不可靠 |
瞬时读数接近 0 不等于整段历史都没有偏移:若主机在此前长时间未同步,早期事件仍可能带有明显偏差。跨天分析要在多个时间点重复测量,比持续漂移量更有参考价值的是偏移随时间的变化趋势。
虚拟机时钟漂移通常比物理机大,快照恢复、暂停与迁移都可能造成一次性跳变;测量前先确认这段时间内有没有发生过快照恢复或宿主机高负载。