Chuyển đổi các hệ thống Linux sang bộ đo thời gian mới (DST)
“Xuân chậm, thu nhanh”, đó là quy luật của thời gian ban ngày, và nó
cũng được đưa vào nguyên tắc bộ đếm thời gian của máy tính (chú ý: ở
đây là theo thời gian của Mỹ, ngược lại đôi chút với Việt Nam). Hiện
nay, Quốc hội Mỹ đã thông qua một số thay đổi cho điều luật Daylight
Savings Time (DST), quy định về thời gian ở Mỹ. Các thay đổi mới này
sẽ có hiệu lực trong năm nay. Và hệ thống máy tính Linux của chúng ta
cũng cần phải điều chỉnh một chút cho phù hợp kiểu tính thời gian mới.
Các điều luật DST thường được áp dụng từ ngày Chủ nhật đầu tiên của
Tháng Tư, nhưng theo quy định mới sẽ là ngày Chủ nhật thứ hai của Tháng
Ba (tức là năm nay bắt đầu từ hôm chủ nhật 11/3). Thời gian kết thúc là vào
ngày chủ nhật đầu tiên của tháng Mười Một (tức ngày 4/11 trong năm nay),
thay vì ngày chủ nhật cuối cùng của tháng mười như trước kia.
Quy định mới này ảnh hưởng không nhỏ tới các chương trình và hệ điều
hành sản xuất từ trước năm 2005. Bởi chúng tuân theo các quy tắc DST
Tháng tư/Tháng Mười cũ.
Không giống với Windows, Linux và các thành viên còn lại trong họ hệ điều
hành Unix bây giờ không tích hợp sẵn thành phần Daylight Savings Time
mà sử dụng một phương thức hoàn toàn khác cho hệ thống thời gian.
Hầu hết các hệ thống Linux đều có hai đồng hồ. Một là đồng hồ phần cứng,
a.k.a, “CMOS clock”, thường đặt trên hệ thống máy tính dòng x86. Thứ hai
là đồng hồ pin CMOS, đặt trên bảng mạch chính, chạy liên tục 24/7. Đồng
hồ hệ thống thường hoạt động sau khi khởi động máy tính. Hầu hết các
chương trình và ứng dụng Linux nội bộ sử dụng đồng hồ này.
Mặc định, đồng hồ hệ thống lấy tín hiệu từ CMOS. Có một cách thiết lập tốt
hơn nhiều là sử dụng kết nối Internet, với một chương trình như ntpd.
Chương trình này sử dụng NTP (giao thức thời gian mạng) để lấy thời gian
chính xác về từ NTS (máy chủ thời gian mạng).
Một số hệ thống Linux, Unix cũ đòi hỏi bạn phải sử dụng chương trình có
tên ntpdate để cài đặt thời gian “một cách thủ công”. Bây giờ, tính năng này
đã được tích hợp sẵn trong gói ntpd.
Bạn không cần phải bận tâm đến việc cập nhật thời gian cho đồng hồ hệ
thống. Trong Linux, thời gian khởi điểm thường được tính bắt đầu từ nửa
đêm (theo giờ UTC tức Coordinated Universal Time - thời gian phổ biến
chung), hay từ 00:00h đêm ngày 1 tháng 1 năm 1970. Sau đó, đồng hồ hệ
thống sẽ hiển thị thời gian được tính thông qua số giây tăng lên. Phương
thức này tương tự như của Unix Epoch.
(Với phương thức lưu trữ thời gian theo giây kiểu số nguyên 32-bit có dấu
của Epoch, thời gian kết thúc thường được tính là đến 03:14:07 UTC của
ngày Thứ Ba, 19 tháng 1 năm 2038. Sẽ có vấn đề nảy sinh nếu ngày này
không chính xác).
Ở đây, chúng ta không đề cập đến DST hay thời gian theo khu vực địa lý.
Bởi vì Linux lưu trữ thời gian theo vùng và thông tin DST trong một file
riêng (/usr/share/zoneifo). Các hệ thống Linux cũ hơn có thể lưu trữ trong
file /usr/lib/zoneinfo. Thời gian theo vùng và DST đều được xác định bởi
một liên kết tượng trưng tới thư mục /etc/localtime.
Để hệ thống Linux của bạn biết chắc chắn khi nào là giờ DST, cần cập nhật
file zoneinfo thường xuyên, hoặc thay thế nó bởi file mới với các quy định
mới.
Nếu nâng cấp thường xuyên máy tính, bạn sẽ thấy rằng hầu hết các hệ thống
Linux hiện đại đều tự động update thông tin DST mới phù hợp cho máy tính.
Bạn nên cập nhật thường xuyên bản vá lỗi mới nhất của nhà sản xuất.
Một số (không phải là tất cả) phân phối Linux và Unix có cung cấp tài liệu
hướng dẫn sử dụng các công cụ update để thiết lập hệ thống với DST mới.
Đó là: AIX, Debian Testing, Debian Unstable, FreeBSD, Novell SUSE
Linux Enterprise, Red Hat Linux, và Solaris.
Sau khi sử dụng các công cụ này, hãy kiểm tra lại xem liệu các thiết lập DST
đã chính xác chưa. Tất nhiên, không thể chỉ kiểm tra bằng cách nhìn vào file
zoneinfo. Chúng không thể đọc được bằng mắt thường.
Thay vào đó, bạn cần dùng lệnh zdump trên giao diện shell. Zdump đưa ra
thời gian hiện tại cho từng vùng theo tên cung cấp trên dòng lệnh. Chạy câu
lệnh sau:
zdump -v /etc/localtime | grep 2007
Nếu không nhận được bất kỳ kết quả nào từ lệnh zdump, có thể hệ thống
của bạn cần được mô tả thông tin thời gian khu vực cụ thể.
Ví dụ:
$ zdump -v /etc/localtime EST5EDT | grep 2007
Trong đó EST5EDT là thời gian địa phương cho vùng phía Đông nước Mỹ.
Nếu sử dụng thời gian cho vùng trung tâm (Central), mã là CST6CDT, ở
vùng núi (Mountain) là MST7MDT và ở vùng biển (Pacific) là PST8PDT.
Nếu hệ thống được thiết lập chính xác, nó sẽ đưa ra danh sách hiển thị bắt
đầu với hai dòng có chứa “Sun Mar 11” (chủ nhật ngày 11/3). Nếu không,
bạn sẽ thấy hai dòng chỉ có chữ “Sun Apr 1” (chủ nhật ngày 1/4) bên trong.
Khi đó bạn cần tự update lại thông tin thời gian cho hệ thống.
Chỉ cần bỏ ra chút thời gian với giao diện shell là bạn có thể thực hiện được
thay đổi. Nó hoàn toàn không khó.
Đầu tiên, sử dụng trình duyệt Web để kiểm tra các file thông tin DST và thời
gian theo vùng được cập nhật gần đây nhất trên website:
/>
Như ví dụ với một hệ thống thử nghiệm, file dữ liệu mới nhất là
tzdata2007c.tar.gz.
Tiếp theo, nếu chưa có một thư mục cho các file tạm thời và các bản
download, hãy tạo nó và đặt tên là tzdata. Tạo và di chuyển thư mục này
bằng các lệnh:
$ mkdir tzdata
$ cd txdata