修复:重新启动计算机(服务器)后,时钟恢复为错误的时间
在本文中,请仔细考虑为什么在笔记本电脑/计算机/服务器关闭,重新启动或者从休眠状态恢复后,系统时钟显示的时间和日期不正确。每次都会重置时间,我们必须手动进行设置。最典型的情况是:一个BIOS电池耗尽,以及一台计算机上涉及Windows/Linux双启动的更有趣的电池,以及带有Windows Server OS的HP ProLiant G9/G8服务器上的固件错误。
由于BIOS/CMOS电池电量不足,系统无法保存数据/时间
问题的典型答案为什么重新启动后我的计算机上会重置时间和日期?是BIOS(CMOS)电池电量耗尽。拔下计算机或者笔记本电脑时,此电池负责保持BIOS/UEFI设置,并提供对内置硬件时钟的自主操作。
如果电池电量耗尽,则在不给主板供电时,BIOS无法保留其设置,并且所有设置都将重置,包括当前日期和时间。如果计算机很旧,则很可能是电池没电了。我们强烈建议我们更换它。这并不难,而且该过程不需要任何特殊的工程技能。在大多数家庭甚至企业设备中,BIOS中都使用标准的3V CR2032电池。
如果电池更换没有帮助,请检查用于重置BIOS设置的跳线的状态(该跳线位于电池槽附近,并标记为CMOS/CLEAR/RESET)。可能有人将其留在RESET位置。因此,每次在主板上通电时,都会重置BIOS设置。将跳线移动到其正常位置。
下一个选项是更新主板的BIOS固件。请参阅硬件供应商的网站上的操作方法。较新的固件通常会修复不同的错误。
Windows:使用time.windows.com设置时钟同步
如果Windows中的日期/时间设置不断变化,则首先应检查当前时区设置以及与外部时间服务器的时间同步参数。在Windows 10中,我们可以在"控制面板->时钟和区域->日期和时间"中查看当前时间设置。在此示例中,我们可以看到指定了UTC + 01时区,并且启用了夏令时。
提示。我们可以使用tzutil工具或者PowerShell在命令提示符下的Windows中设置时区。
如果计算机未加入AD域,请使用外部时间源(NTP时间服务器)检查其时间同步设置。为此,请单击" Internet时间"选项卡,并确保已设置与" time.windows.com"服务器的自动同步。
对加入AD域的计算机的时间同步进行故障排除
如果计算机是Active Directory域的一部分,则需要了解AD域中时间同步的体系结构。
在Active Directory域中使用以下时间同步方案:
- PDC模拟器的FSMO角色所属的AD林中的根域控制器是该域所有其他DC的时间源;
- 其他DC与PDC同步时间;
- 普通域成员(服务器和工作站)根据AD拓扑将时间与最近的可用域控制器同步。
根PDC可以将其时间与外部源和自身同步(默认情况下)。
我们可以使用以下命令找到具有PDC角色的域控制器:
netdom /query fsmo
要在PDC上配置与外部NTP服务器的时间同步,请使用以下命令。
配置外部时间源:
w32tm /config /manualpeerlist:"0.nl.pool.ntp.org,0x1 1.nl.pool.ntp.org,0x1 2.nl.pool.ntp.org,0x1 3.nl.pool.ntp.org,0x1"
使此DC成为客户可靠的时间来源:
w32tm /config /reliable:yes
重新启动w32时间服务器以将DC时间与nl.pool.ntp.org时间服务器同步:
net stop w32time && net start w32time
我们可以查看同步源和状态:
w32tm /query /peers
在手动模式下启动同步:
w32tm /resync /rediscover
Windows和Linux在双重引导时显示不同的时间
我们应该分别考虑在双启动配置下在计算机上安装两个操作系统(Windows和Linux)的情况。我们可能会遇到一个问题,即在启动到另一个系统(在Windows之后启动到Linux)之后,时间要比实际时间提前或者晚几个小时。
Windows和Linux在BIOS时间上的工作方式有所不同。他们使用两种不同的时间格式:UTC和本地时间。
GNU/Linux操作系统(包括Mac OS X)假定BIOS中的时间为UTC格式(GMT)。因此,在引导时,Linux通过添加(或者分散)用户选择的当前时区的偏移量来转换UTC时间。这意味着为了获取雅典时区UTC + 2的本地时间,Linux将增加2个小时。
Windows认为BIOS中的时间保持本地时间格式,如果我们指定了新的时区或者与外部源同步的时间,则系统将对BIOS中的本地时间进行相应的更改。 Linux(在我的情况下为Ubuntu)认为BIOS中的时间是以UTC格式指定的,并增加了额外的时区偏移量。这就是为什么从Linux切换到Windows(反之亦然)时会出错的原因。
要解决此问题,我们应该使Windows在RealTimeIsUniversal注册表参数中使用UTC时间格式。
reg add "HKLMACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /t REG_DWORD /d 1 /f
提示。在64位Windows版本中,我们需要创建QWORD类型的参数,而不是DWORD类型的参数:
reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_QWORD /d 1
另外,在Windows中禁用与Internet的时间同步,因为每次更新Windows都会将UTC时间重置为本地时间。
sc config w32time start= disabled
重新启动Windows。
或者,我们可以使Linux使用本地时间。在Ubuntu 15.04或者更高版本中,我们可以使用以下命令进行操作:
timedatectl set-local-rtc 1
具有Windows Server的HPE服务器:重启后系统时间偏移
在运行Windows Server 2008 R2/2012 R2的HPE DL/ML Gen9服务器上更改时区之后,我的一位远程客户遇到了一个有趣的问题。事实证明,在HP ProLiant Gen9服务器(以及其中一台HP ProLiant DL580 Gen8服务器)上更改系统时间或者时区时,系统时间未保存,并在重启后重置为前一个。该问题发生在Windows Server以传统模式启动的服务器上(使用本机UEFI启动,没有任何时间更改问题)。
以下事件出现在系统日志中:
系统时间已从2019-01-29T13:12:27.923115700Z更改为 2019-01-29T12:12:28.500000000Z。更改原因:系统时间与硬件时钟同步。
作为此问题的解决方案,HP建议将ROM版本更新为至少1.5. 这是基于ROM的安装实用程序(RBSU)的版本,没有时间重置错误。
或者作为一种解决方法,我们可以设置BIOS为Windows提供UTC系统时间(而不是本地时间)。为此,正如我们上面已经讲过的,我们必须在注册表项HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation中创建一个名称为RealTimeIsUniversal且值为1的参数。