故障描述:
一台IBM x3850发现系统时间比正确时间变快了8小时。而且已经确认BIOS时间是绝对正确的。且clock 和hwclock都不能使用,有以下报错:select() to /dev/rtc to wait for clock tick timed out。
故障分析:
计算机系统有两个时钟,一个是 BIOS(CMOS),或者说“硬件时钟”,还有一个就是“系统(操作系统)时钟”,如果这两个时钟的设置上有问题,或者Linux 的时钟配置文件不正确的话,就会产生系统时钟差 8 小时的问题。或读的是硬件时间这没错,然而系统把他当成UTC时间,然后自己加了8小时,得到他所认为的local time.
clock 和hwclock不能使用,出现报错:select() to /dev/rtc to wait for clock tick timed out,原因是不能读取/dev/rtc,也就是硬件时间。这又是因为某些机器的BIOS处理方式和Linux的rtc内核模块之间出现了问题。
Linux 又有3个这类模块,rtc/genrtc/rtc_dev,似乎是一个比一个新,有些Linux系统通常自己用的是rtc这个老模块;但Dell/ibm /acer等等厂商现在都可能使用新的BIOS,这种BIOS和这个rtc就可能不对付。如果出现了上面那个timeout的问题,使用下面的方法可以解 决:
故障解决:
给hwclock加参数,–directisa
1.检查/etc/localtime文件
localtime文件是Linux 的时钟设置文件,实际上这个文件是 /usr/share/zoneinfo 目录下对应文件的符号连接。假设我们所处的地区位于上海,那么只要运行以下的命令就可以设置时区了。
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2.检查/etc/sysconfig/clock文件
ZONE=Asia/Shanghai ##/usr/share/zoneinfo 下面的文件。
UTC=false ##硬件时钟是否为 UTC 或者说 GMT 时钟。
ARC=false ##如果是在 Alpha 机器上,则设置为 true 。
注:1.把硬件时钟设置为 UTC 的好处就是他能自动设置夏时制,缺点时,在安装有多重操作系统启动的机器上,在另外的操作
系统上时钟会错误。
2.如果以上两个文件的设定都没有问题,继续
3.vi /etc/sysconfig/clock
添加:CLOCKFLAGS=–directisa //直接以I/O指令存取硬件时间而不通过/dev/rtc设备来存取
4.vi /etc/rc.sysinit
将/etc/rc.sysinit里面关于hwclock的命令都加directisa参数 //使系统开机时可以读取硬件时钟
vi /etc/init.d/halt
将/etc/init.d/halt里面关于hwclock的命令都加directisa参数 //使系统关机时与硬件时钟同步
5.调整系统时间为正确时间
6.执行:hwclock –directisa –systohc
或
重启后执行:hwclock –systohc