:O)修改linux硬件时间

DELL的机器,装了 Debian Sarge。启动后时 间用的是UTC。使用 hwclock调整硬 件时间出错,错误信息 :select() to /dev/rtc to wait for clock tick timed out
解决:
首先使用date设置 正确的时间(如果你的 时间设置也不对的话, 首先得调整时区).
调整后,使用date 命令查看是否正确:
shell$date
Fri Apr 21 18:47:09 CST 2006
首先查看一下硬件时钟 :
shell#hwcl ock �Cshow
然后使用hwcloc k将硬件时间调整为与 系统时间一致:
shell#hwcl ock �Cdirectisa �Csystohc
这时间再查看一下硬件 时钟是否已经调整过来 了?
shell#hwcl ock �Cshow
Fri 21 Apr 2006 06:47:25 PM CST -0.764909 seconds
请注意�Cdirect isa参数,如果出现 文中开头的错误信息, 则必须加上此参数,表 示直接以I/O指令存 取硬件时间而不通过/ dev/rtc设备来 存取。
如果您的硬件时间是正 确的,要将系统时钟调 整的与硬件时钟一致, 则只需要将�Csyst ohc换成�Chcto sys即可。
hwclock的参数 详解:
语法:hwclock [�Cadjust][ �Cdebug][�Cd irectisa][ �Chctosys][ �Cshow][�Csy stohc][�Cte st] [�Cutc][�Cve rsion][�Cse t �Cdate=<日期与 时间>]
参数:
�Cadjust  hwclock每次 更改硬件时钟时,都会 记录在/etc/ad jtime文件中。使 用�Cadjust参数 ,可使hwclock 根据先前的记录来估算 硬件时钟的偏差,并用 来校正目前的硬件时钟 。
�Cdebug  显示hwclock 执行时详细的信息。
�Cdirectisa  hwclock预设 从/dev/rtc设 备来存取硬件时钟。若 无法存取时,可用此参 数直接以I/O指令来 存取硬件时钟。
�Chctosys  将系统时钟调整为与 目前的硬件时钟一致。
�Cset �Cdate=<日期与 时间>  设定硬件时钟。
�Cshow  显示硬件时钟的时间 与日期。
�Csystohc  将硬件时钟调整为与 目前的系统时钟一致。
�Ctest  仅测试程序,而不会 实际更改硬件时钟。
�Cutc  若要使用格林威治时 间,请加入此参数,h wclock会执行转 换的工作。
�Cversion  显示版本信息。
或许每次都要加上�Cd irectisa比较 麻烦,因此可以用以下 方法作一些改变:
shell#cd /sbin
shell#mv hwclock hwclock.or i
shell#cat > hwclock <
#!/bin/bas h
/sbin/hwcl ock.ori �Cdirectisa $@
EOF
shell#chmo d +x hwclock

