Đồng hồ máy tính không hoàn hảo. Cho vài ngày, tuần hoặc tháng, chúng trôi (drift) và ngừng hiển thị thời gian thực. Nói đơn giản, sau khi trôi, chúng có thể hiển thị "10:30" khi thực tế là "10:33". Trên máy tính cũ, thường xuyên điều chỉnh đồng hồ thủ công là thực hành phổ biến. Nhưng sau khi kết nối Internet trở nên phổ biến, hệ điều hành hiện đại bắt đầu điều chỉnh đồng hồ tự động nhờ máy chủ NTP.
NTP là gì?
NTP là viết tắt của Network Time Protocol (Giao thức thời gian mạng). Đây là thuật toán được thiết kế để đồng bộ hóa đồng hồ máy tính qua kết nối mạng và giữ chúng chính xác.
Cách bật đồng bộ thời gian trên Linux
May mắn thay, hầu hết bản phân phối triển khai một dạng nào đó của đồng bộ thời gian, sẵn sàng. Nếu bạn chưa bao giờ nhận ra đồng hồ máy tính trôi so với đồng hồ điện thoại, bạn gần như chắc chắn đã có client/daemon NTP đang chạy.
Trên Linux OS có systemd
Đa số bản phân phối Linux đã dùng systemd, và cùng nó là daemon "systemd-timesyncd". Nghĩa là bạn đã có client NTP cài sẵn trên Ubuntu, Debian, Fedora, Arch Linux, openSUSE, Manjaro và khác. Trên các distro này, và các distro dựa trên chúng (ví dụ elementary OS, Zorin OS), chạy lệnh sau để kiểm tra xem đồng bộ NTP có bật không:
timedatectl

Nếu bạn thấy Network time on: yes trong đầu ra, đồng hồ máy tính của bạn đang được điều chỉnh định kỳ tự động qua NTP. Đôi khi bạn cũng thấy NTP synchronized: no có thể nghĩa là đồng hồ được đồng bộ qua công cụ khác ngoài "systemd-timesyncd". Nó cũng có thể nghĩa là systemd-timesyncd chưa đồng bộ nhưng sẽ làm sau.
Nếu bạn thấy Network time on: no, chạy lệnh sau để bật đồng bộ thời gian NTP.
sudo timedatectl set-ntp true
Đó là tất cả bạn phải làm trên các bản phân phối này.
Trên Linux OS không có systemd
Với MX Linux trở nên phổ biến gần đây, ví dụ về OS này似乎合适. Nó cũng là trường hợp đặc biệt. Nó "loại gì" có systemd, nhưng "loại gì" không. timedatectl báo network time là "on", nhưng systemd-timesyncd không được dùng.
Vậy nó đồng bộ như thế nào? Bạn có thể kiểm tra bằng lệnh sau, dùng được trên bất kỳ Linux nào.
sudo cat /var/log/syslog | grep ntp
Trên MX Linux bạn sẽ nhận kết quả như hình sau.

Từ thông điệp log lọc này, bạn thấy client "ntpdate" chạy một lần. Đây là client phổ biến, cài sẵn trên nhiều bản phân phối Linux. Nó nhẹ và chỉ truy vấn server NTP thỉnh thoảng. Nó không chạy nền và được kích hoạt bởi script, đồng bộ, rồi thoát.
Điều này nghĩa là thời gian không được đồng bộ với độ chính xác cực cao (tính bằng mili hoặc micro giây), nhưng đủ chính xác cho hầu hết mục đích. Nó thường chính xác, ít nhất đến giây.
Trên hệ điều hành khác bạn có thể thấy "ntpd", là daemon, liên tục chạy nền và cực kỳ chính xác. Càng chạy lâu, càng chính xác.
Nếu vì lý do nào bạn muốn cài ntp hoặc ntpdate trên OS có systemd, trước tiên tắt client ntp của systemd.
sudo timedatectl set-ntp false
Tất nhiên, lệnh trên không cần trên distro không systemd.
Cài đặt client ntpdate
Phù hợp cho máy tính cá nhân, laptop và thiết bị khác không liên tục kết nối Internet.
Trên Debian, Ubuntu, Linux Mint, Zorin và các distro dựa trên những cái này, chạy:
sudo apt install ntpdate
Trên tất cả các distro dựa trên Debian ở trên, nó được cấu hình sẵn để chạy sau khi thấy kết nối mạng mới. Bạn có thể ép đồng bộ thời gian ngay nếu ngắt kết nối mạng và kết nối lại.
Trên Fedora, ntpdate sẽ bị loại bỏ (deprecated), nên khuyến nghị dùng daemon ntpd thay thế (xem phần tiếp theo). Tương tự khuyến nghị cho tất cả distro khác vì hai lý do:
- Chúng đôi khi không bao gồm ntpdate trong gói riêng mà gói nó với ntpd từ phần sau.
- Chúng không tự động hóa ntpdate chạy mỗi khi mạng kết nối. Bạn phải tự chèn ntpdate vào script tự chạy sau khi mạng kết nối.
Trong trường hợp này, cài ntpd như hướng dẫn phần sau hợp lý hơn.
Cài đặt daemon ntpd
Trên Debian, Ubuntu, Zorin, Mint và các distro dựa trên Debian hoặc Ubuntu, chạy:
sudo apt install ntp
Các distro này sẽ khởi động ntpd ngay lập tức và tự động chạy nó mỗi lần boot; không cần hành động thêm từ bạn.
Trên Fedora, cài với:
sudo dnf install ntp
Trên CentOS, chạy:
sudo yum install ntp
Đối với Arch Linux, dùng:
sudo pacman -S ntp
Và trên openSUSE, nhập:
sudo zypper install ntp
Sau đó, kích hoạt dịch vụ chạy lúc boot và khởi động nó:
sudo systemctl enable ntpd sudo systemctl start ntpd
Trên distro khác chạy không systemd, bạn có thể phải chạy lệnh sau thay thế:
sudo update-rc.d ntpd enable sudo service ntpd start
hoặc bất cứ điều gì tương đương cho OS của bạn.
Nếu bạn nhận lỗi ntpd không tồn tại, thay "ntpd" bằng "ntp" trong các lệnh trên. Một số bản phân phối đặt tên file dịch vụ daemon ntpd khác nhau.
Kết luận
Hiếm khi bạn phải làm theo các bước này trên Linux OS có giao diện đồ họa ít nhất. Đồng bộ thời gian nên đã được cấu hình cho bạn. Nhưng các bước này ít nhất giúp bạn gỡ lỗi đôi khi. Nhiều bảng điều khiển môi trường desktop cho phép bật/tắt đồng bộ thời gian. Trong nền chúng dùng lệnh tương tự để cấu hình, nên bạn có thể tự làm khi công cụ GUI thất bại.