přejít na obsah přejít na navigaci

Linux E X P R E S, Seřiďte Linuxu hodinky

Seřiďte Linuxu hodinky

cas.jpg

Potřeba správného času je spojena s lidským pokolením od nepaměti. První měření, pokud to tak vůbec můžeme nazývat, vzniklo před třiceti tisíci lety na základě pozorování a záznamu pohybu nebeských těles. Dnes nám čas odtikává hyperjemná struktura atomu Césia 133 v atomových hodinách s přesností na attosekundy.


reklama

Přesný čas Linuxu

Nejen v operačním systému GNU/Linux se pro správu a synchronizaci času používá služba NTPd (Network Time Protocol Daemon), název, jak je patrné, vychází z pojmenování velmi složitého a precizního síťového protokolu NTP.

Synchronizace času v počítači může fungovat v zásadě dvěma způsoby. První je triviální nastavení času v určitých intervalech, což je velmi hloupé a přináší to s sebou problémy (viz níže). Tento způsob zajistí přesnost času řádově v sekundách. Což možná stačí na včasný odchod na autobus, ovšem na pořádnou práci nikoliv a taková časová odchylka může mít i právní následky (například pro termíny veřejné zakázky, aukcí apod.).

Druhým a preferovaným způsobem je plynulá změna toku času. Mění se tedy (velmi nepatrně) rychlost tikání vnitřních hodin v operačním systému. Tímto způsobem lze na fyzickém počítači dosáhnout dlouhodobé přesnosti řádově stovky mikrosekund. Tento způsob času zajišťuje služba NTPd. Pro přesnější čas (například laboratorní měření) lze zakoupit speciální přístroje.

Zdroje času na síti

Zdroji přesného času na síti jsou časové servery. Tvoří vrstvy (v NTP terminologii se používá výraz stratum). Zařízení stratum 0 jsou samotné generátory přesného času. Mohou to být atomové hodiny, GPS družice (každá obsahuje dvoje atomové hodiny, GPS přijímač vidí minimálně čtyři družice) a další zdroje.

Na tato zařízení se připojují servery stratum 1. Tyto jsou tedy prvním síťově dostupným zdrojem času a nejpřesnějším zdrojem času na síti. Používají se pro synchronizaci ostatních časových serverů na další vrstvě, tedy stratum 2, a až tyto by měly být používány klienty (ovšem dnes jsou pro klienty nabízeny i servery stratum 1, například český ntp.nic.cz).

Instalace, nastavení povolení a spuštění služby

Instalace služby je závislá na konkrétní distribuci GNU/Linuxu, například pro systémy Red Hat Enterprise Linux a CentOS (způsob instalace balíčků pro vaši distribuci se může lišit):

yum install ntp

Služba je ve výchozím stavu nastavena na synchronizaci času pomocí veřejně dostupných časových serverů (například pool.centos.org) a lze ji bez dalšího nastavování spustit. Mnoho systémů má tuto službu automaticky spuštěnou již od instalace.

Po ruční instalaci je nutné povolit službu při startu systému a spustit ji (opět platí pro RHEL a CentOS):

chkconfig ntpd on
service ntpd start

Vlastní nastavení služby NTPd

Prakticky jediným zásahem ze strany uživatele je výběr zdrojů času. Chceme-li býti patrioty (nebo jen prostě potřebujeme mít čas synchronizovaný se státním etalonem času České republiky), nastavíme v souboru /etc/ntp.conf kvalitní české časové servery:

server ntp.nic.cz prefer
server tik.cesnet.cz
server tak.cesnet.cz

Pomocí parametru prefer lze označit zdroj času, který má být primárně používán. Po jakýchkoliv změnách v souboru /etc/ntp.conf je nutné službu restartovat příkazem service ntpd restart.

Kontrola

O stavu synchronizace se lze přesvědčit příkazem ntpq -p, příklad:

