: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 –show
而后使用hwcloc k将硬件时间调整为与 系统时间一致:
shell#hwcl ock –directisa –systohc
这时间再查看一下硬件 时钟是否已经调整过来 了?
shell#hwcl ock –show
Fri 21 Apr 2006 06:47:25 PM CST -0.764909 seconds
请注意–direct isa参数,若是出现 文中开头的错误信息, 则必须加上此参数,表 示直接以I/O指令存 取硬件时间而不经过/ dev/rtc设备来 存取。
若是您的硬件时间是正 确的,要将系统时钟调 整的与硬件时钟一致, 则只须要将–syst ohc换成–hcto sys便可。
hwclock的参数 详解:
语法:hwclock [–adjust][ –debug][–d irectisa][ –hctosys][ –show][–sy stohc][–te st] [–utc][–ve rsion][–se t –date=<日期与 时间>]
参数:
–adjust  hwclock每次 更改硬件时钟时,都会 记录在/etc/ad jtime文件中。使 用–adjust参数 ,可以使hwclock 根据先前的记录来估算 硬件时钟的误差,并用 来校订目前的硬件时钟
–debug  显示hwclock 执行时详细的信息。
–directisa  hwclock预设 从/dev/rtc设 备来存取硬件时钟。若 没法存取时,可用此参 数直接以I/O指令来 存取硬件时钟。
–hctosys  将系统时钟调整为与 目前的硬件时钟一致。
–set –date=<日期与 时间>  设定硬件时钟。
–show  显示硬件时钟的时间 与日期。
–systohc  将硬件时钟调整为与 目前的系统时钟一致。
–test  仅测试程序,而不会 实际更改硬件时钟。
–utc  若要使用格林威治时 间,请加入此参数,h wclock会执行转 换的工做。
–version  显示版本信息。
或许每次都要加上–d irectisa比较 麻烦,所以能够用如下 方法做一些改变:
shell#cd /sbin
shell#mv hwclock hwclock.or i
shell#cat > hwclock <
#!/bin/bas h
/sbin/hwcl ock.ori –directisa $@
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加上 这你本身的服务器就可 以了 <
相关文章
相关标签/搜索