reference:
[url]http://www[/url] .freebug.o rg/blog/
Linux的时间设置 与同步(NTP)
Network Time Protocol (NTP) 也是RHCE新增的考 试要求. 学习的时候也顺便复习 了一下如何设置Lin ux的时间,现在拿出 来和大家分享
设置NTP服务器不难 但是NTP本身是一个 很复杂的协议. 这里只是简要地介绍一 下实践方法
和上次一样,下面的实 验都在RHEL5上运 行
1. 时间和时区
如果有人问你说现在几 点? 你看了看表回答他说晚 上8点了. 这样回答看上去没有什 么问题,但是如果问你 的这个人在欧洲的话那 么你的回答就会让他很 疑惑,因为他那里还太 阳当空呢.
这里就有产生了一个如 何定义时间的问题. 因为在地球环绕太阳旋 转的24个小时中,世 界各地日出日落的时间 是不一样的.所以我们 才有划分时区(tim ezone) 的必要,也就是把全球 划分成24个不同的时 区. 所以我们可以把时间的 定义理解为一个时间的 值加上所在地的时区( 注意这个所在地可以精 确到城市)
地理课上我们都学过格 林威治时间(GMT) , 它也就是0时区时间. 但是我们在计算机中经 常看到的是UTC. 它是Coordina ted Universal Time的简写. 虽然可以认为UTC和 GMT的值相等(误差 相当之小),但是UT C已经被认定为是国际 标准,所以我们都应该 遵守标准只使用UTC
那么假如现在中国当地 的时间是晚上8点的话 ,我们可以有下面两种 表示方式
20:00 CST
12:00 UTC
这里的CST是Chi nese Standard Time,也就是我们 通常所说的北京时间了 . 因为中国处在UTC+ 8时区,依次类推那么 也就是12:00 UTC了.
为什么要说这些呢(呵 呵这里不是地理论坛吧 ...)?
第一,不管通过任何渠 道我们想要同步系统的 时间,通常提供方只会 给出UTC+0的时间 值而不会提供时区(因 为它不知道你在哪里) .所以当我们设置系统 时间的时候,设置好时 区是首先要做的工作
第二,很多国家都有夏 令时(我记得小时候中 国也实行过一次),那 就是在一年当中的某一 天时钟拨快一小时(比 如从UTC+8一下变 成UTC+9了),那 么同理到时候还要再拨 慢回来.如果我们设置 了正确的时区,当需要 改变时间的时候系统就 会自动替我们调整
现在我们就来看一下如 何在Linux下设置 时区,也就是time zone
2. 如何设置Linux Time Zone
在Linux下gli bc提供了我们事先编 译好的许多timez one文件, 他们就放在/usr/ share/zone info这个目录下, 这里基本涵盖了大部分 的国家和城市
代码:
# ls -F /usr/share /zoneinfo/
Africa/       Chile/   Factory    Iceland       Mexico/   posix/       Universal
America/      CST6CDT GB         Indian/       Mideast/ posixrules US/
Antarctica / Cuba     GB-Eire    Iran          MST       PRC          UTC
Arctic/       EET      GMT        iso3166.ta b MST7MDT   PST8PDT      WET
Asia/         Egypt    GMT0       Israel        Navajo    right/       W-SU
Atlantic/     Eire     GMT-0      Jamaica       NZ        ROC          zone.tab
Australia/    EST      GMT+0      Japan         NZ-CHAT   ROK          Zulu
Brazil/       EST5EDT Greenwich Kwajalein     Pacific/ Singapore
Canada/       Etc/     Hongkong   Libya         Poland    Turkey
CET           Europe/ HST        MET           Portugal UCT在这里面我们就 可以找到自己所在城市 的time zone文件. 那么如果我们想查看对 于每个time zone当前的时间我 们可以用zdump命 令
代码:
# zdump Hongkong
Hongkong Fri Jul 6 06:13:57 2007 HKT那么我们又怎么 来告诉系统我们所在t ime zone是哪个呢? 方法有很多,这里举出 两种
第一个就是修改/et c/localtim e这个文件,这个文件 定义了我么所在的lo cal time zone.
我们可以在/usr/ share/zone info下找到我们的 time zone文件然后拷贝 去到/etc/loc altimezone (或者做个symbo lic link)
假设我们现在的tim e zone是BST(也 就是英国的夏令时间, UTC+1)
代码:
# date
Thu Jul 5 23:33:40 BST 2007我们想把ti me zone换成上海所在 的时区就可以这么做
代码:
# ln -sf /usr/share /zoneinfo/ posix/Asia /Shanghai /etc/local time
# date
Fri Jul 6 06:35:52 CST 2007这样时区就改 过来了(注意时间也做 了相应的调整)
第二种方法也就设置T Z环境变量的值. 许多程序和命令都会用 到这个变量的值. TZ的值可以有多种格 式,最简单的设置方法 就是使用tzsele ct命令
代码:
# tzselect
...
TZ='Americ a/Los_Ange les';expor t TZtzselect 会让你选择所在的国家 和城市(我省略了这些 步骤),最后输出相应 的TZ变量的值.那么 如果你设置了TZ的值 之后时区就又会发生变 化
代码:
# date
Thu Jul 5 15:48:11 PDT 2007通过这两个例 子我们也可以发现TZ 变量的值会overr ide /etc/local time. 也就是说当TZ变量没 有定义的时候系统才使 用/etc/loca ltime来确定ti me zone. 所以你想永久修改ti me zone的话那么可以 把TZ变量的设置写入 /etc/profi le里
好了现在我们知道怎么 设置时区了,下面我们 就来看看如何设置Li nux的时间吧
3. Real Time Clock(RTC) and System Clock
说道设置时间这里还要 明确另外一个概念就是 在一台计算机上我们有 两个时钟:一个称之为 硬件时间时钟(RTC ),还有一个称之为系 统时钟(System Clock)
硬件时钟是指嵌在主板 上的特殊的电路, 它的存在就是平时我们 关机之后还可以计算时 间的原因
系统时钟就是操作系统 的kernel所用来 计算时间的时钟. 它从1970年1月1 日00:00:00 UTC时间到目前为止 秒数总和的值 在Linux下系统时 间在开机的时候会和硬 件时间同步(sync hronizatio n),之后也就各自独 立运行了
那么既然两个时钟独自 运行,那么时间久了必 然就会产生误差了,下 面我们来看一个例子
代码:
# date
Fri Jul 6 00:27:13 BST 2007
# hwclock --show
Fri 06 Jul 2007 12:27:17 AM BST -0.968931 seconds通过h wclock --show命令我们 可以查看机器上的硬件 时间(always in local time zone), 我们可以看到它和系统 时间还是有一定的误差 的, 那么我们就需要把他们 同步
如果我们想要把硬件时 间设置成系统时间我们 可以运行以下命令
代码:
# hwclock --hctosys反 之,我们也可以把系统 时间设置成硬件时间
代码:
# hwclock --systohc那 么如果想设置硬件时间 我们可以开机的时候在 BIOS里设定.也可 以用hwclock命 令
代码:
# hwclock --set --date="mm /dd/yy hh:mm:ss"如 果想要修改系统时间那 么用date命令就最 简单了
代码:
# date -s "dd/mm/yyy y hh:mm:ss"现 在我们知道了如何设置 系统和硬件的时间. 但问题是如果这两个时 间都不准确了怎么办? 那么我们就需要在互联 网上找到一个可以提供 我们准确时间的服务器 然后通过一种协议来同 步我们的系统时间,那 么这个协议就是NTP 了. 注意接下去我们所要说 的同步就都是指系统时 间和网络服务器之间的 同步了
4. 设置NTP Server前的准备
其实这个标题应该改为 设置"NTP Relay Server"前的准 备更加合适. 因为不论我们的计算机 配置多好运行时间久了 都会产生误差,所以不 足以给互联网上的其他 服务器做NTP Server. 真正能够精确地测算时 间的还是原子钟. 但由于原子钟十分的昂 贵,只有少部分组织拥 有, 他们连接到计算机之后 就成了一台真正的NT P Server. 而我们所要做的就是连 接到这些服务器上同步 我们系统的时间,然后 把我们自己的服务器做 成NTP Relay Server再给互联 网或者是局域网内的用 户提供同步服务
好了,前面讲了一大堆 理论,现在我们来动手 实践一下吧. 架设一个NTP Relay Server其实非常 简单,我们先把需要的 RPM包装上
代码:
# rpm -ivh ntp-4.2.2p 1-5.el5.rp m那么第一步我们就要 找到在互联网上给我们 提供同步服务的NTP Server
[url]http://www[/url].pool.ntp.org是NTP的官方网站, 在这上面我们可以找到 离我们城市最近的NT P Server. NTP建议我们为了保 障时间的准确性,最少 找两个个NTP Server
那么比如在英国的话就 可以选择下面两个服务 器
0.uk.pool. ntp.org
1.uk.pool. ntp.org
它的一般格式都是nu mber.count ry.pool.nt p.org
第二步要做的就是在打 开NTP服务器之前先 和这些服务器做一个同 步,使得我们机器的时 间尽量接近标准时间. 这里我们可以用ntp date命令
代码:
# ntpdate 0.uk.pool. ntp.org
6 Jul 01:21:49 ntpdate[45 28]: step time server 213.222.19 3.35 offset -38908.575 181 sec
# ntpdate 0.pool.ntp .org
6 Jul 01:21:56 ntpdate[45 30]: adjust time server 213.222.19 3.35 offset -0.000065 sec假如你的时间差 的很离谱的话第一次会 看到调整的幅度比较大 ,所以保险起见可以运 行两次. 那么为什么在打开NT P服务之前先要手动运 行同步呢?
1. 因为根据NTP的设置 ,如果你的系统时间比 正确时间要快的话那么 NTP是不会帮你调整 的,所以要么你把时间 设置回去,要么先做一 个手动同步
2. 当你的时间设置和NT P服务器的时间相差很 大的时候,NTP会花 上较长一段时间进行调 整.所以手动同步可以 减少这段时间
5. 配置和运行NTP Server
现在我们就来创建NT P的配置文件了, 它就是/etc/nt p.conf. 我们只需要加入上面的 NTP Server和一个d riftfile就可 以了
代码:
# vi /etc/ntp.c onf
server 0.uk.pool. ntp.org
server 1.uk.pool. ntp.org
driftfile /var/lib/n tp/ntp.dri ft非常的简单. 接下来我们就启动NT P Server,并且设 置其在开机后自动运行
代码:
# /etc/init. d/ntpd start
# chkconfig --level 35 ntpd on
6. 查看NTP服务的运行 状况
现在我们已经启动了N TP的服务,但是我们 的系统时间到底和服务 器同步了没有呢? 为此NTP提供了一个 很好的查看工具: ntpq (NTP query)
我建议大家在打开NT P服务器后就可以运行 ntpq命令来监测服 务器的运行.这里我们 可以使用watch命 令来查看一段时间内服 务器各项数值的变化
代码:
# watch ntpq -p
Every 2.0s: ntpq -p                                     Sat Jul 7 00:41:45 2007
     remote            refid      st t when poll reach   delay   offset jitter
