Linux中 /dev/rtc to wait for clock

tick timed故障的解决

故障描述:

一台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

方法二:换用其他内核rtc模块

用如下方法测试哪个模块好用:

# modprobe rtc

# hwclock --show

# rmmod rtc

# modprobe genrtc

# hwclock --show

# rmmod genrtc

# modprobe rtc_dev

# hwclock --show

# rmmod rtc_dev

方法三:这个方法也是在网上看到,很经典!将BIOS的时间调慢8小时就可以了!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