问题描述
观察到服务器时间提前了3分钟,在使用 date -s 命令修改时间后,经过一段时间,时间再次提前了3分钟。
问题排查
首先,检查是否存在与时间同步相关的 ntp 或 chrony 进程(包括容器内的进程):
ps aux | grep -E 'ntp|chrony|vdso|vmtoolsd|qemu-ga'

问题分析
在名为 admin312 的服务器上,存在两种时间同步机制:
- VMware 宿主机级同步:vmtoolsd 正在运行,默认情况下每30秒将宿主机时间同步到虚拟机。
- chronyd 服务:如果配置了 NTP 源,chronyd 服务会逐渐调整时间以保持同步。
解决方案
方案一:禁用所有时间同步
通过禁用所有时间同步功能,可以手动管理时间,适用于需要频繁更改时间的测试场景。
- 禁用 VMware Tools 时间同步:
# 禁用 VMware Tools 时间同步 vmware-toolbox-cmd timesync disable # 验证状态 vmware-toolbox-cmd timesync status # 应显示 "已禁用" - 停止并禁用 chronyd 服务:
# 停止 chrony 服务 systemctl stop chronyd # 禁用 chrony 开机自启 systemctl disable chronyd # 检查 chrony 是否已停止 ps aux | grep chronyd - 手动设置时间:
# 改系统时间 date -s "2025-11-18 18:40:00" # 写回硬件时钟 hwclock --systohc
方案二:仅使用 chrony
禁用 VMware Tools 时间同步,保留 chronyd 服务进行时间同步,需要配置一个可靠的 NTP 时间源。
- 配置 NTP 时间源:
# 编辑配置文件 vim /etc/chrony.conf # 重启服务 systemctl restart chronyd # 查看同步状态 timedatectl
方案三:仅使用 VMware Tools
关闭 chronyd 服务,仅依赖 VMware Tools 进行时间同步。需要注意的是,某些环境下可能不允许虚拟机直接访问宿主机的详细信息。
- 尝试获取宿主机信息:
/usr/bin/vmtoolsd --cmd "info-get guestinfo.esxhost" - 登录宿主机,继续执行排查命令:
ps aux | grep -E 'ntp|chrony|vdso|vmtoolsd|qemu-ga'
进一步排查
在某些情况下,可能有其他脚本或进程定期运行 ntpdate -u 10.0.31.127 命令,导致时间被强制同步。为了捕获这些进程,可以使用以下方法:
- 打开两个终端窗口(或使用 screen)。
- 在终端 A 中,实时监控 ntpdate 进程:
while true; do pid=$(pgrep -n ntpdate) if [[ -n $pid ]]; then echo "=== ntpdate PID $pid spotted ===" ps -fp "$pid" cat /proc/$pid/cmdline | tr '\0' ' '; echo ls -l /proc/$pid/exe lsof -p "$pid" | grep -E 'txt|cwd' break fi sleep 1 done - 在终端 B 中,手动更改时间以加速捕获过程:
date -s "2025-11-18 18:10:00"


最终分析
通过捕获到的信息发现,Parastor 存储套件的主守护进程 /home/parastor/bin/oMgcd 定期调用 ntpdate -u 10.0.31.127 进行时间同步。由于这是商用分布式存储自带的健康检查和集群同步逻辑,直接终止或修改二进制文件可能会导致集群告警。
进一步检查 10.0.31.127 的时间同步情况:

尽管 NTP 未启用,但时间已经与其他外部源同步。这意味着可以使用方案一中的手动修改时间命令来调整时间。


雷达卡


京公网安备 11010802022788号







