저는 한 대의 PC에 Ubuntu와 Windows를 모두 설치해서 듀얼부팅 환경을 구성해놓고, 개발 작업을 하려면 Ubuntu로, 게임 등 엔터테인먼트(?)를 하려면 Windows로 부팅해서 사용하고 있습니다.
이렇게 사용한 지 약 5년 정도가 되었는데, 문득 자주 느끼는 점이 바로 Windows와 Linux는 서로 절대 섞일 수 없는 물과 기름과 같은 관계 같다는 것입니다. 한 가지 예시로, Windows 10이 얼마 전에 출시되었지만, 여전히 설치시 Grub Bootloader를 날려먹는 만행이 계속되고 있습니다.
이번 글에서 다룰 Time Sync가 깨지는 현상도 역시 이와 같은 맥락입니다. 듀얼부팅을 구성해서 사용해 보신 분은 한번쯤 경험해 보셨을텐데, Windows 혹은 Ubuntu 어느 한쪽으로 부팅해서 시계를 맞춘 뒤 재부팅해서 다른 OS로 부팅하면 시계가 맞지 않는 현상을 볼 수 있습니다.
저도 이 문제를 진작부터 인지는하고 있었지만, 귀차니즘때문에 그냥 매번 다시 맞춰서 사용하다가 모종의 사건(?)을 계기로 거슬림을 느끼고 확실히 처리(!)하고 가기로 하였습니다.
원인
이 상당히 거슬리는 시간이 흐트러지는 문제를 경험하고 자세히 관찰해 보셨다면, 그 흐트러진 시각이 항상 9시간씩 차이가 나는 것을 알 수 있을 것입니다. 9시간이라면.. 우리나라 시간대가 GMT+9니까, 이것과의 연관성까지 생각하셨다면 UTC와 Local Time간의 해석 문제라는 결론에 도달하실 수 있습니다.
즉, 이 '시각이 흐트러지는' 현상은 메인보드의 시스템 시계(RTC)에 저장된 시각을 Windows와 Ubuntu에서 해석하는 방식이 달라서 발생하는 문제입니다. Windows에서는 RTC를 Local Time으로 해석하고, Ubuntu에서는 UTC로 해석합니다. 따라서 Windows에서 시각을 맞추고 Ubuntu로 부팅하면 9시간 이후로 시계가 잘못 표시되어 나오게 됩니다.
해결 방법
두 개의 OS에서 시스템 시계를 해석하는 방식을 한 가지로 일치시켜 줌으로써 이 문제를 해결할 수 있습니다. 즉, (i) Ubuntu에서 시스템 시계를 Local Time으로 해석하도록 변경하거나, (ii) Windows에서 시스템 시계를 UTC로 해석하도록 변경하는 조치 중 한가지를 골라서 적용하면 간단히 문제를 해결할 수 있습니다.(둘 다 하면 안됩니다;;)
제가 두 가지 방법을 각각 시도해 본 결과, Windows에서 설정을 변경하면 추후 되돌리는 과정이 (레지스트리를 편집해야 하는 등..) 약간 복잡하므로, Ubuntu에서 Local Time으로 해석하도록 설정을 변경하는 (i)번 방법이 훨씬 깔끔한 것으로 보입니다.
Ubuntu 재단에서는 시스템 시각을 UTC로 해석하는 방식의 장점으로 시간대를 넘어다닐 때 시스템 시각을 변경하지 않아도 된다는 점을 제시하지만, 제가 볼 때는 그닥 큰 장점은 아닌 것 같습니다. RTC가 쓰기 횟수 제한이 있는 것도 아니니, 비행기 내려서 시계 한 번만 다시 맞춰주면 되는 것이지요. 하물며, 비행기타고 여러 시간대를 건너다니며 들고다닐 일 없는 데스크톱 PC라면...
▶ Ubuntu로 부팅해서 다음 절차를 수행합니다.
1. Terminal을 열고 다음 명령을 실행해서 RTC를 Local Time으로 해석하도록 변경합니다.
timedatectl set-local-rtc 1
2. 재부팅 후에도 변경사항이 적용될 수 있도록 /etc/default/rcS를 텍스트 에디터로 열고 UTC=no를 추가(혹은 수정) 합니다.
... UTC=no ...
3. 시스템 시각을 다시 맞추고 재부팅합니다.
* 참조: http://www.webupd8.org/2014/09/dual-boot-fix-time-differences-between.html