linux系統時間和硬體時鐘時間 FAQ
Linux有兩個時鐘, 一個是system time, 一個是hardware clock. 使用date和hwclock命令可分別檢視和設定系統時間和硬體時間.
The Hardware Clock: 該時鐘通常稱為硬體時鐘,實時時鐘(RTC,real time clock)或CMOS時鐘。它獨立於任何軟體,在關機時仍然執行。
The System Time: 該時鐘有Linux Kernel維護,並由時鐘中斷驅動。只有Linux執行時,該時鐘才有意義。系統時間是自00:00:00 January 1, 1970 UTC經過的總秒數. 但是系統時間並不是一個整數, 它的精度是虛擬無窮的.
通常兩個時鐘是不同步的, 它們之間存在漂移(drift).可以實驗一下,分別執行date和sbin/hwclock命令,得到的時間是不同的。
$ date
Thu Jun 15 19:28:49 CST 2006
$/sbin/hwclock
Thu 15 Jun 2006 07:28:40 PM CST -0.079624 seconds
1. 檢視和設定硬體時間 - hwclock命令
hwclock命令用於檢視或設定硬體時間。該命令的老版本是clock(新的命名更清晰,避免了混淆),為保持相容,老的命令仍然可用,它只是一個指向hwclock的symbolic link.
hwclock的選項:
--systohc
將系統時間寫入到硬體時鐘. 也就是說, 將Hardware Clock調整到current System Time的值.
-–hctosys
將硬體時間寫入到系統時間. 通常每次linux啟動的時候, 都要執行該命令, 將硬體時間的值寫到system time中.
--adjust
Add or subtract time from the Hardware Clock to account for systematic drift since the last time the clock was set or adjusted.
硬體時鐘通常不太精確, 每天會快或慢一定的時間. 著稱為系統化漂移(systematic drift). hwclock的"adjust"功能可以糾正這種偏移.
它的工作原理是, 根據使用者多次呼叫hwclock –-set(或--systohc)跳轉硬體時鐘的歷史記錄計算時鐘每天的漂移量, 得到一個adjust的值, 從而hwclock --adjust.
這些設定硬體時鐘的歷史記錄由hwclock儲存在檔案/etc/adjtime中, called the adjtime file.