在 Linux 系統中,同步時間涉及 系統時間(System Time)硬件時間(Hardware Clock 或 RTC, Real-Time Clock)。系統時間由 Linux 內核管理,主要用於操作系統運行時的計時和任務調度;硬件時間則由主板上的時鐘芯片維護,即使關機也會繼續運行。

以下是同步時間的方法以及如何同步硬件時間的具體步驟:


1. 同步系統時間

1.1 使用 NTP 或 Chrony 同步系統時間

系統時間通常通過網絡時間協議(NTP)服務器來同步,確保時間準確。

(1)使用 NTP 服務同步時間

NTP 是一種經典的時間同步服務。

安裝 NTP 服務:

  • Debian/Ubuntu 系列:


    bash
sudo apt update
sudo apt install ntp
  • CentOS/RHEL 系列:


    bash
sudo yum install ntp

啓動 NTP 服務:

  • 啓動並設置為開機自啓:


    bash
sudo systemctl start ntp
sudo systemctl enable ntp

手動同步時間:

  • 手動與 NTP 服務器同步時間:


    bash
sudo ntpdate pool.ntp.org
  • pool.ntp.org 是全球公共 NTP 服務器,可以根據需求替換為更接近你的地理位置的服務器(比如中國的 cn.pool.ntp.org)。

(2)使用 Chrony 同步時間

Chrony 是一個現代的時間同步工具,適合動態網絡環境(如虛擬機、斷網重連)。

安裝 Chrony:

  • Debian/Ubuntu 系列:


    bash
sudo apt update
sudo apt install chrony
  • CentOS/RHEL 系列:


    bash
sudo yum install chrony

啓動 Chrony 服務:

  • 啓動並設置為開機自啓:


    bash
sudo systemctl start chronyd
sudo systemctl enable chronyd

手動強制同步時間:

  • 強制立即同步系統時間:


    bash
sudo chronyc -a makestep

驗證時間同步狀態:

  • 查看時間源狀態:


    bash
chronyc sources

(3)使用 timedatectl 同步時間

timedatectl 是現代 Linux 發行版中基於 systemd 的時間管理工具。

啓用時間同步:

  • 檢查時間同步狀態:


    bash
timedatectl status
  • 如果未啓用 NTP,同步時間:


    bash
sudo timedatectl set-ntp true

2. 硬件時間同步

硬件時間(RTC)是由 BIOS 或主板管理的時間,通常獨立於操作系統運行。為了確保硬件時間和系統時間一致,需要定期同步。

2.1 硬件時間與系統時間關係

  • 系統時間: Linux 內核管理的時間,通常是我們在操作系統中看到的時間。
  • 硬件時間: 主板上的硬件時鐘,即使關機也能持續運行。

Linux 系統啓動時會讀取硬件時間作為初始化時間,但系統運行後硬件時間和系統時間可能會出現偏差,因此需要手動或自動同步。


2.2 查看硬件時間

使用 hwclock 查看硬件時間:

bash

 

sudo hwclock --show

輸出示例:

 

 

2025-11-20 16:00:00.000000+00:00
  • 這是硬件時鐘的當前時間。

2.3 將系統時間同步到硬件時間

如果系統時間正確,可以將其寫入硬件時間:

bash

 

sudo hwclock --systohc
  • 作用: 將系統時間設置為硬件時間。

2.4 將硬件時間同步到系統時間

如果硬件時間正確,可以將其加載為系統時間:

bash

 

sudo hwclock --hctosys
  • 作用: 將硬件時間設置為系統時間。

2.5 設置硬件時間的時區

硬件時間可以設置為 UTC本地時間(Local Time)。推薦硬件時間使用 UTC。

檢查硬件時鐘的時區:

  • 查看當前硬件時鐘是否使用本地時間:


    bash
timedatectl
  • 輸出示例:
RTC in local TZ: no
  • 如果是 no,表示硬件時鐘使用 UTC。
  • 如果是 yes,表示硬件時鐘使用本地時間。

設置硬件時間為 UTC:

  • 設置硬件時鐘為 UTC:


    bash
sudo timedatectl set-local-rtc 0
  • 如果需要切換為本地時間:


    bash
sudo timedatectl set-local-rtc 1

3. 自動化時間同步

3.1 定期同步 NTP 時間

為了確保時間一致性,可以通過 cron 定期同步時間。

添加定時任務:

  • 編輯 cron 配置:


    bash
sudo crontab -e
  • 添加以下內容,每小時同步一次時間:


    basic
0 * * * * /usr/sbin/ntpdate pool.ntp.org

3.2 啓用自動硬件時間同步

  • 確保系統在關機或重啓時自動更新硬件時間:


    bash
sudo hwclock --systohc

4. 常見問題及解決方法

4.1 時間不同步的問題

  • NTP 服務未啓動: 確保 NTP 或 Chrony 服務正在運行。


    bash
sudo systemctl status ntp
  • 時區設置錯誤: 確保系統和硬件時鐘的時區一致。


    bash
sudo timedatectl set-timezone <your_timezone>

4.2 硬件時間與系統時間不一致

  • 如果發現硬件時間和系統時間不一致,可以手動同步:
  • 將系統時間同步到硬件時間:


    bash
sudo hwclock --systohc
  • 或將硬件時間同步到系統時間:


    bash
sudo hwclock --hctosys

4.3 硬件時間丟失

  • 如果硬件時間總是丟失或不準確,可能是 CMOS 電池沒電,需要更換主板電池。

5. 總結

系統時間同步方法:

  1. 使用 ntpchrony 與網絡時間服務器同步。
  2. 啓用 timedatectl 的時間同步功能。

硬件時間同步方法:

  1. 查看硬件時間:


    bash
sudo hwclock --show
  1. 將系統時間同步到硬件時間:


    bash
sudo hwclock --systohc
  1. 將硬件時間同步到系統時間:


    bash
sudo hwclock --hctosys

通過定期同步系統時間和硬件時間,可以確保 Linux 系統時間的準確性和一致性。