remote		refid	st	t	when	poll	reach	delay	offset	jitter
==============================================================================================
+tik.cesnet.cz.	GPS.	1	u	68	256	377	3.950	0.297	0.059
*tak.cesnet.cz.	GPS.	1	u	148	256	377	3.945	0.255	0.068
+ntp.nic.cz.	PPS.	1	u	129	256	377	3.934	0.365	0.068

Kde jednotlivé sloupce znamenají:

  • Remote je vzdálený server se zdrojem času. Znak * udává preferovaný server. Všimněte si, že je jiný, než jsme uvedli v konfiguraci. Služba NTPd vybírá vhodné servery podle dlouhodobých statistik. Znak + označuje další vhodné kandidáty na preferovaný server, pokud aktuální vypadne. Znak – bychom nikdy vidět neměli, označuje totiž nekvalitní zdroj času.

  • Refid je zdroj času používaný daným serverem. Zdroj GPS označuje synchronizaci pomocí družic globálního pozičního a navigačního systému, PPS (pulse per second) je pak speciální tikající zařízení připojené k počítači (například atomové hodiny, velmi přesný krystal apod.).

  • St udává vrstvu časového zdroje v hierarchii, viz pojem stratum výše.

  • When a pool udávají čas další kontroly času u vzdáleného serveru.

  • Reach udává stav synchronizace. Pro nás je důležitá pouze hodnota 377, pak je synchronizace plně funkční. Pro dosažení 377 je potřeba hned několik dotazů na vzdálené servery, což může trvat i několik desítek minut.

  • Delay je síťová latence vzdáleného serveru.

  • Offset udává rozdíl času v ms a tato hodnota nás tedy zajímá nejvíce. V uvedeném výpise je časový rozdíl 255 μs (0.255 ms). Všimněte si, že dosahovaná přesnost je několikrát lepší než síťová latence.

Přesný čas a virtualizace

Synchronizace virtuálních strojů má svá specifika daná především horší kvalitou lokálního času. Při synchronizaci virtuálních strojů (zde je konkrétně popisován návod pro VMware ESX, ale tento postup obecně platí i pro ostatní virtualizační nástroje) je nutné vypnout zdroj času local („hardwarové“ hodiny na virtuálním stroji) a někdy také povolit službě NTP překonávat velké rozdíly v čase, které není možné překonat změnou rychlosti plynutí času a je nutné je řešit skokem.

Vypnout zdroj času local lze několika způsoby. Vypnout synchronizaci času v ESX konzoly (VMware Tools | Time Synchronization), pak „hardwarový“ čas virtuálního stroje nastavuje NTPd. Druhá možnost je nastavit NTPd tak, aby se vůbec nezabýval časem z hardwaru (z praxe doporučuji) a bral pouze čas ze síťových zdrojů přesného času. Tato možnost umožňuje nastavit synchronizaci času bez nutnosti vypnutí stroje pro nastavení parametrů ve virtualizátoru. Tento způsob nastavení je i předmětem následujících řádků.

Vypnutí local

