HP BL460c Gen9、 ESXi4、虚拟机(BIOS)、Linux客户机(含VCSA)之间的时间同步关系

    Linux 时钟分为系统时钟(System Clock)和硬件(Real Time Clock ,简称RTC)时钟( 硬件时钟从根本上讲是CMOS时钟)。系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟,这个硬件时钟可以在BIOS中进行设置。当Linux 启动时,硬件时钟会去读取系统时钟的设置,然后系统时钟就会独立于硬件运作。

1、在 vCenter Server Appliance 中配置时间同步设置:(与NTP服务器168.192.11.63同步)

https://docs.vmware.com/cn/VMware-vSphere/6.5/com.vmware.vsphere.vcsa.doc/GUID-6C202AED-91DE-4D20-B95D-0A71D101312C.html

    启用周期性时间同步时,VMware Tools 将客户机操作系统的时间设置为与主机的时间相同( 运行命令启用 VMware Tools 时间同步: timesync.set --mode host), 执行时间同步之后, VMware Tools 会 每分钟检查一次,以确定客户机操作系统和主机上的时钟是否仍然匹配。如果不匹配,则将同步客户机操作系统上的时钟以与主机上的时钟匹配。本机时间同步软件(例如网络时间协议 (NTP))通常比 VMware Tools 周期性时间同步更准确,因此成为用户的首选。您可以在  vCenter Server Appliance 中仅使用一种形式的周期性时间同步。如果您决定使用本机时间同步软件,则会禁用  vCenter Server Appliance VMware Tools 周期性时间同步,反之亦然。

    以下步骤 设置  vCenter Server Appliance  使用基于 NTP 的时间同步:

    需ssh 168.192.11.248登录到VCSA操作: 通过运行  ntp.server.add  命令将 NTP 服务器添加到  vCenter Server Appliance  配置中:ntp.server.add --servers 168.192.11.63

    ntp.get  //显示Status:Down  Servers:168.192.11.63

    timesync.set --mode NTP   // 运行该命令以启用基于 NTP 的时间同步

    timesync.get    // 运行该命令,返回“Mode NTP”,确认已成功应用 NTP 同步

     ntp.get  // 命令返回配置Status:Up  Servers:168.192.11.63( NTP 同步的服务器的空格分隔列表)。如果已启用 NTP 同步,此命令返回 NTP 配置处于启用状态。如果已禁用 NTP 同步,此命令返回 NTP 配置处于禁用状态。

2、 ESXi4( 168.192.11.246:VMkernel ESXi4 6.0.0 #1 SMP Release build-2494585 Feb  5 2015 19:07:22 x86_64 x86_64 x86_64 ESXi) 查看系统时钟:使用命令esxcli system time get或者 date,查看硬件时钟:esxcli hardware clock get。

ESXi5/6/7等系统内固定使用UTC时间,而且将此时间(不可配置)写入到BIOS时间。启动时读取BIOS时间,作为系统时间。--->测试OK,但是得等几分钟才自动写入到BIOS。 

    在 ESXi4上新启动或重启虚拟机,虚拟机RHEL6.5系统的时间与 ESXi4主机同步一致。在 虚拟机RHEL6.5系统修改时间,并写入BIOS硬件时间,不会改变 ESXi4主机的时间。

https://www.cnblogs.com/ncepu/p/13695093.html (hwclock命令参数及用法详解--Linux显示/设置硬件时钟命令)

hwclock --systohc 将系统时间写入BIOS( hwclock --hctosys使用BIOS时间更新系统时间

hwclock --show 显示BIOS时间已修改为与系统时间一致

[root@FDP-1 18]# hwclock

    2021年02月18日 星期四 13时15分08秒  -0.922517 seconds  (指误差,权威解释如下:)

Display on Standard Output the value of the Hardware Clock, which is described by these arguments:

     referenceTime: The system time at which this program started (so,the moment at which the user wanted to know the time)

     readTime: The system time at which we read the clock.

float const displayDelay = time_diff(readTime, referenceTime);

 printf("%s %s  %.6f seconds %s\n", 

               ctime2(hclockTime),

               synchronized ? "" : "+", -(displayDelay)

               brokenTime.tm_isdst ? tzname[1] : tzname[0]);

在ESXi4执行date查看:时间未更新,即修改虚拟机的BIOS硬件时间不会更新 ESXi4的系统时间。

*:虚拟机一般要安装vmtools,可以让虚拟机和主机的时间进行同步,所以只需要更改主机时间就可以了,虚拟机的时间会自动同步。

                    图 1

VMware Tools

    管理虚拟机的电源控制并运行 VMware Tools 脚本。还可以在关闭电源再打开过程中升级 VMware Tools,并可将客户机时间与主机时间同步。—— 当勾选“同步客户机时间与主机时间”时,在客户机RHEL6.5系统时间在运行中保持与 主机时间同步, 经测试,同步不会跳变,会逐步缩小时间偏差,直到保持一致。不勾选,时间不会同步。所以当 客户机RHEL6.5例如FSDP1开启NTP服务时,应该不勾选 “同步客户机时间与主机时间”,或者 勾选“同步客户机时间与主机时间”后,关闭 FSDP1的NTP服务。

https://docs.vmware.com/cn/VMware-vSphere/6.5/com.vmware.vsphere.vm_admin.doc/GUID-6655E405-85EA-4F05-91FB-5BAF12C2B96E.html

3、修改 ESXi4主机系统时间的方法。

1)ssh登录 ESXi4系统,date命令修改时间不行![root@ESXi4:~] date -s 02:20:50

——date: Setting date not supported; use < esxcli system time set>

2) ESXi4主机是不能用date命令来设置时间的,需要使用esxcli命令:

 esxcli system time set  -H 16 -m 01 -s 10    // 更改esxi系统时间 Set the system clock time         

      -d|--day=       Day

      -H|--hour=      Hour

      -m|--min=       Minute

      -M|--month=     Month

      -s|--sec=       Second

      -y|--year=      Year

