Chinaunix首页 | 论坛 | 博客
  • 博客访问: 100918
  • 博文数量: 11
  • 博客积分: 318
  • 博客等级: 二等列兵
  • 技术积分: 110
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-16 13:43
个人简介

兴趣和饭碗到底哪个更重要?

文章分类
文章存档

2019年(1)

2016年(5)

2014年(1)

2013年(1)

2012年(3)

分类: LINUX

2012-12-01 10:15:48

CentOS 5.x安装新内核之后时钟混乱问题
抄的。不要见怪

CentOS在安装完新内核之后,每次重启之后时钟总是会发生一些变化,使得系统时钟不准确。在多操作系统的情况下(例如windows和 linux双系统),还可能会出现时区的偏差,而且无论如何设置,在重启之后都会恢复原样。如何解决这个问题还得从操作系统的时钟原理开始。
1. 操作系统中的时钟
操作系统为实现其功能,必须知道当前外部世界的时间(年月日时分秒等)。为实现这一目的,计算机设计者在主板上设置了一个硬件时钟,由主板上的一块纽扣电池(Cell)供电,这个硬件时钟无论计算机电源是否接通都会不停的数秒,来计算当前时间。
操作系统在启动的时候,会调用一段程序来读取主板上的硬件时钟,并记录在操作系统的一个(或一组)变量中。自此之后,操作系统的时钟便脱离主板的硬件时钟,开始单独运行(操作系统时钟的运行是由时钟中断来驱动的,不同于主板上的时钟)。
无论做工多么精细,主板硬件时钟和由时钟中断维护的操作系统内的时钟多多少少会有一些误差。所以,操作系统在每次关闭的时候会调用另一段程序,将操作系统 内的时钟写到主板硬件时钟里(这样设计是不是说明时钟中断比主板硬件时钟更准确一些呢?)。类似的,当用户在操作系统内修改时钟之后,也不会立即写入主板 时钟,而是在关机的时候写入硬件时钟。
2. 旧汤和新药的冲突
主板上的硬件时钟在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命令可以看到如下输出:

[root@localhost ~]# 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设备,来操作主板硬件时钟。于是,解决方法就出现了。
3. 新汤配新药
既然内核这剂药已经换成了新的,那我们就把外围应用程序hwclock也换成新的。
从这里可以下载比较新的(不用最新的是因为最新的源码在旧版的CentOS上编译会出现错误,我也懒得改了,呵呵)程序源码:,如果需要更多版本的程序源码,请到这里下载:。
下载完成之后,编译该程序:

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/

之后,操作系统和主板的硬件时钟就可以同步起来了。

来自: , 转载请注明出处:



最后

先来看看问题是什么样的:

1、系统的BISO时间是完全正确的

2、用hwclock -r查看的系统时间

[root@yufei ~]# hwclock -r Wed 13 Jul 2011 05:50:55 AM CST -0.868339 seconds

而现在的北京时间是7月12号21:50。正好相差8小时。

3、用hwclock -D来调试的结果是

[root@yufei ~]# hwclock -D hwclock from util-linux-ng 2.17.2 Using /dev interface to clock. Last drift adjustment done at 1310506688 seconds after 1969 Last calibration done at 1310506688 seconds after 1969 Hardware clock is on UTC time Assuming hardware clock is kept in UTC time. Waiting for clock tick... ...got clock tick Time read from Hardware Clock: 2011/07/12 21:44:52 Hw clock time : 2011/07/12 21:44:52 = 1310507092 seconds since 1969 Wed 13 Jul 2011 05:44:52 AM CST -0.315375 seconds

发现能正确读取到BIOS的时间,但用date命令还是不正确,依然相差8小时,还是Wed 13 Jul 2011 05:44:52

4、折腾了半天也没有设置正确,希望大家别和我一样啊!!哈哈……

下面是我的解决方法

1、我已经忘记了我的系统在安装的时候有没有开启UTC,这一点,我们先忽略。(因为按网上的关掉UTC设置方法,不能解决问题)

2、因为网上资料都基本上雷同,所以我就看hwclock的帮助,想从中找到解决的办法,结果真让我给找到了。

3、使用 hwclock –help查看帮助内容,这个命令大家一定要注意他的使用方法。这样才能找到原因。下面我就把几个重要的内容摘录出来,给大家做个解释。

[root@yufei ~]# hwclock --help hwclock - query and set the hardware clock (RTC) Usage: hwclock [function] [options...] 这里需要大家特别注意:先是函数后是参数,只用其中一个是没有用的,这是解决问题的关键 Functions: -r | --show read hardware clock and print result #读取硬件(BIOS)时间,并显示出来 -s | --hctosys set the system time from the hardware clock #把目前系统时间调整为硬件时间 -w | --systohc set the hardware clock to the current system time #把硬件时间调整为目前系统的时间 --systz set the system time based on the current timezone #把系统时间设置为当时时区的时间 Options: -u | --utc the hardware clock is kept in UTC #设置硬件为的UTC时间 --localtime the hardware clock is kept in local time #设置硬件为本地时间

hwclock的使用方法很关键,有了上面的解释后,综合一下,就得到了解决问题的方法了。

[root@yufei ~]# hwclock -s --localtime

也就是在 /etc/rc.local 最后加一句

/sbin/hwclock -s --localtime &

这一句命令解决所有问题。

注意:

1、确保你的时区要设置正确/etc/sysconfig/clock

2、确保你的系统中的BIOS时间正确

关于如何关闭UTC啊,如何设置时区啊,大家可以参考



再说点rar

     在centos5.5下下载了个rar2。9 linux版本源码包,安装后执行rar命令发现提示rar: /lib/libc.so.6: version `GLIBC_2.7′ not found (required by rar)

     最简单的解决方案竟然是直接将源码包中的rar_static文件覆盖安装目录下的rar文件

根据makefile我们可以找到rar脚本的位置:/usr/local/bin

     然后执行命令即可

     #cd /usr/local/bin

     #cp rar_static /usr/local/bin/rar

阅读(2883) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~