V /etc/ntp.conf je nutné zakomentovat (na počátek řádku vložit znak #) či rovnou smazat následující řádky:

server 127.127.1.0
fudge 127.127.1.0 stratum 10

Povolení vyrovnání velkých časových rozdílů skokem

Pokud je časový rozdíl mezi synchronizovaným počítačem a zdrojem času větší než tisíc sekund, nelze jej upravit pomocí změny rychlosti toku času (trvalo by to neúnosně dlouho) a služba NTP se ukončí (a tuto skutečnost zapíše do systémového logu).

Jestliže potřebujeme vyrovnávat takto velké rozdíly a nevadí nám (jedna, po dosažení synchronizace se vzdálenými servery) skoková změna času, stačí přidat do konfiguračního souboru /etc/ntp.conf řádek:

tinker panic 0

Proč nepoužívat ntpdate a skokovou změnu času

Starý (a nikdy nedoporučovaný) způsob synchronizace času pomocí příkazu ntpdate pravidelně spouštěný z crontabu je obecně špatný. Konkrétně například z důvodu (pravidelné) skokové změny času, a to ještě oběma směry. Změna vpřed je méně škodlivá, ne však zcela bezpečná (hrozí potenciální možnost přeskočení některé naplánované úlohy, výpadek v monitorování pomocí nástrojů RRD apod.). Změna času vzad je daleko horší a může způsobit pád některých služeb (typicky POP a IMAP server dovecot), nepořádek v lozích a databázích, na souborové systému (novější verze souboru má starší čas) apod.

Naproti tomu, jak již bylo uvedeno, služba ntpd nepoužívá (krom speciálního případu, který je nutno povolit v konfiguraci) skokovou změnu času, ale plynule ovlivňuje rychlost toku času (směr je pochopitelně vždy stejný, dopředný). Podle potřeby tak čas v počítači plyne nepatrně rychleji (je potřeba dohnat aktuální přesný čas), či pomaleji (hodiny v počítači jsou napřed).

Dobře nastavená služba ntpd udržuje dlouhodobě čas v toleranci 10 ms na virtuálním stroji a několika stovek mikrosekund na fyzickém stroji.

	

Nahoru

(Jako ve škole)
Průměr: 1,00 | Hodnotilo: 6
 

Top články z OpenOffice.cz

Příspěvky

Seřiďte Linuxu hodinky
tom.i 21. 01. 2011, 06:58:26
Odpovědět  Odkaz 
Nejde uz nejak vyresit zmenu syst.casu pri dualbootu, resim to cronem s ntp ale neni to nejlahodnejsi zpusob. Nebo to ma na svedomi BIOS? Netusite nekdo, jak to proste jednoduse nastavit, aby se v Linuxu tak i v Hnistach pouzival automaticky lokalni cas?
Tomáš Crhonek Re:Seřiďte Linuxu hodinky
Tomáš Crhonek 21. 01. 2011, 09:01:24
Odpovědět  Odkaz 
Zřejmě máte nastavené buď rozdílné časové zóny v obou OS a nebo jeden bere čas jako UTC a druhý jako lokální.

Asi nejlepší možností je nastavit čas v BIOSu podle UTC a oba OS správně nastavit na UTC a stejnou časovou zónu. Tímto se vyhnete i problémům se změnou letního a zimního času.
Re:Dualboot
Slavko 21. 01. 2011, 20:54:37
Odpovědět  Odkaz 
Ide ;-)

Dualboot je väčšinou problém (s časom) pri Windows a Linux, pretože mnohé Linuxové distrá predvolene používajú UTC pre HW čas, ale Windows používa lokálny čas.

Jediné mne známe riešenie je nastavenie Linuxu tak, aby používal lokálny čas aj pre hwclock. Niečo píšem tu http://slavino.sk/linux/virtualbox/201-vylepsenia-virtualbox je to síce pre VirtualBox ale platné vo všeobecnosti (pre Debian samozrejme)
Seřiďte Linuxu hodinky
Petr 21. 01. 2011, 08:55:04
Odpovědět  Odkaz 
specialni tikajici zarizeni = bomba :)
Seřiďte Linuxu hodinky
lzap 21. 01. 2011, 09:58:04
Odpovědět  Odkaz 
Vítej na LE. Pěkný článek :-)

Doplním jednu věc - často když nainstaluju nový systém nejprve synchronizuji čas pomocí ntpdate (tj. skokově) a pak spustím ntpd. Nechce se mi upravovat totiž konfigurák. Mám na to skript, který mi přes ssh systém "upraví" do mého "oblíbeného základního" stavu. To má však jeden háček.

