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加上
這你本身的服務器就可
以了 <