2014年12月15日 星期一

系統時間與硬體時間

安裝Linux時常見的某個步驟會要求設定系統時區並決定硬體時鐘是否使用UTC, 
設不設成使用UTC好像感覺不出差別, 只是偶爾會發現安裝好之後系統時間被提早了八小時(台灣是UTC+8).
這問題不常困擾我是因為通常發現後順手date修正成正確時間就好, 
後來某年網中人寫了篇ntpdate推廣文之後就一律自動校時, 一直都沒發生過問題.
所以沒耐性的人可以直接看結論: 設成使用UTC, 設定ntpd每次開機校時, 下課!


硬體時鐘:
指的就是在BIOS裡可以設定的時間, 由電腦硬體維護, 
早期主機板上有顆鈕扣電池就是拿來保存並維持一些最基礎的運作, 
作業系統每次開機時會從BIOS裡把時間讀出來, 在linux裡可以用hwclock讀出硬體時鐘

系統時間:
在作業系統裏維護的時間, 開機時讀出BIOS時間後, 根據系統時區的設定加減完時差, 
得到的就是當地的時間, linux下可以date指令讀出.

問題就是在於, BIOS裡的時間紀錄的是自1970年1月1號00:00:00起至今的秒數, 沒有時區的觀念, 
所以現代的作業系統開機時從BIOS裡讀出來的時候會需要知道,
這組秒數紀錄的是當地的時間(UTC+8)? 還是UTC+0時間? 
安裝時的這個問題"硬體時鐘是否使用UTC"在問的就是這個問題.

要把硬體時鐘當作是UTC時間或是當地時間完全隨個人喜好, 
Windows系列默認硬體時鐘是local time(可以透過patch修正), Linux系列是UTC(可以選擇), 
有趣的是Arch Linux的wiki有警告: "使用本地時間可能引發數個已知且無法修復的臭蟲, 目前沒有放棄本地時間支援的計劃."
不管怎麼選, 雙系統使用者的重點是要決定只使用其中一套作業系統維護硬體時鐘, 
不然Linux設定成硬體時鐘使用UTC, 開完機進windows時間馬上就慢八小時, 老問題了.

我的Arch Linux安裝時選擇硬體時鐘使用UTC時間, 每次ntpd校完時就寫回hwclock, 
所以date出來的是現在的當地時間(例如9pm), hwclock出來的是UTC+0時間(1pm), BIOS裡看到的是UTC+0時間(1pm)

沒有留言:

張貼留言