linux的硬件时钟
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux的硬件时钟相关的知识,希望对你有一定的参考价值。
参考技术A 什么是硬件时钟?记录在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系统时间硬件时间(datetzselectclockhwclockntpdate)
1、系统时间和硬件时间
在Linux中有硬件时钟与系统时钟两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。所有Linux相关指令与函数都是读取系统时钟的设定。因为存在两种不同的时钟,那么它们之间就会存在差异。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。
用date命令对系统时间进行设置后,并不会去修改硬件时钟,所以系统重启后,系统时间还算会去读取硬件时间,这就是为何date设置失效到原因。
因此,需要在设置系统时间后,将系统时间同步到硬件时钟。
2、系统时间
查看时间:date
查看时区:date -R
修改时间:date -s (date -s 06/22/96, date -s 13:52:00)
修改时区:tzselect #按照提示进行选择时区
将当前时间和日期写入BIOS,避免重启后失效:hwclock -w
3、硬件时间
clock/hwclock两个命令相同
命令参数:
-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)
4、同步网络时间
ntpdate 210.72.145.44
定时同步时间:* * * * * /usr/sbin/ntpdate 210.72.145.44 > /dev/null 2>&1
(210.72.145.44 中国西安授时中心的官方时间同步服务器IP域名)
5、用配置文件
也可以用配置文件搞时区,但不建议这么弄,就不学习它了,其他的能不能配置文件搞不清楚。
以上是关于linux的硬件时钟的主要内容,如果未能解决你的问题,请参考以下文章
Linux: 硬件时钟, 系统时钟, 网络时钟, 时区修改和同步
Linux: 硬件时钟, 系统时钟, 网络时钟, 时区修改和同步
Linux系统时间硬件时间(datetzselectclockhwclockntpdate)