System time/ko
시스템 클록에서 돌아온 시스템 시간은 유닉스 시스템에서 시간 상태를 유지할 때 사용합니다. 하드웨어 시계 또는 외부 시간 서버로 설정할 수 있습니다.
서문
소프트웨어 시계 vs 하드웨어 시계
커널에서 제공하는 시스템 시계는 세계 시간 기준(UTC) 1970년 1월 1일 0시 0분 0초부터 지난 간단한 초 횟수로 구연했습니다. 이를 유닉스 시간이라고 합니다.
하드웨어 시계(실시간 시계 또는 RTC)는 보통 메인보드에 붙어있는 부분입니다. 언제든 운영체제의 상태와 상관 없이 일방적으로 동작하며 컴퓨터를 끌 때도 동작합니다.
UTC 시간 vs 지역 시간
System time is always set to localtime as determined by the user's time zone, taking daylight saving time (DST) into account.
하드웨어 시계의 시간은 지역 시간 또는 UTC 시간 두가지 표준 방식으로 표현하여 수정할 수 있습니다. 지역 시간은 DST를 포함한 시간대의 실제 시간입니다. 적당한 시간은 UTC 시간인데 시스템 시간은 시간대를 추가하여 시간차와 DST를 계산하기 때문입니다. 그래서 일광 절약 시간을 자동으로 적용하도록 바꾸며, 하드웨어 시계를 바꾸지 않아도 시간대를 바꿀 수 있습니다. 예외가 있다면 듀얼 부팅을 수행하는 시스템에 있습니다. 다른 운영체제가 UTC 하드웨어 시계 설정을 지원하지 않은 경우입니다(기본적으로 윈도우는 지역 시간을 사용합니다).
Configuration
시간대
시간을 제대로 유지하려면, 시간대를 선택하여 시스템이 어디에 위치했는지 알려야합니다.
OpenRC
systemd
systemd/ko 에는 시간대를 관리하는 timedatectl 명령이 있습니다:
현재 시간대를 확인하려면:
user $
timedatectl
존재하는 시간대를 확인하려면:
user $
timedatectl list-timezones
시간대를 Germany 처럼 바꾸려면:
root #
timedatectl set-timezone Europe/Berlin
LC_TIME
이 환경 변수en에는 날짜와 시간의 형식을 정합니다. 자세한 내용은 The GNU C 라이브러리 문서를 참고하십시오.
시스템 시계
보통 시스템 클록 시간은 부팅 과정에서 하드웨어 클록이 설정합니다. 이 대신 네트워크 시간 서버를 활용하거나 시스템 시계를 직접 설정할 수도 있습니다.
시스템 클록 시간을 관리할 때 date 명령을 사용할 수 있습니다:
현재 소프트웨어 시계 시간을 확인하려면:
user $
date
2012년 12월 17일 12:30으로 시스템 시계를 설정하려면:
root #
date 121712302012
시간 서버
시간 서버 사용을 다루는 정보를 살펴보려면 NTP 게시글을 살펴보십시오.
systemd
systemd에는 시스템 클록 시간을 다루는 timedatectl 명령이 들어있습니다:
현재 소프트웨어 클록 시간을 확인하려면:
user $
timedatectl
시스템 시계를 설정하려면:
root #
timedatectl set-time "2012-12-17 12:30:59"
하드웨어 시계
하드웨어 시계 기능을 사용하려면, 다음 커널 옵션을 활성화해야합니다:
Device Drivers --->
[*] Real Time Clock --->
[ ] Set system time from RTC on startup and resume
[ ] Set the RTC time based on NTP synchronization
[*] /sys/class/rtc/rtcN (sysfs)
[*] /proc/driver/rtc (procfs for rtc0)
[*] /dev/rtcN (character devices)
<*> PC-style 'CMOS'
실행 시간에 현재 하드웨어 시계 시간을 확인하려면:
root #
hwclock --show
하드웨어 시계를 현재 시스템 시계에 맞추려면:
root #
hwclock --systohc
하드웨어 시계와 시스템 시간 동기화
보통 하드웨어 시계는 시스템 시계를 부팅과정에 설정할 떄 사용합니다. 이 과정은 커널 자체적으로 처리하거나 부팅 서비스(초기화 스크립트)에서 처리할 수 있습니다. 또한 시스템을 끌 때, 커널이나 서비스에서 소프트웨어 시계를 하드웨어 시계에 기록할 수 있습니다. 이 동작을 통해 부팅을 진행할 때 시스템에서 올바른 시간 정보를 가지고 있도록 보장합니다.
커널 자체 방식
최근의 커널(3.9 이상)에서 리눅스는 시스템 시계를 자동으로 설정할 수 있습니다. 이렇게 설정하려면, Set system time ...로 이동한 후 활성화 할 Set the RTC time ... 드라이버를 선택하십시오:
Device Drivers --->
[*] Real Time Clock --->
[*] Set system time from RTC on startup and resume
[*] Set the RTC time based on NTP synchronization
[*] /sys/class/rtc/rtcN (sysfs)
[*] /proc/driver/rtc (procfs for rtc0)
[*] /dev/rtcN (character devices)
<*> PC-style 'CMOS'
참고로 일부 NTP 구현체에서는 Set the RTC time based on NTP synchronization 기능을 사용하지 않습니다. 지원하는 NTP 구현체는 net-misc/chrony (자세한 내용은 여기)와 net-misc/ntp (NTP 게시글en)가 있습니다.. OpenNtpd (net-misc/openntpd)는 하드웨어 시간 설정을 지원하지 않으므로, 이 경우 사용을 피해야 합니다.
하드웨어 시간이 최신인지 확인하려면 다음 명령을 실행하십시오:
root #
adjtimex --print | grep status
보고한 64비트의 숫자는 설정하지 않은(0값) 상태여야 합니다. 더 많은 내용은 hwclock 맨 페이지를 살펴보십시오('11 minute mode'로 검색).
OpenRC
OpenRC가 hwclock 을 사용할 떄 초기화 스크립트에서는 부팅 과정에서 시스템 시계를 설정할 수 있고, 시스템을 끌 때 시스템 시계를 하드웨어 시계와 동기화할 수 있습니다. 기본적으로 서비스를 활성화한 상태인데 위에서 언급한 커널 내장 방식을 선호한다면 비활성화해야 합니다. hwclock 스크립트는 커널의 실시간 시계를 활용할 경우 실행하지 말아야합니다.
root #
rc-update del hwclock
It could however happen hwclock being started as dependency of another rc-service, e.g. sysklogd. In this case the rc-service osclock should be added to the same runlevel as the dependent rc-service.
그러나 OpenRC에서 필요로 한다면 /etc/conf.d/hwclock에서 clock_hctosys
와 clock_systohc
를 YES
로 설정하십시오. 기본적으로 서비스는 UTC 시간대 표준으로 설정합니다. 이 설정을 지역 시간대로 설정하려면, clock="local"
을 추가하십시오.
clock_hctosys="YES"
clock_systohc="YES"
# clock="local"
hwclock 서비스를 다시 시작하고 하드웨어 시계 초기화 스크립트를 부팅할 때 동작하도록 설정하십시오:
root #
rc-service hwclock restart
root #
rc-update add hwclock boot
Systemd
systemd는 부팅 과정에서 시스템 클록을 설정할 수 있습니다. 하드웨어 시계를 관리하려면 timedatectl 명령을 사용하십시오:
현재 하드웨어 시계 시간을 확인하려면:
user $
timedatectl | grep "RTC time"
하드웨어 시계를 현재 시스템 시계에 맞추려면(UTC 시간 표준):
root #
timedatectl set-local-rtc 0
하드웨어 시계를 현재 시스템 시계에 맞추려면(지역시간 표준):
root #
timedatectl set-local-rtc 1
Troubleshooting
Dual booting with Windows
Systems that dual boot with another operating system, such as Windows, generally have a struggle over the hardware clock. To make Windows not adjust the hardware clock back to local time, add the following registry entry.
For 64-bit Windows, open regedit then browse to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation. Create a new QWORD entry called RealTimeIsUniversal, then set its value to 1
. Reboot the system. The clock should now be in UTC time. For 32-bit Windows, follow the 64-bit instructions except use DWORD instead of QWORD.
추가 참조
- NTP - 네트워크 시간 프로토콜을 통해 시스템 시간을 관리하는 다른 방법.
외부 자료
- http://lifehacker.com/5742148/fix-windows-clock-issues-when-dual-booting-with-os-x - MS 윈도우와 듀얼부팅. RealTimeIsUniversal을 참조하십시오. Windows 10에서 시험했습니다.
- http://tldp.org/HOWTO/Clock-2.html - The Clock Mini-HOWTO.