แก้ปัญหาขอบเขตเวลาที่แตกต่างเมื่อใช้ ลินุกซ์ กับ วินโดว์ส เครื่องเดียวกัน


วันนี้ได้พบคำถามปัญหาที่เฟซของ Ubuntu Club Group เกี่ยวกับการแสดงเวลาที่แตกต่างกันของ Ubuntu กับ Windows 10 จริงๆปัญหานี้มีมานานแล้ว เจอคำถามนี้เมื่อไหร่ก็จะตอบกลับไปให้แก้ไขไฟล์ /etc/default/rcS เพิ่มหรือแก้คำสั่ง UTC=no แต่คำตอบกลับมาว่า “ทำแล้วแต่ยังไม่มีการเปลี่ยนแปลง” เอ้อ … ไรว้า …

ขออธิบายเกี่ยวกับปัญหาที่เกิดขึ้นก่อน เนื่องจาก 2 OS มีการเรียกใช้ค่าวันที่และเวลาแตกต่างกัน Windows จะเรียกใช้ค่าวัน/เวลาจาก RTC (Real Time Clock) คือค่านาฬิกาจาก BIOS บนเมนบอร์ด ส่วนลินุกซ์ที่เรียกใช้ค่าวัน/เวลา UTC (Coordinated Universal Time)  หน่วยเวลาสากล บวก กับค่า Time Zone (โซนเขตเวลามาตราฐานสากล) ของประเทศผู้ใช้งาน เช่นประเทศไทยก็จะ +7 ชั่วโมง ซึ่งค่า UTC นั้นลินุกซ์อ่านค่ามาจากอินเตอร์เน็ตตอนเปิดใช้งาน

ปัญหาจะเกิดขึ้นต่อเมื่อเราติดตั้งลินุกซ์ในเครื่องนั้น ไม่ว่าจะเป็นในลักษณะ ใช้งานร่วมฮาร์ดดิสต์ (Dual-boot) หรือ แยกฮาร์ดดิสต์ เกิดปัญหาได้หมด เพราะนอกจากลินุกซ์จะใช้เวลา UTC แล้ว ยังได้เผื่อแผ่ค่าวันเวลามาอัพเดตแก่ RTC ด้วย ดังนั้นพอเราปิดระบบลินุกซ์ แล้วมาใช้วินโดว์สจะพบว่าเวลาแตกต่างกัน -7 ชั่วโมง ถึงจะเข้าไปแก้เวลาใน BIOS แล้ว เมื่อกลับไปใช้ลินุกซ์เมื่อใด RTC ก็จะถูกแก้ให้เป็นเวลาตาม UTC ทุกทีไป

กลับมาที่การแก้ปัญหา ก่อนหน้าวิธีที่ผู้เขียนเคยใช้ได้ผลคือ แก้ไขไฟล์ /etc/default/rcS เพิ่มหรือแก้คำสั่ง UTC=no แต่ ณ เวลานี้แก้ปัญหาไม่ได้แล้ว เลยค้นหาผ่านกูเกิลและก็พบว่า วิธีการแก้ปัญหาของผมจะใช้ได้กับ Ubuntu รุ่นก่อนหน้า 16.04 แต่ถ้ารุ่นนี้ลงมา เขาใช้วิธีแก้ปัญหาแบบใหม่ดังนี้ ใช้คำสั่งคอมมานด์ไลน์ผ่านเทอร์มินัลคอลโซล

คำสั่งดูค่าวันเวลา ณ ปัจจุบัน

timedatectl

โปรแกรมจะรายงาน

Local time: Fri 2016-12-23 22:55:59 ICT
Universal time: Fri 2016-12-23 15:55:59 UTC
RTC time: Fri 2016-12-23 15:55:59
Time zone: Asia/Bangkok (ICT, +0700)
Network time on: yes
NTP synchronized: no
RTC in local TZ: no

คำสั่งกำหนดค่าวันเวลา พารามิเตอร์ set-local-rtc 1 หมายถึงใช้เวลา RTC ถ้าค่า 0 หมายถึง UTC

timedatectl set-local-rtc 1 –adjust-system-clock

คำสั่งดูค่าวันเวลาเพื่อตรวจสอบ

timedatectl

โปรแกรมจะรายงาน

Local time: Fri 2016-12-23 15:56:13 ICT
Universal time: Fri 2016-12-23 08:56:13 UTC
RTC time: Fri 2016-12-23 15:56:13
Time zone: Asia/Bangkok (ICT, +0700)
Network time on: yes
NTP synchronized: no
RTC in local TZ: yes

Warning: The system is configured to read the RTC time in the local time zone.
This mode can not be fully supported. It will create various problems
with time zone changes and daylight saving time adjustments. The RTC
time is never updated, it relies on external facilities to maintain it.
If at all possible, use RTC in UTC by calling
‘timedatectl set-local-rtc 0’.

สังเกตุความแตกต่าง ที่ตำแหน่ง Local Time , RTC Time, RTC in local TZ

หากเรากำหนดค่าวันเวลาแบบ RTC จะมี Warning ขึ้นมาเตือนให้ทราบประมาณว่า การใช้ค่าเวลาจาก RTC จะไม่มีการปรับปรุงค่าให้เป็นปัจจุบัน ผู้ใช้จะต้องคอยปรับค่าเวลาเอง และแนะนำให้ใช้ค่าเวลา UTC ดีกว่า

จากความเห็นของผู้เขียนมีความเห็นว่า การใช้ค่าวันเวลาแบบ UTC จะได้เวลาที่ตรงและแม่นยำตามมาตราฐานเวลาสากล แต่ถ้าเลือกแบบ RTC เรามักจะเจอปัญหาเวลาเลื่อนไม่ตรงตามเวลาสากล เพราะค่าวันเวลายังคงอยู่บนเครื่องได้เพราะเป็นฮาร์ดแวร์และมีไฟเลี้ยงจากแบตเตอรี่ แต่ความแม่นยำคงมีน้อยกว่าแน่นอน อีกอย่างแบตฯก็มีการเสื่อมและอายุการใช้งานเช่นกัน ดังนั้นถ้าเป็นไปได้แนะนำให้ Windows เรียกใช้ค่าวันเวลาแบบ UTC เช่นกันจะดีกว่า ซึ่งวิธีการบนวินโดว์สทำดังนี้ บูตเข้าระบบวินโดวส์ แล้วเปิดคอนโซลในฐานะ Admin จากนั้นใช้คำสั่งคอมมานด์ไลน์

สำหรับวินโดว์ส 32 bits

Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1

สำหรับวินโดว์ส 64 bits

Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_QWORD /d 1

หากก่อนหน้านี้มีการวันเวลาโดยการเปิดฟังค์ชั่นอัพเดตผ่านอินเตอร์เน็ต ก็ให้ปิดฟังค์ชั่นนั้นก่อน แล้วรีบูตเครื่อง

ที่มาของข้อมูล:
http://ubuntuhandbook.org/index.php/2016/05/time-differences-ubuntu-1604-windows-10/

Facebook Comments