esxcli system time get     //Disply the current system time 显示当前系统时钟

esxcli hardware clock get  //Disply the current hardware clock time 显示当前硬件 RTC时钟

RHEL6.5系统:hwclock --systohc 将系统时间写入bios,但是esxi没有类似命令!需使用esxcli hardware clock set -H 16 -m 01 -s 10设定(实际ESXi5/6/7会自动将系统时钟写入硬件时钟)。

3) 在vSphere Web Client中 ESXi主机的“时间配置”中修改时间,即修改 ESXi的 系统时钟,并自动写入硬件时钟——OK!

                                                       图 2

4、综上,只需按《图2》设置每台ESXi4开启NTP服务与GPS服务器(11.63)同步系统时钟即可,ESXi4会自动将系统时钟写入ProLiant BL460c Gen9服务器的硬件时钟,所以即使重启ESXi4时钟也OK,然后按《图1》通过vmtools设置,可以让虚拟机和主机的时间进行同步,这样在ESXi4上新启动或重启虚拟机的时钟也OK。

5、 WINDOWS系统自动同步硬件时钟

https://answers.microsoft.com/zh-hans/windows/forum/all/%E7%B3%BB%E7%BB%9F%E8%87%AA%E5%8A%A8%E5%90%8C/0cc50682-d314-453f-892f-94d60f70c39d

Windows server 2012 操作系统,在服务器没有进行重启、也没有进行ntp同步,系统自己去同步了硬件时钟。

—— 系统自动同步硬件时钟,是为了将时间更改储存给硬件,以便下次启动时即使用其自动同步的时间。在使用默认时间同步服务器(不进行任何更改)的情况下,理论上,其同步的时间一定是准确的。出现系统时间不准确的原因,可能是您错误的设置了时区造成的,将时区更改,将会自动转换时间。

6、hwclock --set --date=<日期与时间> 设定硬件时钟,重启系统后在BIOS中不是你设定的值?

——原来是因为不管你改没改硬件时间, 系统在关机的时候都会将当前的系统时间写入BIOS(之前的hwclock白改……),所以说你用hwclock --set --date="2021-2-13"确实改了硬件时间,但是在关机的时候,这个时间又被当前系统时间给覆盖了。

https://blog.csdn.net/ArtCodes/article/details/4032287

BIOS中没有时区的概念,操作系统开机从BIOS读写时间有两种情况:

时间处理方法1.  存储 UTC的秒数那么整个系统的开关机过程将为:

        关机:CST(时区变化,加减相应的小时)->UTC->bios-------------在这种情况下,在bios中看到的就是UTC时间(由于bios中没有时区的概念,所以你要像看懂这个时间代表的是什么地方的时间,一定要明白它由谁存的数,还有这个数原本代表了什么意义,如是那个时区的)

       开机:bios->UTC->CST(时区变化)

时间处理方法2.  存储CST的秒数那么整个系统的开关机过程将为:( 经过实际测试发现, 现在操作系统的默认存储方法都是采用的是第二种方法,就是直接存储 CST 时间

       关机:CST(不用时区变化了,之间化为秒数后)->bios-------------这个时候你在bios中看到的时间就是有时区的

       开机:bios->CST

7、在实验室环境,比如修改FSDP1的系统时间(date -s),重启系统,虽然 系统在关机的时候都会将当前的系统时间写入BIOS( 修改虚拟机的BIOS硬件时间不会更新 ESXi4的系统时间), 但是不像物理服务器, ESXi上虚拟机的BIOS没有电池,所以系统再次启动时, ESXi系统的UTC时间,会先写入到BIOS, FSDP1启动时读取BIOS时间,作为系统时间。所以关键是 需按《图2》设置每台ESXi4开启NTP服务与GPS服务器(11.63)同步系统时钟,否则虚拟机重启时钟不对,偏差过大,也会导致与 NTP服务器(11.63)对时失效。

请使用浏览器的分享功能分享到微信等