'분류 전체보기'에 해당되는 글 21건

멀티 부팅 시 시간 충돌 문제

출처: 듀얼 부팅 시스템에서 시간이 달라지는 문제

멀티 부팅 시스템에서 시간 충돌

운영체제들은 시스템의 파워가 없을 때에도 시간이 계속 유지되도록 머더보드 상에 달려 있는 하드웨어 시계(hardware clock)에 시간을 저장하고 가져온다. 대부분의 운영체제들(Linux/Unix/Mac)은 기본적으로 하드웨어 시계에 UTC로 시간을 저장한다. 비록 몇몇 시스템들(Microsoft Windows)은 하드웨어 시계에 현지 시간(local time)으로 시간을 저장하지만. 듀얼 부팅 시스템에서 하드웨어 시계를 다르게 본다면 이것은 문제들을 일으킨다.

UTC로 하드웨어 시계를 가지는 것의 장점은 UTC가 서머타임이나 표준시간대 오프셋(timezone offset)이 필요 없는 것처럼 다른 시간대(timezone)로 이동하거나 서머타임(Daylight Savings Time, DST)을 시작하고 마칠 때 하드웨어 시계를 재 설정할 필요가 없다는 것이다.

  • UTC: 협정 세계시(국제 표준시)
  • time zone: 타임존, 표준시간대 (미국이나 호주 같은 나라들은 여러 개의 시간대를 가지고 있음)
  • local time: 현지 시간, 지방시, 지역시

윈도우즈가 UTC를 사용하도록 바꾸는 것보다 리눅스가 현지 시간을 사용하도록 하는 것이 더 신뢰성이 있고 쉽기 때문에, 리눅스/윈도우즈 듀얼 부팅 시스템들은 현지 시간을 사용하는 경향이 있다.

1. 리눅스가 현지 시간(locale time)을 사용하도록 설정하기

시스템 기반 버전(15.04 그리고 상위)에서 BIOS clock을 UTC 대신에 현지 시간(local time)으로 설정하기 위해, timedatectl 명령어를 사용해야 한다. the Arch Wiki에 따르면:

현재 사용하도록 설정된 것을 확인하는 명령어:

$> timedatectl | grep local

하드웨어 시계는 timedatectl 명령어로 알아내거나 설정할 수 있다.

하드웨어 시계 시간 표준을 현지 시간으로 변경하기 위해 사용하는 명령어:

$> timedatectl set-local-rtc 1

UTC로 되돌리고 싶다면:

$ timedatectl set-local-rtc 0

2. 윈도우즈가 국제 표준시(UTC)를 사용하도록 만들기

MS 윈도우즈가 UTC로 하드웨어 시계로부터 시간을 계산하도록 만들기 위해,

아래의 내용(contents)을 담은 WindowsTimeFixUTC.reg 라는 이름의 파일을 만들고, 그런 다음 내용을 레지스트리에 병합하기 위해 파일을 더블-클릭한다.

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]
     "RealTimeIsUniversal"=dword:00000001

참고: 윈도우즈 시간 서비스는 종료 시 위 레지스트리 설정에 관계없이 계속 현지 시간을 기록할 것이다, 그래서 이 명령어로 타임 서비스를 비활성화시키는 것이 편하다 (만약 윈도우즈가 어떤 제3의 시간 동기화 솔루션을 사용하는 중에 시간 동기화가 여전히 요구되어진다면)

sc config w32time start= disabled

변경을 되돌리기
위에서 했던 것처럼 아래의 내용을 담은 파일을 만든 다음 원래의 변화로 병합하기 위해 파일을 더블-클릭한다.

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]
     "RealTimeIsUniversal"=-

만약 윈도우즈 시간 서비스가 비활성 상태라면, 다시 활성화 시키는 명령어:

sc config w32time start= demand

각각의 방법에 대해 실행 결과 모두 잘 동작하는 경우들을 확인 할 수 있었다.

  • UTC 하드웨어 시계에 ‘2. 윈도우즈가 국제 표준시(UTC)를 사용하도록 만들기’로 적용 한 방법
  • local time을 하드웨어 시계로 저장하는 Windows 방식 기준에서 ‘1. 리눅스가 현지 시간(locale time)을 사용하도록 설정하기’의 방법

이상 위의 2가지 방식이 각각 잘 적용되었다.

단지 Windows 설정 시, w32time 서비스에 대한 조작을 위해서 cmd 명령창을 관리자 권한으로 실행 시켜 주는 것만 주의하면 될 것이다.

만약 본문의 내용처럼 한쪽에 대한 설정을 완료 했으나, Windows와 Linux 부팅간에 시간 충돌 문제가 계속 발생하고 있다면 다음의 항목들에 대해 다시 한번 살펴 보면 될 것이다.

  • 각각의 설정 완료의 하드웨어 시계의 반영 여부(하드웨어 시계를 직접 저장하는 명령어를 이용하여 반영 시키지 않으면, 단순 OS상의 재시작 절차에 의해 하드웨어 시계는 당장 저장이 되지 않는 듯 하다. 설정 완료 후에는 시스템 완전 종료 혹은 하드웨어 시계를 저장할 수 있는 명령어를 통해 변경된 하드웨어 시각이 반영 될 수 있도록 한 뒤 테스트 할것)
  • Linux에서의 cron(crontab) 이나 혹은 rc.local 설정 / Windows의 batch 작업을 통한 부팅 시, 의도하지 않은 시간 동기화 명령을 실행하고 있지 않는지 살펴 보자. 나 또한 멀티 부팅 시 시간 문제를 rc.local 등의 실행 시작 시 rdate 등의 작업으로 해결하려 했는데, 하드웨어 시계에 의한 차이 때문에 발생하는 문제였던 지라, Windows / Linux 등의 각각의 환경에서 시간 동기화 작업을 해 주지 않는 이상 해결하긴 힘들었던 문제였던 것 같다.


블로그 이미지

나오K

,