天天看點

Debian下系統時間比正常時間快8小時的問題

 原貼:http://www.wangchao.net.cn/bbsdetail_1410124.html

 先說時區

Debian下系統時間比正常時間快8小時的問題

的配置。以前Debian有個好勝的時區配置工具,叫tzconfig,現在也沒有了。但配置時區倒也簡單,主要是兩個檔案:

  

  /etc/localtime

  /etc/timezone

  

  timezone這個檔案是個文本,裡面隻需要寫一行自己的時區就行,我們這裡就是上海, Asia/Shanghai(誰知道為什麼不是北京呢?)。 localtime這個檔案的類型不清楚,裡面就寫了些timezone data,它可以從系統自帶時區檔案那裡拷貝

Debian下系統時間比正常時間快8小時的問題

,位置在:

  

  /usr/share/zoneinfo

  

  從這個目錄下找到Shanghai拷貝到/etc下的localtime即可。有人說建個連接配接也可,這樣還可以保證系統資料有變化時不必再管。

  

  設定了時區,還要确定Linux的時間方案。Linux支援UTC時間, Coordinated Universal Time,也就是世界協調時,也就是本初子午線

Debian下系統時間比正常時間快8小時的問題

上的時間,它和以前的格林威治

Debian下系統時間比正常時間快8小時的問題

标準時(GMT)的差別似乎是它是由多個原子鐘

Debian下系統時間比正常時間快8小時的問題

平均出來的。在 /etc/default/rcS這個檔案中,設定了系統是否使用UTC,UTC=yes就是用。

  

  計算機自己還有自己的時間,也就是硬體時間,hard clock,也就是存在BIOS裡那個時間,關機也不會丢失。計算機啟動時,就要讀取這個時間。這個時間如果設定為UTC(GMT),也就是倫敦那地方的時間,就要在rcS檔案中設定UTC=yes,反之則要設為no。

  

  總之就是兩種正确的設定:

  

  BIOS=本地時間,UTC=no

  BIOS=UTC時間,UTC=yes

  

  一般來講,BIOS裡面都設定為當地時間,這是因為如果裝雙系統

Debian下系統時間比正常時間快8小時的問題

的話,Windows似乎不懂utc,就會出問題。這時UTC=no。

  

  如果一切順利,到這時,進入Linux之後顯示的時間應該是正确的了。但不少人的機器,包括這回這台640m,仍舊不正确,而是比正确時間再往前跑了8小時。這裡的問題出在Linux讀取硬體時間上了。

  

  Linux讀取這個硬體時間要用到hwclock這個指令:

  

  hwclock --show :顯示硬體時間

  hwclock --systohc :将系統時間寫入硬體

  hwclock --hctosys :将硬體時間寫入系統時間

  

  在出問題的時候,hwclock 這一組指令的運作通常是不能成功的,錯誤經常是這樣的:

  

  select() to /dev/rtc to wait for clock tick timed out

  

  也就是不能讀取/dev/rtc,也就是硬體時間。這又是因為某些機器的BIOS處理方式和Linux的rtc核心

Debian下系統時間比正常時間快8小時的問題

子產品

Debian下系統時間比正常時間快8小時的問題

之間出現了問題。

  

  Linux又有3個這類子產品,rtc/genrtc/rtc_dev,似乎是一個比一個新,而debian通常自己用的是rtc這個老子產品;但 Dell/ibm/acer等等廠商現在都可能使用新的BIOS,這種BIOS和這個rtc就可能不對付。如果出現了上面那個timeout的問題,有兩種方法可以解決:

  

  1, 給hwclock加參數,--directisa,也就是:

  

  hwclock --directisa --show

  

  如果運作成功,說明這個辦法可行。則把此參數添加為hwclock的預設參數即可。在debian 4.0之後,可以直接在/etc/default/rcS中添加一行:

  

  HWCLOCKPARS="--directisa“

  

  而在4.0以前,可能隻能在hwclock啟動腳本中添加, /etc/init.d/hwclock.sh,把裡面的”/sbin/hwclock“ 全部替換為 ”/sbin/hwclock --directisa"。現在在debian sid中,這個腳本的第一行其實是HWCLOCKPARS=,也可以像rcS一樣添加參數了。

  

  2, 換用其他核心rtc子產品,用如下方法測試哪個子產品好用:

  

  # modprobe rtc

  # hwclock --show

  # rmmod rtc

  # modprobe genrtc

  # hwclock --show

  # rmmod genrtc

  # modprobe rtc_dev

  # hwclock --show

  # rmmod rtc_dev

  

  沒有顯示time out的就是好用的了,然後可以在blacklist中阻止不好用的,在modules裡面加上好用的那個。

  

  用完這兩個方法,hwclock應該能直接工作了,也就是可以讀取硬體時間了。再配上utc設定正确,重新開機

Debian下系統時間比正常時間快8小時的問題

之後時間就是對的了。

  

  為了讓BIOS時間更準确,除了可以找個精确的時間源,比如CDMA手機或是GPS,靠自己的手指來精确設定BIOS時間之外,還可以用hwclock把準确的時間寫入BIOS。前一種方法細心點可以做到幾秒誤差,而後一種怎麼也在1秒以下了。

  

  安裝ntpdate這個包,它可以從時間伺服器

Debian下系統時間比正常時間快8小時的問題

