很多網友在安裝完 CentOS 系統后發現時間與現在時間相差 8 小時,這是由於在安裝系統的時選擇的時區是上海,而 CentOS 默認 BIOS 時間是 UTC 時間,所以時間相差了 8 小時。這個時候的 BIOS 的時間和系統的時間是不一致的,一個代表 UTC 時間,一個代表 CST 時間(+8時區),即上海時間。
【同步時間的解決方法】
首先,修改時區配置
1
2
3
4
|
# vi /etc/sysconfig/clock
ZONE=
"Asia/Shanghai"
UTC=
false
# 設置為 false ,硬件時鍾不和 utc 時間一致
ARC=
false
|
其次,同步系統時間,並寫入 BIOS
1
2
3
|
# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # linux 的時區設置為上海
# ntpdate pool.ntp.org # 通過公網 NTP 服務器校准時間
# /sbin/hwclock --systohc # 設置硬件時間和系統時間一致並校准
|
至此,linux 系統時間和計算機硬件時間都是 CST 時間了,並且為上海時區。
【公網 NTP 服務器】
訪問 www.ntp.org 這個的網站,就可以找到一堆時間服務器的地址
表1 互聯網上的時間服務器列表
Area | HostName |
Worldwide | pool.ntp.org |
Asia | asia.pool.ntp.org |
Europe | europe.pool.ntp.org |
North America | north-america.pool.ntp.org |
Oceania | oceania.pool.ntp.org |
South America | south-america.pool.ntp.org |
這些服務器都是可用的,而且對其進行連接速度也很快,其中重點推薦 pool.ntp.org ,正像網址名字所表達的,這實際是一個地址池,里面根據實際情況來實時調整可用服務器地址。
【確定時區配置】
系統自帶時區文件保存在 /usr/share/zoneinfo/ 目錄下,在該目錄下找到 Asia/Shanghai 拷貝到 /etc 下命名為 localtime 即可。也可以建立軟連接,可以保證系統數據有變化時隨時更新。
另外一個相關配置文件是 /etc/sysconfig/clock ,其內容如下
1
2
3
4
5
6
|
[root@Paxos conf]
# vi /etc/sysconfig/clock
# The time zone of the system is defined by the contents of /etc/localtime.
# This file is only for evaluation by system-config-date, do not rely on its
# contents elsewhere.
ZONE=
"Asia/Shanghai"
|
默認只有一行表明自己時區的配置。
【確定 Linux 使用的時間方案】
Linux 支持 UTC (Coordinated Universal Time) 時間,即世界協調時,也就是本初子午線上的時間。它和以前的格林威治標准時(GMT)的區別似乎是它是由多個原子鍾平均出來的。在 /etc/sysconfig/clock 這個文件中,可以指明 BIOS 是否使用了 UTC 時間,UTC=yes 就是用了。
計算機自己還有自己的時間,也就是硬件時間,hard clock,也就是存在 BIOS 里那個時間,關機也不會丟失。計算機啟動時,就要讀取這個時間。這個時間如果設定為 UTC(GMT),也就是倫敦那地方的時間,就要在 /etc/sysconfig/clock 文件中設定 UTC=yes ,反之則要設為 no 。
所以,只存在兩種正確的設置:
- BIOS=本地時間,UTC=no
- BIOS=UTC時間,UTC=yes
一般來講,BIOS 里面都設定為當地時間。
【本地時間修正】
當執行 date 命令查看系統時間發現快了 8 小時的情況時,你需要做時間修正。
Linux 讀取硬件時間要用到 hwclock 這個命令:
- hwclock --show 顯示硬件時間
- hwclock --systohc 將系統時間寫入硬件
- hwclock --hctosys 將硬件時間寫入系統時間
1.首先,需要校准 date 顯示的系統時間。可以通過 date 命令直接設置,還可以通過 ntpdate 通過外部時間服務器進行校准。
1
2
|
yum
install
ntpdate
ntpdate pool.ntp.org
|
此時系統時間就已經與外部 ntp 服務器時間同步了,相當精確。
2.其次,需要校准 BIOS 上的硬件時鍾。可以找個精確的時間源,再靠自己的手指來精確設定 BIOS 時間,還可以通過
hwclock 把准確的時間寫入 BIOS 。如果已經將系統時間校准了,則可以通過如下命令將時間寫入 BIOS :
1
|
hwclock --systohc
|
這樣 BIOS 時間也校准了。以后開機即使沒網絡,沒辦法運行 ntpdate 的時候,系統時間也都是准的。