========== ========== ========== ========== ========== ========== ========== ========
+193.60.19 9.75   193.62.22. 98     2 u   52   64 377    8.578   10.203 289.032
*mozart.mu sicbox 192.5.41.4 1      2 u   54   64 377   19.301 -60.218 292.411现在我 就来解释一下其中的含 义
remote: 它指的就是本地机器所 连接的远程NTP服务 器
refid: 它指的是给远程服务器 (e.g. 193.60.199 .75)提供时间同步 的服务器
st: 远程服务器的级别. 由于NTP是层型结构 ,有顶端的服务器,多 层的Relay Server再到客户 端. 所以服务器从高到低级 别可以设定为1-16 . 为了减缓负荷和网络堵 塞,原则上应该避免直 接连接到级别为1的服 务器的.
t: 这个.....我也不 知道啥意思^_^
when: 我个人把它理解为一个 计时器用来告诉我们还 有多久本地机器就需要 和远程服务器进行一次 时间同步
poll: 本地机和远程服务器多 少时间进行一次同步( 单位为秒). 在一开始运行NTP的 时候这个poll值会 比较小,那样和服务器 同步的频率也就增加了 ,可以尽快调整到正确 的时间范围.之后po ll值会逐渐增大,同 步的频率也就会相应减 小
reach: 这是一个八进制值,用 来测试能否和服务器连 接.每成功连接一次它 的值就会增加
delay: 从本地机发送同步要求 到服务器的round trip time
offset: 这是个最关键的值, 它告诉了我们本地机和 服务器之间的时间差别 . offset越接近于 0,我们就和服务器的 时间越接近
jitter: 这是一个用来做统计的 值. 它统计了在特定个连续 的连接数里offse t的分布情况. 简单地说这个数值的绝 对值越小我们和服务器 的时间就越精确
那么大家细心的话就会 发现两个问题: 第一我们连接的是0. uk.pool.nt p.org为什么和r emote server不一样? 第二那个最前面的+和 *都是什么意思呢?
第一个问题不难理解, 因为NTP提供给我们 的是一个cluste r server所以每次 连接的得到的服务器都 有可能是不一样.同样 这也告诉我们了在指定 NTP Server的时候应 该使用hostnam e而不是IP
第二个问题和第一个相 关,既然有这么多的服 务器就是为了在发生问 题的时候其他的服务器 还可以正常地给我们提 供服务.那么如何知道 这些服务器的状态呢? 这就是第一个记号会告 诉我们的信息
*
它告诉我们远端的服务 器已经被确认为我们的 主NTP Server,我们系 统的时间将由这台机器 所提供
+
它将作为辅助的NTP Server和带有* 号的服务器一起为我们 提供同步服务. 当*号服务器不可用时 它就可以接管
-
远程服务器被clus tering algorithm认 为是不合格的NTP Server
x
远程服务器不可用
了解这些之后我们就可 以实时监测我们系统的 时间同步状况了
7. NTP安全设置
运行一个NTP Server不需要占 用很多的系统资源,所 以也不用专门配置独立 的服务器,就可以给许 多client提供时 间同步服务, 但是一些基本的安全设 置还是很有必要的
那么这里一个很简单的 思路就是第一我们只允 许局域网内一部分的用 户连接到我们的服务器 . 第二个就是这些cli ent不能修改我们服 务器上的时间
在/etc/ntp. conf文件中我们可 以用restrict 关键字来配置上面的要 求
首先我们对于默认的c lient拒绝所有的 操作
代码:
restrict default kod nomodify notrap nopeer noquery
然后允许本机地址一切 的操作
代码:
restrict 127.0.0.1
最后我们允许局域网内 所有client连接 到这台服务器同步时间 .但是拒绝让他们修改 服务器上的时间
代码:
restrict 192.168.1. 0 mask 255.255.25 5.0 nomodify
把这三条加入到/et c/ntp.conf 中就完成了我们的简单 配置. NTP还可以用key 来做authenti caiton,这里就 不详细介绍了
8. NTP client的设置
做到这里我们已经有了 一台自己的Relay Server.如果我 们想让局域网内的其他 client都进行时 间同步的话那么我们就 都应该照样再搭建一台 Relay Server,然后把 所有的client都 指向这两台服务器(注 意不要把所有的cli ent都指向Inte rnet上的服务器) . 只要在client的 ntp.conf加上 这你自己的服务器就可 以了 <
[url]http://hi.[/url]baidu.com/tenglon/blog/item/95ae70350b7a158da71e1273.html

你可能感兴趣的:(linux,技术,职场,休闲)