上讀取到正确的時間,精度還是很高的:

  

  aptitude install ntpdate

  ntpdate pool.ntp.org

  

  此時系統時間就已經是ntp的時間了,相當精确,把它寫入硬體:

  

  hwclock --systohc

  

  這樣BIOS時間也就很準了。以後開機沒網絡,沒辦法運作ntpdate的時候也都是準的。

  

  這裡的關鍵有:bios時間,utc設定,rtc子產品,hwclock讀取,ntpdate對時。

  

  在Debian的老bug裡還看到因為系統有多個分區,比如/usr單獨分,fsck運作時會對時,并是以又造成快幾個小時的問題,不知道怎麼處理的。

先說時區的配置。以前Debian有個好勝的時區配置工具,叫tzconfig,現在也沒有了。但配置時區倒也簡單,主要是兩個檔案: /etc/localtime /etc/timezone timezone這個檔案是個文本,裡面隻需要寫一行自己的時區就行,我們這裡就是上海, Asia/Shanghai(誰知道為什麼不是北京呢?)。 localtime這個檔案的類型不清楚,裡面就寫了些timezone data,它可以從系統自帶時區檔案那裡拷貝,位置在: /usr/share/zoneinfo 從這個目錄下找到Shanghai拷貝到/etc下的localtime即可。有人說建個連接配接也可,這樣還可以保證系統資料有變化時不必再管。 設定了時區,還要确定Linux的時間方案。Linux支援UTC時間, Coordinated Universal Time,也就是世界協調時,也就是本初子午線上的時間,它和以前的格林威治标準時(GMT)的差別似乎是它是由多個原子鐘平均出來的。在 /etc/default/rcS這個檔案中,設定了系統是否使用UTC,UTC=yes就是用。 計算機自己還有自己的時間,也就是硬體時間,hard clock,也就是存在BIOS裡那個時間,關機也不會丢失。計算機啟動時,就要讀取這個時間。這個時間如果設定為UTC(GMT),也就是倫敦那地方的時間,就要在rcS檔案中設定UTC=yes,反之則要設為no。 總之就是兩種正确的設定: BIOS=本地時間,UTC=no BIOS=UTC時間,UTC=yes 一般來講,BIOS裡面都設定為當地時間,這是因為如果裝雙系統的話,Windows似乎不懂utc,就會出問題。這時UTC=no。 如果一切順利,到這時,進入Linux之後顯示的時間應該是正确的了。但不少人的機器,包括這回這台640m,仍舊不正确,而是比正确時間再往前跑了8小時。這裡的問題出在Linux讀取硬體時間上了。 Linux讀取這個硬體時間要用到hwclock這個指令: hwclock --show :顯示硬體時間 hwclock --systohc :将系統時間寫入硬體 hwclock --hctosys :将硬體時間寫入系統時間 在出問題的時候,hwclock 這一組指令的運作通常是不能成功的,錯誤經常是這樣的: select() to /dev/rtc to wait for clock tick timed out 也就是不能讀取/dev/rtc,也就是硬體時間。這又是因為某些機器的BIOS處理方式和Linux的rtc核心子產品之間出現了問題。 Linux又有3個這類子產品,rtc/genrtc/rtc_dev,似乎是一個比一個新,而debian通常自己用的是rtc這個老子產品;但 Dell/ibm/acer等等廠商現在都可能使用新的BIOS,這種BIOS和這個rtc就可能不對付。如果出現了上面那個timeout的問題,有兩種方法可以解決: 1, 給hwclock加參數,--directisa,也就是: hwclock --directisa --show 如果運作成功,說明這個辦法可行。則把此參數添加為hwclock的預設參數即可。在debian 4.0之後,可以直接在/etc/default/rcS中添加一行: HWCLOCKPARS="--directisa“ 而在4.0以前,可能隻能在hwclock啟動腳本中添加, /etc/init.d/hwclock.sh,把裡面的”/sbin/hwclock“ 全部替換為 ”/sbin/hwclock --directisa"。現在在debian sid中,這個腳本的第一行其實是HWCLOCKPARS=,也可以像rcS一樣添加參數了。 2, 換用其他核心rtc子產品,用如下方法測試哪個子產品好用: # modprobe rtc # hwclock --show # rmmod rtc # modprobe genrtc # hwclock --show # rmmod genrtc # modprobe rtc_dev # hwclock --show # rmmod rtc_dev 沒有顯示time out的就是好用的了,然後可以在blacklist中阻止不好用的,在modules裡面加上好用的那個。 用完這兩個方法,hwclock應該能直接工作了,也就是可以讀取硬體時間了。再配上utc設定正确,重新開機之後時間就是對的了。 為了讓BIOS時間更準确,除了可以找個精确的時間源,比如CDMA手機或是GPS,靠自己的手指來精确設定BIOS時間之外,還可以用hwclock把準确的時間寫入BIOS。前一種方法細心點可以做到幾秒誤差,而後一種怎麼也在1秒以下了。 安裝ntpdate這個包,它可以從時間伺服器上讀取到正确的時間,精度還是很高的: aptitude install ntpdate ntpdate pool.ntp.org 此時系統時間就已經是ntp的時間了,相當精确,把它寫入硬體: hwclock --systohc 這樣BIOS時間也就很準了。以後開機沒網絡,沒辦法運作ntpdate的時候也都是準的。 這裡的關鍵有:bios時間,utc設定,rtc子產品,hwclock讀取,ntpdate對時。 在Debian的老bug裡還看到因為系統有多個分區,比如/usr單獨分,fsck運作時會對時,并是以又造成快幾個小時的問題,不知道怎麼處理的。

<script></script>

  标簽:  Debian   小時   時間   正常時間   比正常   系統時間   問題  

繼續閱讀