: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加上 這你本身的服務器就可 以了 <
相關文章
相關標籤/搜索