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: ftp://elsie.nci.nih.gov/pub/

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

Bây giờ, download thư mục vào hệ thống với tiện ích fpt. Nếu không gặp phải vấn đề gì, bạn gần như đã có một bản copy của wget. Chạy:

$ wget ftp://elsie.nci.nih.gov/pub/tzdata2007c.tar.gz

Sau đó giải nén file với một tiện ích lưu trữ như tar:

$ tar -xzvf tzdata2007c.tar.gz

Bây giờ bạn đã có thông tin về trình tự thời gian, tiếp theo là đặt định dạng phù hợp. Bạn cần chuyển sang tài khoản người dùng root hoặc sử dụng lệnh sudo để chạy các dòng sau:

# zic -d zoneinfo northamerica

# cd zoneinfo

# cp -r * /usr/share/zoneinfo/

Zic sẽ chuyển dữ liệu vào định dạng Linux cần thiết và các lệnh khác sẽ copy thông tin mới vào thư mục phù hợp. Nếu đang sử dụng phiên bản Linux cũ hơn, có thể bạn cần đặt file vào thư mục như bên dưới:

# cp -r * /usr/lib/zoneinfo/

Sau đó kiểm tra lại xem toàn bộ thiết lập đã được đặt chính xác với DST mới hay chưa bằng cách quay trở lại và sử dụng thường trình zdump:

zdump -v /etc/localtime | grep 2007

Tất cả đã xong, cũng không khó lắm phải không các bạn.

Cuối cùng là phải thiết lập để đảm bảo tất cả dịch vụ daemon đều biết về thay đổi của DST. Nhiều chương trình ứng dụng nền tảng quan trọng như sendmail, postfix hay BIND chỉ xem xét thư mục /etc/localtime, vì chúng chỉ kiểm tra thời gian, ngày tháng khi khởi động. Thay vì phải theo dõi các chương trình ứng dụng này, cách tốt nhất là đơn giản hãy khởi động lại hệ thống. Tất cả dịch vụ sẽ được làm tươi lại với thông tin thời gian DST chính xác, được khoá an toàn trong đồng hồ CMOS.

Bây giờ, máy tính của bạn đã có thể hoạt động tốt về thời gian. Bạn có thể thấy rằng vấn đề này không quá tệ, ít nhất nó không giống với tình trạng Y2K của năm 2000.

Thứ Ba, 13/03/2007 09:28
31 👨 1.125
0 Bình luận
Sắp xếp theo
    ❖ Tổng hợp