如何理解hwclock的输出与设置?
本篇博客属于归档性质,将先前记录于其他地方的文档收录回来。本文源自: http://my.oschina.net/doomred/blog/351273
别被那群不懂时间的M$开发人员给拖低了智商, 改变从将硬件时间设为UTC时区开始!
那么你会说,怎么检查我的硬件时间是不是utc时间呢??
$ hwclock --localtime
如果上面这条命令的输出和UTC(GMT)时间同样的话,那就对啦,否则,还是看看下文吧。
有些操作系统会很傻X的不分 hwclock 与 localtime (是M$, 如果你没听出来我指的是谁的话),当然了,我们的先进多用户操作系统是不会这么干的,通常来说一台POSIX机器总是会把机器内部时钟调整到UTC(也就是格林威治(GMT)时间),然后再通过hwclock这个工具在启动时,由内核读取转换为sysclock,通常来说x86平台下,sysclock要比hwclock更精准。
背景知识说了那么多,到底怎么将hwclock设置为UTC时间呢?
一、离线手动调
1) 将UTC时间设为本地时间,以便设置hwclock
$ sudo cp /usr/share/zoneinfo/UTC /etc/localtime
2) 时间需要是格林治时间(或者称为UTC时间)
$ sudo date MMDDhhmm[YEAR][.SS]
3) 将sysclock同步到硬件时间(就是BIOS里面的时间),同时指定硬件时间已经是UTC时区
$ sudo hwclock --systohc --utc
4) 将本地时间设为北京时间(没错,没有Beijing这个zoneinfo),不信自己 tzselect
$ sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
5) 将检查本地时间,是不是改回CST时区(+0800)来了。
$ date
很让人无语的是,man手册也里关于 –localtime 的说明,实际上仅仅是和 –set –systohw –ajust 关同时用的。让我们用debug信息说出事实(也是唯一的不看source得知的唯一途径):
$ sudo hwclock --localtime --debug #假定硬件时间是本地zoneinfo的时区
hwclock from util-linux 2.27
Using the /dev interface to the clock.
Assuming hardware clock is kept in local time.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 2015/10/07 13:50:21
Hw clock time : 2015/10/07 13:50:21 = 1444197021 seconds since 1969
Time since last adjustment is 1444197021 seconds
Calculated Hardware Clock drift is 0.000000 seconds
Wed 07 Oct 2015 01:50:20 PM CST .858632 seconds
$ sudo hwclock --utc --debug #假定硬件时间是UTC时区
hwclock from util-linux 2.27
Using the /dev interface to the clock.
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 2015/10/07 13:50:54
Hw clock time : 2015/10/07 13:50:54 = 1444225854 seconds since 1969
Time since last adjustment is 1444225854 seconds
Calculated Hardware Clock drift is 0.000000 seconds
Wed 07 Oct 2015 09:50:53 PM CST .921260 seconds
二、systemd MAGIC
$ sudo timedatectl set-time "yyyy-MM-dd hh:mm:ss"
就这么搞定了,systemd woo-yeahh!!
参考资料:
http://www.linuxfromscratch.org/hints/downloads/files/time.txt
how to set hwclock to utc via:
stackoverflow