linux的硬件时钟

linux的硬件时钟,第1张

什么是硬件时钟

    记录在CMOS中的时钟,和系统是没有关系的。是靠纽扣电池来保存和计数的。硬件时钟能记录的信息有且仅有一个时间值(注意,和时区没有一毛钱关系)。所以,当我们设置硬件时钟的时候,仅仅是设置了一个数值。当我们读取硬件时钟的时候,也仅仅是一个数值。

    每次 *** 作系统启动的时候,都会读取这个数值,然后同步到系统时钟中。但是光读取这个数值,对 *** 作系统而言毫无意义(它不知道,你这个数值具体是哪个时区下的时间,自然就无法同步到系统时钟)

    那么怎么知道硬件时钟记录的时间是哪个时区的呢(local or utc)?只能是人为指定了(系统启动的时候,自己指定。我认为系统自己指定也是人为指定的一种吧),我们下面看下例子(一个读,一个写),看看怎么解释(网上很多解释我觉的不靠谱)

这里哪里能看出人为指定的时区是什么呢?

缺省的就是这个文件/etc/adjtime指定的(很多人说centos 6中是/etc/sysconfig/clock这个文件。不解释了,忘记这个文件吧)

看下/etc/adjtime的内容:

这里是UTC,所以上面的读写含义分别是

    读取出来的这个硬件时间是UTC的,直接同步到系统时间(我认为系统时间存的是UTC时间)。如果读取出来的时间是LOCAL的,是不能直接同步系统时间的。先找到系统的时区文件/etc/localtime,根据当前时区计算出UTC时间,再同步到系统时间(还有一点,这里说一下, hwclock读取的时候,最后都是以local时间显示出来的,所以可能还有一层转换)

    把"2015-08-14 16:45:05"这个时间直接写入硬件时钟,同时更新/etc/adjtime的内容(方便下一次读的时候,找到正确的时区)

那怎么覆盖/etc/adjtime的内容呢?

    在读写的时候可以显示指定,例如hwclock --local,hwclock --utc(如果不显示指定,则使用/etc/adjtime的值)

在Linux中有硬件时钟与系统时钟两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。所有Linux相关指令与函数都是读取系统时钟的设定。因为存在两种不同的时钟,那么它们之间就会存在差异。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。

用date命令对系统时间进行设置后,并不会去修改硬件时钟,所以系统重启后,系统时间还算会去读取硬件时间,这就是为何date设置失效到原因。

因此,需要在设置系统时间后,将系统时间同步到硬件时钟。

clock/hwclock:

显示与设定硬件时钟(query and set the hardware clock (RTC)),两个命令相同。RTC=Real Time Clock,也就是硬件时钟。

命令参数:

-r, --show        读取并打印硬件时钟(read hardware clock and print result)-s, --hctosys     将硬件时钟同步到系统时钟(set the system time from the hardware clock)-w, --systohc     将系统时钟同步到硬件时钟(set the hardware clock to the current system time)

命令示例:

1. 查看硬件时钟

2014年03月27日 星期四 11时03分50秒  -0.328520 seconds

[root@localhost ~]# hwclock -r

2014年03月27日 星期四 11时03分53秒  -0.797264 seconds

[root@localhost ~]# hwclock --show

2014年03月27日 星期四 11时04分01秒  -0.672267 seconds

2. clock与hwclock相同

[root@localhost ~]# type -a hwclock

hwclock is /sbin/hwclock

hwclock is /usr/sbin/hwclock

[root@localhost ~]# ll /sbin/hwclock /usr/sbin/hwclock

-rwxr-xr-x. 1 root root 46940 11月 22 23:27 /sbin/hwclock

lrwxrwxrwx. 1 root root    18 3月  26 19:27 /usr/sbin/hwclock ->../../sbin/hwclock

[root@localhost ~]# type -a clock

clock is /sbin/clock

[root@localhost ~]# ll /sbin/clock

lrwxrwxrwx. 1 root root 7 3月  26 19:27 /sbin/clock ->hwclock

3. 同步系统时间到硬件时钟

[root@localhost ~]# hwclock2014年03月27日 星期四 18时50分51秒  -0.312960 seconds

[root@localhost ~]# date

2014年 03月 27日 星期四 10:50:55 CST

[root@localhost ~]# hwclock -w

[root@localhost ~]# hwclock2014年03月27日 星期四 10时51分15秒  -0.875387 seconds

同步网络时间到系统时间

[root@localhost ~]# ntpdate 210.72.145.4427 Mar 11:11:24 ntpdate[4766]: adjust time server 210.72.145.44 offset 0.011401 sec

210.72.145.44 (中国西安授时中心的官方时间同步服务器IP域名)

同步网络时间到系统时间后,就可以用hwclock -w将系统时间同步到硬件时间。

修改时区

可能部分系统在执行以上两步后,在重启后仍然失效,所以需要进行时区修改。

[root@localhost ~]# tzselect #按照提示进行选择时区

[root@localhost ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

修改系统时间配置文件

[root@localhost ~]# /etc/sysconfig/clock

#打开clock文件,将相关内容改成以下内容

UTC=false

ARC=false

ZONE="Asia/Shanghai"

重启系统

[root@localhost ~]# reboot

linux 的系统时间有时跟硬件时间是不同步的

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

Linux中的所有命令(包括函数)都是采用的系统时钟设置。在Linux中,用于时钟查看和设置的命令主要有date、hwclock和clock。其中,clock和hwclock用法相近,只用一个就行,只不过clock命令除了支持x86硬件体系外,还支持Alpha硬件体系


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/6272914.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-19
下一篇 2023-03-19

发表评论

登录后才能评论

评论列表(0条)

保存