这几天发现公司服务器上的时间比现实时间快了一天,可能导致一些不可逆转问题,比如网站积分会受影响,日志问题。用date修改下结果出现了立刻还原的故障问题,想写入硬件时间,但是hwclock –rw命令又有问题,具体操作如下:
[[email protected] ~]# date
Tue Sep 8 19:39:49 HKT 2015
[[email protected] ~]# date 090811392015
Tue Sep 8 11:39:00 HKT 2015
[[email protected] ~]# date
Tue Sep 8 19:41:20 HKT 2015
[[email protected] ~]# hwclock
Cannot access the Hardware Clock via any known method.
Use the --debug option to see the details of our search for an access method.
[[email protected] ~]# hwclock -rw
You have specified multiple functions.
You can only perform one function at a time.
[[email protected] ~]# hwclock --debug
hwclock from util-linux-2.13-pre7
hwclock: Open of /dev/rtc failed, errno=19: No such device.
No usable clock interface found.
Cannot access the Hardware Clock via any known method.
[[email protected] ~]# vim /etc/syscyl.conf
xen.independent_wallclock=1
[[email protected] ~]# hwclock -w --debug
hwclock from util-linux-2.13-pre7
hwclock: Open of /dev/rtc failed, errno=19: No such device.
No usable clock interface found.
Cannot access the Hardware Clock via any known method.
等一系列操作还是没效果,更改不了硬件时间,写入bois。查看系统版本信息
[[email protected] ~]# uname -a
Linux bogon 2.6.18-194.el5xen #1 SMP Tue Mar 16 22:01:26 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
[[email protected] ~]# cat /proc/version
Linux version 2.6.18-194.el5xen ([email protected]) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Tue Mar 16 22:01:26 EDT 2010
【参考解决方案】
CentOS在安装完新内核之后,每次重启之后时钟总是会发生一些变化,使得系统时钟不准确。在多操作系统的情况下(例如windows和 linux双系统),还可能会出现时区的偏差,而且无论如何设置,在重启之后都会恢复原样。
计算机设计者在主板上设置了一个硬件时钟,由主板上的一块纽扣电池(Cell)供电,这个硬件时钟无论计算机电源是否接通都会不停的数秒,来计算当前时间。操作系统在启动的时候,会调用一段程序来读取主板上的硬件时钟,并记录在操作系统的一个(或一组)变量中。自此之后,操作系统的时钟便脱离主板的硬件时钟,开始单独运行(操作系统时钟的运行是由时钟中断来驱动的,不同于主板上的时钟)。
无论做工多么精细,主板硬件时钟和由时钟中断维护的操作系统内的时钟多多少少会有一些误差。所以,操作系统在每次关闭的时候会调用另一段程序,将操作系统 内的时钟写到主板硬件时钟里(这样设计是不是说明时钟中断比主板硬件时钟更准确一些呢?)。类似的,当用户在操作系统内修改时钟之后,也不会立即写入主板 时钟,而是在关机的时候写入硬件时钟。
主板上的硬件时钟在Linux操作系统中呈现为一个设备,设备名称为rtc(Real Time Clock)。
使用旧的系统(如CentOS的2.6.18内核)编译新内核时,在调用mkinitrd命令时,会将/dev/rtc生成好,放到initrd- x.x.x.img文件中;而新的内核是自己生成/dev/rtc文件的,当kernel生成/dev/rtc时,发现系统内已经有了这个设备,于是就会 创建/dev/rtc0设备。这时hwclock程序仍然会读取rtc设备,就会造成设备读写失败。运行hwclock –debug命令可以看到如下输出:
[[email protected] ~]# hwclock --debug hwclock from util-linux-2.13-pre7 hwclock: Open of /dev/rtc failed, errno=19: No such device. No usable clock interface found. Cannot access the Hardware Clock via any known method.
其实,对应这个问题,新版的hwclock已经做出了调整。新的hwclock会主动去寻找/dev/rtc0设备,来操作主板硬件时钟。于是,解决方法就出现了。
就把外围应用程序hwclock也换成新的。下载完成之后,编译该程序:
1 2 3 4 tar xfv util-linux-ng-2.17.tar.bz2 cd util-linux-ng-2.17 ./configure make
编译完成之后,将生成的hwclock文件拷贝到指定位置即可:
1 cp hwclock/hwclock /sbin/
之后,操作系统和主板的硬件时钟就可以同步起来了。