Rendszeridő
A rendszeridő alatt értjük azt, amit a rendszeróra támogat. Az UNIX rendszerekben használják az idő követésére. Egy beépített hardveres órával vagy egy külső időszerver segítségével állítható be.
Előszó
Szoftveres óra vs. hardveres óra
A kernel által biztosított rendszeróra az 1970. január 1. 00:00:00 UTC óta eltelt másodpercek számának egyszerű számlálásaként van megvalósítva. Ezt nevezik Unix időnek.
A hardveres óra (más néven valós idejű óra vagy RTC (Real Time Clock)) általában az alaplap egyik összetevője. Megállás nélkül működik — még akkor is, ha a számítógép áramellátása megszakad.
UTC idő vs. helyi idő
A rendszeridő mindig a felhasználó időzónája szerint van beállítva a helyi időre, figyelembe véve a nyári időszámítást (daylight saving time (DST)).
A hardveres óra ideje módosítható a helyi idő vagy a koordinált világidő (UTC) megjelenítésére. Az UTC (Coordinated Universal Time) a preferált, mert független az időzónától és a nyári időszámítástól. Kivétel tehető a kettős rendszerindítású (dual boot) rendszer használatakor, amennyiben a másik operációs rendszer nincs úgy konfigurálva, hogy a hardveres órát UTC-ként értelmezze. Például a Windows rendszerre gondoljunk itt. (Ez módosítható. Tekintse meg a Kettős rendszerindítás Windows rendszerrel című részt).
Konfiguráció
Időzóna
Az idő megfelelő betartása érdekében válassza ki a megfelelő időzónát, hogy a rendszer tudja, hol található.
OpenRC
Tekintse meg az Időzóna (AMD64 kézikönyv) leírást.
systemd
A systemd tartalmazza a timedatectl parancsot az időzóna kezelésére:
Az aktuális zóna ellenőrzéséhez:
user $
timedatectl
Az elérhető zónák felsorolásához:
user $
timedatectl list-timezones
Az időzóna megváltoztatásához, pl. Magyarország számára:
root #
timedatectl set-timezone Europe/Budapest
LC_TIME
Ez a környezeti változó határozza meg a dátumok és időpontok formázását. További részletekért tekintse meg a The GNU C Library leírást.
Rendszeróra
Általában a rendszer óráját a hardver órája állítja be rendszerindításkor. Alternatívaként lehetőség van a rendszeróra manuális beállítására vagy egy hálózati időkiszolgáló használatára.
A date paranccsal kezelhető a rendszer óra:
A szoftveres-óra aktuális ellenőrzéséhez:
user $
date
A rendszeróra beállításához, például a 2016. május 6., 12:34 időhöz:
root #
date 050612342016
Időszerver
Az időkiszolgálók használatával kapcsolatos információkért tekintse meg az NTP vagy Chrony cikket.
systemd
A systemd tartalmazza a timedatectl parancsot a rendszeróra beállításához:
A szoftveres aktuális óra ellenőrzéséhez:
user $
timedatectl
A rendszeróra beállításához:
root #
timedatectl set-time "2012-12-17 12:30:59"
Hardveres óra
Hardveres órához a következő kernel opciókat kell aktiválni:
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'
Futásidőben a hardver aktuális óraidejének az ellenőrzéséhez:
root #
hwclock --show
A hardveres-órát beállítani az aktuális rendszerórára idejére:
root #
hwclock --systohc
Hardveres-óra és a rendszeridő szinkronizálása
Általában a hardveres órát használják a rendszeróra beállítására rendszerindításkor. Ezt megteheti maga a kernel vagy egy rendszerindító szolgáltatás (init script). A kernel vagy egy szolgáltatás leállításkor is ráírhatja a szoftveres órát a hardver órájára. Ez segít a rendszernek abban, hogy a rendszerindításkor a megfelelő időpontban legyen.
Kernelen belüli módszer
Egy megfelelően modern kernelen (3.9 vagy újabb) a Linux beállítható úgy, hogy automatikusan kezelje a rendszeridő beállítását. Ehhez engedélyezze a Rendszeridő beállítása az RTC-ből induláskor és folytatáskor (CONFIG_RTC_HCTOSYS) és az RTC-idő beállítása az NTP-szinkronizálás (CONFIG_RTC_SYSTOHC) kernelbeállításai alapján:
Device Drivers --->
[*] Real Time Clock --->
[*] Set system time from RTC on startup and resume
(rtc0) RTC used to set the system time
[*] Set the RTC time based on NTP synchronization
(rtc0) RTC used to synchronize NTP adjustment
[*] /sys/class/rtc/rtcN (sysfs)
[*] /proc/driver/rtc (procfs for rtc0)
[*] /dev/rtcN (character devices)
<*> PC-style 'CMOS'
Az RTC idő beállítása NTP szinkronizálás alapján kernel opciót jelenleg a chrony[1], az NTP és az OpenNTPD támogatja az 5.9p1[2] verzió óta.
Annak ellenőrzéséhez, hogy a hardveridő frissült-e, telepítse a net-misc/adjtimex fájlt, és futtassa:
root #
adjtimex --print | grep status
A jelentett szám 6. bitjének nem beállított értéknek (0) kell lennie. További információk olvashatóak a hwclock man súgójában (keressen rá a súgóban a '11 minute mode' kifejezésre).
OpenRC
Az OpenRC használatának az esetében a hwclock init szkript beállíthatja a rendszer óráját a rendszerindításkor, és szinkronizálhatja a rendszeridőt a hardver órájával a rendszerleállításkor. A szolgáltatás alapértelmezés szerint engedélyezve van, és le kell tiltani a fent említett kernelen belüli módszer javára. A hwclock parancsfájlt nem szabad futtatni, ha a kernel valós idejű óráját használjuk.
root #
rc-update delete hwclock boot
Előfordulhat azonban, hogy a hwclock egy másik rc-szolgáltatás függőségeként indul el, pl. sysklogd. Ebben az esetben az rc-szolgáltatás osclock-ot ugyanarra a futási szintre kell felvenni, mint amelyen a függőségi rc-szolgáltatás is rajta van.
Ha azonban szükség van az OpenRC használatára, akkor állítsa a clock_hctosys és a clock_systohc paramétert is YES
értékre az /etc/conf.d/hwclock fájlban. Alapértelmezés szerint a szolgáltatás UTC időszabványra van konfigurálva. A helyi időre váltáshoz adja hozzá a clock="local"
kifejezést.
/etc/conf.d/hwclock
Hardveres óraszinkronizálás hozzáadásaclock_hctosys="YES"
clock_systohc="YES"
# clock="local"
Indítsa újra a hwclock szolgáltatást, és futtassa le a hardveres óra init szkriptjét a rendszerindításkor:
root #
rc-service hwclock restart
root #
rc-update add hwclock boot
systemd
A systemd segítségével beállítható a rendszeróra a rendszerindításkor. A timedatectl használatával kezelheti a hardveres órát:
A hardver aktuális órájának az ellenőrzéséhez:
user $
timedatectl | grep "RTC time"
A hardveres óra beállítása az aktuális rendszerórára (UTC időszabvány):
root #
timedatectl set-local-rtc 0
A hardveres óra beállítása az aktuális rendszerórára (helyi idő időszabvány):
root #
timedatectl set-local-rtc 1
Hibaelhárítás
Kettős indítás Windows rendszerrel (Dual boot)
A másik operációs rendszerrel kettős rendszerindítású rendszerek, mint például a Windows, általában küzdenek a hardver órajelével. Ha azt szeretné, hogy a Windows ne állítsa vissza a hardver óráját a helyi időre, adja hozzá a következő beállításjegyzék-bejegyzést.
64 bites Windows esetén nyissa meg a regedit programot, majd keresse meg a HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation mappát. Hozzon létre egy új QWORD bejegyzést RealTimeIsUniversal néven, majd állítsa be az értékét 1
-re. Indítsa újra a rendszert. Az órának most UTC-időben kell lennie. 32 bites Windows esetén kövesse a 64 bites utasításokat, kivéve a DWORD használatát a QWORD helyett.
További olvasnivaló a témában
- Network Time Protocol — is used to synchronize the system time with other devices over the network.
- Ntp — is a suite of tools utilizing Network Time Protocol. Their purpose is to keep the system clock in time.
- Chrony — a versatile implementation of the Network Time Protocol (NTP).
- OpenNTPD — a lightweight NTP server ported from OpenBSD.
Külső források
- https://lifehacker.com/5742148/fix-windows-clock-issues-when-dual-booting-with-os-x - Dual booting with MS Windows, set RealTimeIsUniversal. Also tested with Windows 10.
- http://tldp.org/HOWTO/Clock-2.html - The Clock Mini-HOWTO.
Hivatkozások
- ↑ Comparison of NTP implementations, chrony, March 1st, 2017. Retrieved on July 11th, 2017.
- ↑ OpenNTPD. OpenNTPD 5.9p1, OpenNTPD, March 29th, 2016. Retrieved on July 11th, 2017.