Trong bài viết này, chúng ta sẽ xem xét tại sao đồng hồ hệ thống hiển thị thời gian và ngày sai sau khi tắt máy, khởi động lại hoặc tiếp tục từ chế độ ngủ đông của laptop/máy tính/máy chủ. Thời gian bị đặt lại mỗi lần và bạn phải thiết lập thủ công. Chúng ta sẽ tập trung vào trường hợp điển hình nhất: pin BIOS yếu và các trường hợp thú vị hơn liên quan đến dual boot Windows/Linux trên một máy tính, và lỗi firmware trên máy chủ HPE ProLiant G9 /G8 với hệ điều hành Windows Server.
Hệ thống không lưu Date/Time do pin BIOS/CMOS yếu
Câu trả lời điển hình cho câu hỏi “Tại sao thời gian và ngày bị đặt lại trên máy tính của tôi sau khi khởi động lại?” là pin BIOS (CMOS) hết điện. Pin này chịu trách nhiệm giữ cài đặt BIOS/UEFI khi máy tính hoặc laptop của bạn bị ngắt điện, và cung cấp hoạt động tự chủ của đồng hồ phần cứng tích hợp.
Nếu pin đã hết điện, khi bo mạch chủ không được cấp điện, BIOS không thể giữ cài đặt của nó và tất cả đều bị đặt lại, bao gồm ngày và giờ hiện tại. Nếu máy tính của bạn đã cũ, rất có thể pin của bạn đã chết. Chúng tôi mạnh mẽ khuyên bạn nên thay thế nó. Không khó, và quy trình không yêu cầu kỹ năng kỹ thuật đặc biệt. Trong hầu hết thiết bị gia dụng và doanh nghiệp, pin 3V CR2032 tiêu chuẩn được sử dụng trong BIOS.
Nếu thay thế pin không giúp được, hãy kiểm tra trạng thái jumper được sử dụng để đặt lại cài đặt BIOS (Jumper nằm gần khoang pin và được đánh dấu là CMOS / CLEAR / RESET). Ai đó có thể đã để nó ở vị trí RESET. Do đó, mỗi khi bo mạch chủ được cấp điện, cài đặt BIOS bị đặt lại. Di chuyển jumper về vị trí bình thường của nó.
Tùy chọn tiếp theo là cập nhật firmware BIOS của bo mạch chủ. Xem cách làm trên trang web của nhà cung cấp phần cứng của bạn. Firmware mới hơn thường sửa các lỗi khác nhau.
Windows: Thiết lập đồng bộ hóa đồng hồ với time.windows.com
Nếu cài đặt ngày/giờ trong Windows của bạn liên tục thay đổi, trước tiên bạn nên kiểm tra cài đặt múi giờ hiện tại và tham số đồng bộ hóa thời gian với máy chủ thời gian bên ngoài. Trong Windows 10, bạn có thể thấy cài đặt thời gian hiện tại trong Control Panel -> Clock and Region -> Date and Time. Trong ví dụ này, bạn có thể thấy múi giờ UTC + 01 được chỉ định, và Daylight Saving Time được bật.
Mẹo. Bạn có thể đặt múi giờ trong Windows từ command prompt bằng công cụ tzutil hoặc PowerShell.
Nếu máy tính của bạn không tham gia miền AD, hãy kiểm tra cài đặt đồng bộ hóa thời gian với nguồn thời gian bên ngoài (máy chủ thời gian NTP). Để làm điều đó, nhấp vào tab Internet Time và đảm bảo đồng bộ hóa tự động với máy chủ time.windows.com được thiết lập.
Khắc phục sự cố đồng bộ hóa thời gian cho máy tính tham gia miền AD
Nếu máy tính của bạn là một phần của miền Active Directory, bạn cần hiểu kiến trúc đồng bộ hóa thời gian trong miền AD.
Schéma đồng bộ hóa thời gian sau được sử dụng trong miền Active Directory:
- Domain controller gốc trong rừng AD, mà vai trò FSMO PDC emulator thuộc về, là nguồn thời gian cho tất cả các DC khác của miền này;
- Các DC khác đồng bộ hóa thời gian với PDC;
- Thành viên miền thông thường (máy chủ và trạm làm việc) đồng bộ hóa thời gian với domain controller gần nhất có sẵn theo cấu trúc AD.
Root PDC có thể đồng bộ hóa thời gian của nó với cả nguồn bên ngoài và với chính nó (mặc định).
Bạn có thể tìm domain controller với vai trò PDC bằng lệnh:
netdom /query fsmo
Để cấu hình đồng bộ hóa thời gian với máy chủ NTP bên ngoài trên PDC, các lệnh sau được sử dụng.
Cấu hình nguồn thời gian bên ngoài:
w32tm /config /manualpeerlist:"0.nl.pool.ntp.org,0x1 1.nl.pool.ntp.org,0x1 2.nl.pool.ntp.org,0x1 3.nl.pool.ntp.org,0x1"
Làm cho DC này trở thành nguồn thời gian tin cậy cho client:
w32tm /config /reliable:yes
Khởi động lại máy chủ thời gian w32 để đồng bộ hóa thời gian DC với máy chủ thời gian nl.pool.ntp.org:
net stop w32time && net start w32time
Bạn có thể xem nguồn và trạng thái đồng bộ hóa:
w32tm /query /peers
Bắt đầu đồng bộ hóa ở chế độ thủ công:
w32tm /resync /rediscover
Windows & Linux hiển thị thời gian khác nhau khi Dual Boot
Chúng ta nên xem xét riêng các trường hợp khi hai hệ điều hành (Windows & Linux) được cài đặt trên máy tính trong cấu hình Dual Boot. Bạn có thể gặp vấn đề sau khi khởi động vào hệ thống khác (khởi động vào Linux sau Windows) thời gian nhanh hoặc chậm vài giờ so với thời gian thực tế.
Windows và Linux làm việc với thời gian BIOS khác nhau. Chúng sử dụng hai định dạng thời gian khác nhau: UTC và localtime.
Các hệ điều hành GNU/Linux (bao gồm Mac OS X) giả định thời gian trong BIOS ở định dạng UTC (GMT). Theo đó khi khởi động, Linux chuyển đổi thời gian UTC bằng cách thêm (hoặc trừ) độ lệch của múi giờ hiện tại do người dùng chọn. Điều này có nghĩa là để lấy thời gian cục bộ cho múi giờ Athens UTC+2, Linux sẽ thêm 2 giờ.
Windows nghĩ rằng thời gian trong BIOS được giữ ở định dạng localtime, và nếu bạn đã chỉ định múi giờ mới hoặc đồng bộ hóa thời gian với nguồn bên ngoài, hệ thống sẽ thực hiện các thay đổi tương ứng với thời gian cục bộ trong BIOS. Linux (Ubuntu, trong trường hợp của tôi) nghĩ rằng thời gian trong BIOS được chỉ định ở định dạng UTC và thêm độ lệch múi giờ thêm. Đây là lý do tại sao thời gian bị sai khi chuyển từ Linux sang Windows và ngược lại.
Để khắc phục, bạn nên làm cho Windows sử dụng định dạng thời gian UTC trong tham số registry RealTimeIsUniversal.
reg add "HKLMACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /t REG_DWORD /d 1 /f
Mẹo. Trong phiên bản Windows 64-bit, bạn cần tạo tham số kiểu QWORD thay vì DWORD:
reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_QWORD /d 1
Cũng hãy vô hiệu hóa đồng bộ hóa thời gian với Internet trong Windows, vì tại mỗi lần cập nhật thời gian, Windows sẽ đặt lại thời gian UTC về local.
sc config w32time start= disabled
Khởi động lại Windows của bạn.
Hoặc bạn có thể làm cho Linux sử dụng thời gian cục bộ. Trong Ubuntu 15.04 hoặc cao hơn, bạn có thể sử dụng công cụ timedatectl:
timedatectl set-local-rtc 1
Máy chủ HPE với Windows Server: Độ lệch thời gian hệ thống sau khi khởi động lại
Một trong những khách hàng từ xa của tôi gặp một vấn đề thú vị sau khi thay đổi múi giờ trên máy chủ HPE DL/ML Gen9 chạy Windows Server 2008 R2 / 2012 R2. Như đã tiết lộ, khi thay đổi thời gian hệ thống hoặc múi giờ trên máy chủ HP ProLiant Gen9 (và trên một máy chủ HP ProLiant DL580 Gen8), thời gian hệ thống không được lưu và được đặt lại về thời gian trước đó sau khi khởi động lại. Vấn đề xảy ra trên các máy chủ, trên đó Windows Server khởi động ở chế độ Legacy (với khởi động UEFI gốc, không có vấn đề thay đổi thời gian).
Sự kiện sau xuất hiện trong nhật ký hệ thống:
The system time has changed to 2019-01-29T12:12:28.500000000Z from 2019-01-29T13:12:27.923115700Z.
Change Reason: System time synchronized with the hardware clock.
Là giải pháp cho vấn đề này, HP đề xuất cập nhật phiên bản ROM lên ít nhất 1.5. Đây là phiên bản của ROM-Based Setup Utility (RBSU) không có lỗi đặt lại thời gian.
Hoặc như giải pháp thay thế, bạn có thể thiết lập BIOS cung cấp cho Windows thời gian hệ thống UTC (thay vì thời gian cục bộ). Để làm điều đó, như chúng ta đã nói ở trên, bạn phải tạo tham số với tên RealTimeIsUniversal và giá trị 1 trong khóa registry HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation.