윈도우와 리눅스를 듀얼부팅으로 쓰고 있다.
예전부터 윈도우를 쓰다가 리눅스로 부팅하면 시간이 9시간 앞으로 간 것으로 보이고, 리눅스를 쓰다가 윈도우로 부팅하면 시간이 9시간 뒤로 간 것으로 나타나는 현상이 있었지만 그냥 시간 동기화를 다시 하면서 사용해왔다.
리눅스를 쓰다가 재부팅하면서 bios 설정에 들어가보면 시간이 9시간 전 시간으로 저장되어있고, 윈도우로 부팅해서 시간을 동기화하고 다시 부팅하면서 bios 설정에 들어가보면 현재 시간으로 저장되는 현상이 있는 것도 확인을 했었다.
하지만 왜 이렇게 다를까? 하는 생각만 하고 고칠 생각을 하지 못했었다.
오늘 갑자기 생각이 나서 검색을 해보니 윈도우와 리눅스가 timezone를 적용하는 방법에서 해답을 찾을 수 있었다.
리눅스는 전세계 어디에 있든 bios에 설정된 시각을 UTC(세계협정시)로 간주를 하고 여기에 timezone를 적용한 시간을 화면에 표시하며, 시간을 인터넷과 동기화한 다음 현재 시각을 UTC로 변환해서 다시 bios에 기록을 한다.
반면에 윈도우는 bios의 시각을 현지 시각으로 인식을 해서 bios에 저장된 시각을 읽어서 그대로 현재 시각으로 사용하는 것을 기본으로 하고 있다.
그러다보니 리눅스에서 우리 나라보다 9시간 늦은 UTC 시각을 bios에 저장하면 윈도우는 그걸 그대로 읽어서 9시간 전으로 시간이 되돌아 가는 것이고, 시간을 동기화하면 다시 현지 시각을 bios에 저장하게되니 리눅스로 부팅하면 9시간 앞으로 시각이 보이는 것이다.
이를 해결하려면 윈도우의 시간을 UTC 기준으로 바꾸는 방법과 리눅스의 시간을 로컬 기준으로 바꾸는 두 가지 방법 중 하나를 선택하면 된다.
리눅스가 사용하는 방법으로 바꾸게 되면 bios 설정에 현지 시각이 아닌 UTC로 보인다는 것이 문제이긴 한데…
윈도우가 사용하는 방법으로 바꾸게 되면 bios 설정에 보이는 시각은 현지 시각으로 보이는데 호환성 측면에서는 문제가…
윈도우의 시간 설정을 변경하여 리눅스와 같은 표준을 따르는 것이 더 문제가 적어 보인다.
방법은 다음과 같이 하면 된다.
우선 regedit
을 열고 HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Control -> TimeZoneInformation
에 들어간다.
오른쪽 창의 빈 공간에서 마우스 오른쪽 버튼을 누르고 새로 만들기에서 QWORD(64비트)값(Q)
을 선택한 다음, ‘새 값 #1
‘에 ‘RealTimeIsUniversal
‘를 입력하고 엔터를 누른 다음 해당 항목을 더블클릭해서 ‘값 데이터
‘에 1
을 입력한다. 32비트 윈도우를 사용하는 경우 새로 만들기에서 DWORD(32비트)값(D)
을 선택하고 동일하게 하면 된다.
이제 윈도우를 다시 부팅하면 리눅스와 윈도우를 멀티부팅해도 항상 같은 시각이 표시된다. 단 bios 설정에 들어가서 시각을 확인해보면 우리 나라 표준시보다 9시간 늦은 UTC가 표시되므로 bios 시간 설정을 현재 시각으로 바꾸면 안된다.
참고로 윈도우가 사용하는 방법으로 리눅스 설정을 바꾸려면 리눅스에서 터미널을 열고 다음을 입력한다.
timedatectl set-local-rtc 1 --adjust-system-clock
이렇게 하면 bios 시각을 읽어서 그대로 표시하므로 bios 설정에서 보이는 시각이 곧 리눅스와 윈도우의 현재 시각이 된다.