Ntpdate nefunguje dobře za firewally/NATy, je potřeba předat mu parametr (tuším -u), aby použil nerezervovaný (unprivileged) port. Pak to funguje.
Tomáš Crhonek Re:Seřiďte Linuxu hodinky
Tomáš Crhonek 22. 01. 2011, 09:16:14
Odpovědět  Odkaz 
Díky.

O tom skriptu by ses mohl více rozepsat.
Re:Re:Seřiďte Linuxu hodinky
lzap 23. 01. 2011, 15:37:57
Odpovědět  Odkaz 
Heh no skript je takovýto:

ssh-copy-id $1
ssh $1 "hromada; prikazu; ktere; mi; nainstaluji; vim; mc; nastavi; system; nastavi; spravny; cas; a; tak; dale"

:-)
Seřiďte Linuxu hodinky
Nazor 21. 01. 2011, 10:02:56
Odpovědět  Odkaz 
Zajímalo by mě, jestli umí Win7 ukládat čas do BIOSu v UTC. Co jsem tak pátral, tak nikoliv.

Já teda bez problémů čas od času seřizuji pomocí ntpdate, pro domácí účely nevidím problém. Jako server beru "pool.ntp.org" nebo "europe.pool.ntp.org".
Tomáš Crhonek Re:Seřiďte Linuxu hodinky
Tomáš Crhonek 21. 01. 2011, 10:27:22
Odpovědět  Odkaz 
Umí, je třeba to zapnout přímo v registrech (asi na to bude existovat i nějaké klikátko). Návod třeba zde: http://www.ardamis.com/2009/11/24/windows-time-off-when-dual-booting-linux/
Seřiďte Linuxu hodinky
FOK 21. 01. 2011, 14:31:57
Odpovědět  Odkaz 
Co všichni pořád mají proti ntpdate? To si opravdu nikdo neumí přečíst man stránku, aby se dozvěděl, že ntpdate nastavuje hodiny skokově až od určitého (+-128ms) času? A pokud někomu ani to nestačí, tak je tu parametr -B, který zajistí plynulou změnu jako ntpd.
Proč bych měl mít na desktopu spuštěného démona, který mi bude každých pár minut masírovat hodiny? Tam mi opravdu stačí jednou za den posunout hodiny od 2 sec. a je hotovo.
Re:Seřiďte Linuxu hodinky
Slavko 21. 01. 2011, 20:57:24
Odpovědět  Odkaz 
Napríklad to, že mi pri štarte skokovo nastavil čas (keď som pátral po probléme bolo to presne o 144s), a keďže ho nastavil práve pri štarte X, táto skoková zmena spôsobila, že X počas štartu padlo, pretože uplynul timeout. Teda reálne neuplynul, ale systém si to myslel, pretože sa posunul čas...

Ja síce ntpdate používam ďalej, len som ho nastavil na častejšie spúšťanie :-)
Re:Seřiďte Linuxu hodinky
lzap 23. 01. 2011, 15:42:25
Odpovědět  Odkaz 
Čas na desktopu není absolutně žádný problém, klidně si "jeďte" třeba o 20 sekund špatně. Problém je u serverů. V dnešním světě plném web 2.0 integrací přestávají věci dokonce zcela fungovat, když má server špatný čas.

Dalším vážným problémem jsou virtualizované systémy, které nedokáží udržovat správný čas. Po instalaci je nutné často provést "skok" (tj. opravit ho) a pak mít ntpd démona. Je to bezpodmíněčně nutné, při vyšším zatížení hosta může jít o rozdíly i několik sekund denně.

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Tomáš Crhonek

Tomáš Crhonek

Pracuji jako administrátor linuxových serverů ve společnosti QCM. Zabývám se především optimalizací DB strojů, zejména PostgreSQL. Hraji si též se storage (od hdd po fs). Vedu si své stránky na www.heronovo.cz.


  • Distribuce: Debian, CentOS, RHEL
  • Grafické prostředí: bash
  • Hodnocení autora: *

| blog