윈도우와 우분투를 듀얼 부팅으로 쓰는 사람이라면 한 번쯤 겪어봤을 재밌는 문제가 있다. 바로 두 OS의 시간이 안 맞는 건데, 리눅스에서 윈도우로 돌아오면 딱 8시간이 느려져 있는 거다.
사실 이건 윈도우와 리눅스가 하드웨어 시계(RTC) 시간을 해석하는 방식이 달라서 생기는 일이다. 메인보드에는 물리적인 세계의 시간을 저장하는 시계 칩이 하나 있는데, 윈도우는 하드웨어 시계에 로컬 시간이 저장돼 있어야 한다고 본다(예를 들어 네 시간대가 UTC+8이면 하드웨어 시계도 베이징 시간이어야 한다는 식). 반면 리눅스/우분투는 하드웨어 시계에 UTC(협정 세계시)가 저장돼 있어야 한다고 본다.
네 시간대가 UTC+8(베이징 시간)이라고 가정해 보자. 실제 세계의 시간이 베이징 시간(로컬 시간) 오후 4시(16:00)라면, 대응하는 UTC 시간은 오전 8시(08:00)다.
1단계: 윈도우에서
윈도우를 쓰는 중이고, 시스템 시간이 16:00(오후 4시)으로 제대로 표시되고 있다.
윈도우는 하드웨어 시계에 로컬 시간이 저장돼야 한다고 생각한다. 그래서 16:00이라는 시간을 하드웨어 시계에 기록한다.
2단계: 재부팅하고 우분투로 진입
컴퓨터를 켜고 우분투로 들어간다.
우분투가 하드웨어 시계를 읽는다. 기본적으로 하드웨어 시계에 UTC 시간이 저장돼 있다고 가정하기 때문에, 16:00을 그대로 읽어 들인다.
우분투 속마음: "오, 하드웨어 시계가 UTC로 16:00이라고 하네. 내 시간대는 UTC+8이니까 로컬 시간은 UTC에 8시간을 더한 값이어야지."
계산: 16:00(자기가 UTC라고 믿는 값) + 8시간 = 다음 날 새벽 00:00.
우분투는 인터넷을 통해 자동으로 네트워크 시간을 맞춘다(NTP). 네트워크에 연결된 뒤 시스템이 깨닫는다. "어라? 하드웨어 시계로 계산한 로컬 시간(00:00)이 네트워크 표준 시간(16:00)과 안 맞잖아? 8시간이나 차이 나는데?"
그래서 우분투는 똑똑하게도 이런 일을 한다:
- 시스템 시간을 올바른 네트워크 시간(16:00)으로 자동 교정한다.
- 그리고 앞으로도 일관성을 유지하려고, 교정된 UTC 값으로 하드웨어 시계를 업데이트한다.
- 이때 하드웨어 시계의 숫자가 우분투에 의해 16:00에서 08:00으로 바뀐다.
3단계: 재부팅하고 윈도우로 복귀(시간 틀어짐)
다시 컴퓨터를 재부팅해서 윈도우로 돌아간다.
- 윈도우가 하드웨어 시계를 읽는다. 여전히 하드웨어 시계에 로컬 시간이 저장돼 있다고 믿기 때문에, 08:00을 그대로 읽어 들인다.
- 윈도우가 부팅 시 자동으로 인터넷 시간 동기화를 못 하는 상황이라면 수동으로 맞춰야 하니, 일단 이 시간을 로컬 시간 오전 8시로 그대로 표시한다.
듀얼 부팅 시계 삽질기