Bạn đang gặp rắc rối với việc các lệnh như last reboot
, uptime
và who -b
hiển thị thông tin **thời gian khởi động lại** khác nhau trên hệ thống Linux của mình? Đừng lo lắng! Bài viết này sẽ giúp bạn hiểu rõ nguyên nhân của sự khác biệt này và cung cấp các giải pháp để khắc phục, đảm bảo bạn luôn có thông tin chính xác về thời gian hoạt động của hệ thống.
Có một vài lý do chính dẫn đến việc các lệnh hiển thị thời gian khởi động lại khác nhau. Quan trọng nhất là mỗi lệnh lấy thông tin từ các nguồn khác nhau, và các nguồn này có thể không đồng bộ hoặc bị ảnh hưởng bởi các yếu tố khác nhau.
* uptime
: Lệnh này hiển thị **thời gian hệ thống đã hoạt động liên tục** kể từ lần khởi động cuối cùng. Nó lấy thông tin trực tiếp từ kernel, vì vậy thường chính xác nhất về thời gian hoạt động hiện tại.
* who -b
: Lệnh này truy vấn thông tin từ file /var/run/utmp
(hoặc tương tự), ghi lại thời điểm hệ thống khởi động. Nếu file này bị mất hoặc bị ghi đè, thông tin có thể không chính xác.
* last reboot
: Lệnh này đọc nhật ký khởi động lại từ file /var/log/wtmp
. File này có thể bị luân chuyển (rotated) theo thời gian, có nghĩa là các bản ghi cũ hơn sẽ bị xóa để tiết kiệm không gian. Do đó, nếu lần khởi động lại gần nhất xảy ra trước khi file wtmp
được luân chuyển, lệnh này có thể không hiển thị thông tin chính xác.
Một nguyên nhân phổ biến khác là sự không đồng bộ về **thời gian hệ thống và thời gian phần cứng (RTC)**. RTC thường được lưu trữ ở múi giờ UTC, trong khi hệ thống có thể sử dụng múi giờ địa phương. Nếu có sự khác biệt giữa hai múi giờ này, các lệnh có thể hiển thị thời gian không chính xác, đặc biệt là trong quá trình khởi động sớm.
Ví dụ: Nếu hệ thống của bạn được cấu hình để đọc RTC theo múi giờ địa phương, nhưng quá trình khởi động sớm lại đọc RTC theo UTC, bạn có thể thấy thời gian hiển thị sai lệch cho đến khi hệ thống đồng bộ hóa múi giờ chính xác.
**Initramfs** là một hệ thống file tạm thời được sử dụng trong quá trình khởi động sớm. Nếu initramfs không chứa thông tin múi giờ chính xác hoặc không được cập nhật sau khi thay đổi múi giờ, nó có thể gây ra sự cố với thời gian hệ thống. Điều này đặc biệt quan trọng nếu /etc/localtime
là một liên kết tượng trưng (symbolic link) đến file múi giờ thực tế.
Để giải quyết vấn đề **thời gian khởi động lại** không chính xác, bạn có thể thực hiện các bước sau:
timedatectl
để xem và thay đổi cấu hình RTC. Đảm bảo rằng RTC được đặt ở múi giờ UTC hoặc múi giờ địa phương phù hợp./etc/adjtime
: Đảm bảo rằng dòng thứ ba của file này chứa "UTC" hoặc "LOCAL" tùy thuộc vào việc bạn muốn lưu trữ RTC theo UTC hay múi giờ địa phương./etc/localtime
: Xác minh rằng đây là một liên kết tượng trưng hợp lệ đến file múi giờ trong /usr/share/zoneinfo/
.dracut -f -v /boot/initramfs-$(uname -r).img $(uname -r)
(trên hệ thống sử dụng dracut).timedatectl
Lệnh timedatectl
cho phép bạn kiểm tra và thay đổi cài đặt thời gian của hệ thống.
timedatectl status
timedatectl set-local-rtc 0 # Đặt RTC theo UTC
timedatectl set-timezone Asia/Ho_Chi_Minh #Đặt múi giờ
/etc/adjtime
Kiểm tra nội dung của file /etc/adjtime
để biết RTC đang sử dụng UTC hay LOCAL.
cat /etc/adjtime
Sau khi thực hiện các thay đổi, cập nhật initramfs để đảm bảo các thay đổi được áp dụng trong quá trình khởi động.
dracut -f -v /boot/initramfs-$(uname -r).img $(uname -r)
Việc hiểu rõ nguồn gốc dữ liệu và cấu hình thời gian của hệ thống là rất quan trọng để đảm bảo thông tin **thời gian khởi động lại** chính xác. Bằng cách thực hiện các bước kiểm tra và khắc phục được đề cập trong bài viết này, bạn có thể giải quyết các vấn đề liên quan đến thời gian và đảm bảo hệ thống của bạn luôn hoạt động với thông tin thời gian chính xác.
Bài viết liên quan