ubuntuusers.de

ubuntuusers.deWikiSystemzeit

Systemzeit

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Unter Linux muss man prinzipiell zwischen zwei Uhren unterscheiden:

  • Software-Uhr: das ist die Zeit innerhalb des Linux-Kernels. Sie ist für alle Benutzer und das Betriebssystem selbst von Bedeutung und definiert im laufenden Betrieb die für alle Programme gültige Systemzeit. Sie wird auch manchmal als Betriebssystem-Uhr oder System-Uhr bezeichnet.

  • Hardware-Uhr: diese Uhr (auch Echtzeituhr, batteriegepufferte Uhr, real time clock (RTC), BIOS clock oder CMOS clock genannt) ist eine Uhr, die unabhängig von allen anderen Komponenten läuft, selbst wenn der Computer heruntergefahren wurde. Im ausgeschalteten Zustand läuft sie weiter und wird beim Systemstart zum Abgleich der Software-Uhr verwendet.

Konfiguration

Zeitzone

Normalerweise setzt man die Zeitzone während der Installation oder ändert sie mit einem Rechtsklick auf die Anzeige der Uhr im Desktop-Panel. Sollte das einmal nicht klappen oder administriert man einen Server ohne grafische Oberfläche, so kann man mit folgendem Befehl ohne zusätzliche Parameter im Terminal [1] die lokale Zeitzone in einem einfachen textbasierten Dialog neu setzen:

sudo dpkg-reconfigure tzdata 

Alternativ kann man auch folgenden Befehl nutzen (ältere Ubuntu-Versionen):

sudo tzselect 

Die Einstellung der Zeitzone ist wichtig, um die Systemzeit korrekt in die reale Lokalzeit umzurechnen. Sie hilft auch, die Umstellung auf die Sommerzeit automatisch vorzunehmen.

Wiki/Icons/time.png

Systemzeit

Die Systemzeit lässt sich mit folgendem Befehl im Terminal [1] anzeigen:

date 

Mit Hilfe des Network Time Protocols (NTP) {de} kann man einen Zeitserver im Internet abfragen und die Systemzeit entsprechend manuell anpassen:

sudo ntpdate -u ntp.ubuntu.com 

Wenn der NTP-Dienst schon läuft, darf ntpdate nicht genutzt werden. Alternative Zeitserver sind in dieser Tabelle zu finden. Außerdem gilt ntpdate als "deprecated", d.h. sollte nicht mehr verwendet werden. Stattdessen kann ntpd genutzt werden, auch für einmalige Synchronisierungen. Dies wird erreicht, indem ntpd mit der Option -g gestartet wird (s. /etc/default/ntp) und erlaubt einmalig, z.B. beim Start, auch größere Zeitabweichungen als 1000 s. Die Konfigurationsdatei von ntpd ist /etc/ntp.conf. Beispiel (Minimal-Variante):

# /etc/ntp.conf, minimal configuration for ntpd; see ntp.conf(5) for help
server de.pool.ntp.org iburst

Nun kann die Systemzeit durch einmaligen Aufruf von

sudo ntpd -q -g -x -n 

gesetzt werden, ntpd beendet sich danach automatisch wieder. Die Optionen erlauben auch große Zeitsprünge. Theoretisch könnte die minimale ntp.conf auch an einem anderen Ort liegen und per Option angegeben werden:

sudo ntpd -q -g -x -n -c /home/BENUTZERNAME/ntp.conf 

Dazu müsste jedoch AppArmor umkonfiguriert werden, da das Apparmor-Profil für ntpd nur /etc/ntp.conf erlaubt.

Hardware-Uhr

Das Programm zum Stellen der Hardware-Uhr lässt sich im Terminal [1] folgendermaßen aufrufen:

sudo hwclock 

Parameter Beschreibung
--show Zeigt den Stand der Hardware-Uhr in lokaler Zeitzone (auch wenn die Hardware-Uhr nach UTC läuft)
--set --date="9/22/96 16:45:05" Stelle die Hardware-Uhr auf den 22.9.1996 16:45:05 Lokalzeit
--hctosys Stellt die Systemzeit nach der Hardware-Uhr.
--systohc Stellt die Hardware-Uhr nach der momentanen Systemzeit.

Zeitsynchronisation (NTP)

Wer auf eine exakte Systemzeit angewiesen ist, kann sich nicht allein auf Hardware- und Software-Uhr verlassen, da diese nicht mit der nötigen Genauigkeit arbeiten. Die Standardlösung ist der NTP-Systemdienst, der regelmäßig die Uhrzeit automatisch mit einem Zeitserver im Internet abgleicht. Dazu installiert [3] man aus den Quellen folgendes Paket (je nach Desktop-Umgebung erfolgt die Installation auch automatisch, sobald man die Zeitsynchronisation über das Internet aktiviert):

  • ntp

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install ntp  

sudo aptitude install ntp  

Datum-und-Zeit-GNOME3

Unity/GNOME 3

Ab Ubuntu 11.10 kann man die Zeitsynchronisation direkt über die Systemeinstellung einstellen. Dafür geht man in die Sitzungsanzeige Unity/Unity_Desktop/desktop-menu-9.png und klickt auf:

  • "Systemeinstellungen → Zeit und Datum"

Hier kann mit Hilfe des Kippschalters "Netzwerkzeit" die automatische Zeitsynchronisation aktivieren. Außerdem kann man hier noch die Zeitzone und das Datumsformat festlegen. Einen Server für die Zeitsynchronisation kann man nicht einstellen.

Xfce_ntp.png
Datum und Uhrzeit bei Xfce

Xfce

Unter Xubuntu erreicht man die Konfiguration über das {x} Anwendungsmenü:

  • "System -> Datum und Uhrzeit" oder

  • "Einstellungen -> Datum und Uhrzeit"

Bevor man etwas ändern kann, muss man die Konfiguration zuerst entsperren. Dazu werden Root-Rechte benötigt.

LXDE

Lubuntu verwendet das gleiche Programm wie Xfce. Der entsprechende Eintrag im {l} Anwendungsmenü lautet:

  • "Systemwerkzeuge -> Datum und Uhrzeit" (ab Lubuntu 11.04)

  • "Einstellungen -> Datum und Uhrzeit" (bis Lubuntu 10.10)

Um die Einstellungen zu ändern, muss vorher die Schaltfläche "Entsperren" betätigt und das Root-Kennwort eingegeben werden.

Empfehlenswerte Zeitserver

Es empfiehlt sich, mehrere Zeitserver anzugeben, wenn möglich geographisch naheliegende. Es macht wenig Sinn, in Europa einen Zeitserver aus Amerika zu verwenden. NTP beobachtet und bewertet die angegebenen Zeitservern und sucht sich dabei selber den aktuell genauesten und gut erreichbarsten heraus. Der genaueste Server (Stratum 1) ist der, der sich hierarchisch am nächsten an der Originalzeitquelle (Stratum 0) befindet. Originalzeitquellen (Stratum 0) sollten in der Regel nicht selbst direkt abgefragt werden. Um eine Überlastung einzelner Zeitserver durch zu viele und zu häufige Anfragen zu vermeiden, wird empfohlen, keinen Zeitserver explizit anzugeben (z.B. ptbtime1.ptb.de), sondern einen der unten genannten Pools zu nutzen, für Deutschland z.B. aus dem pool.ntp.org Projekt.

Vorschläge für sinnvolle Zeitserver:

Zeitserver
ServerBeschreibung
0.de.pool.ntp.org ... 3.de.pool.ntp.org Projektseite {de}
ptbtime1.ptb.de Physikalisch-Technische Bundesanstalt (Braunschweig)
ptbtime2.ptb.de wie oben, alternativer Server
ptbtime3.ptb.de wie oben, alternativer Server
time-a.nist.gov National Institute of Standards and Technology (USA)
time-b.nist.gov wie oben, alternativer Server
pool.ntp.org wählt bei jedem Neustart per Zufall einen von etwa 1700 empfohlenen Zeitservern aus
de.pool.ntp.org wie oben, wählt aber nur deutsche Zeitserver aus
europe.pool.ntp.org wie oben, wählt aber nur europäische Zeitserver aus
ntp.ubuntu.com Zeitserver von Ubuntu
0.debian.pool.ntp.org ... 3.debian.pool.ntp.org Zeitserver Pool von Debian
0.ubuntu.pool.ntp.org ... 3.ubuntu.pool.ntp.org Zeitserver Pool von Ubuntu

Hinweis:

Mittels Samba ist es möglich, dass Windows-Clients ihre Zeit mit dem Server synchronisieren können (siehe Samba Server/smb.conf).

NTP mit externen lokalen Zeitquellen

NTP arbeitet mit einer Vielzahl von lokalen Zeitquellen (serielle, USB-, PCI-Geräte) zusammen, z.B. DCF- oder GPS-Quellen.

DCF Funkuhr - Gude MouseClock II

Das folgende Beispiel zeigt, wie eine DCF-77 Uhr von Gude {de}, eine "MouseClock II Funkuhr", eingebunden wird. NTP erwartet DCF-Funkuhren unter /dev/refclock-x - daher wird eine udev-Regel benötigt, um dem meist seriell oder via USB angeschlossenen Gerät einen festen Namen zuzuweisen. Als Beispiel der Inhalt einer udev-Regel, z.B. /etc/udev/rules.d/05-persistent-dcf.rules, passend zur Gude MouseClock II Funkuhr:

KERNEL=="ttyUSB*", ATTRS{idProduct}=="e88a", SYMLINK+="refclock-%m"

udev-Regel aktivieren und den NTP Dienst neu starten:

sudo udevadm trigger
sudo service ntp restart 

Nach der Installation des NTP-Dienstes wird die externe Funkuhr in der Konfigurationsdatei /etc/ntp.conf angegeben:

# GUDE Expert mouseCLOCK USB II
server 127.127.8.0 mode 19 prefer
fudge 127.127.8.0 refid GUDE

  • Die Angabe "...127.127.8.0..." ist keine IP-Adresse, sondern die genaue Spezifizierung einer "GUDE Expert mouseCLOCK".

  • Für jede von NTP unterstützte Referenz Uhr gibt es hier eine entsprechende vierstellige Zahlenkombination, beginnend mit 127.127... die wie eine IP-Adresse aufgebaut ist, aber keine ist.

  • 127.127.8.0 - die "8" steht für Referenz Uhr Typ 8, eine generisch unterstütztes Modell (http://www.eecis.udel.edu/~mills/ntp/html/refclock.html#list {en}).

  • 127.127.8.0 - die "0" beschreibt hier, dass /dev/refclock-0 genutzt wird.

  • mode 19 bedeutet, dass es ein "Gude Analog- und Digitalsystem GmbH 'Expert mouseCLOCK USB v2.0'" Gerät ist.

Nach etwa 3 Minuten sollte eine korrekt ausgerichtete Funkuhr (nach Mainflingen/Hessen) synchronisiert sein. NTP und die Funkuhr können mit watch beobachtet und überprüft werden:

watch -n1 ntpq -c cv -c rv 
associd=0 status=0020 , 2 events, clk_unspec,
device="RAW DCF77 CODE (Expert mouseCLOCK USB v2.0)",
timecode="--#--###---------D--S1-4-1-4p-24---p12----1-4---8--2--1---P",
poll=12, noreply=0, badformat=0, baddata=1, fudgetime1=425.000,
stratum=0, refid=GUDE, flags=2,
refclock_time="d3c5d844.00000000  Fri, Aug  3 2012  4:55:32.000",
refclock_status="DST; TIME CODE; (LEAP INDICATION; ANTENNA)",
refclock_format="RAW DCF77 Timecode",
refclock_states="*NOMINAL: 00:10:33 (88.16%); ILLEGAL DATE: 00:01:25 (11.83%); running time: 00:11:58"
associd=0 status=0214 leap_none, sync_lf_radio, 1 event, freq_mode,
version="ntpd 4.2.6p3@1.2290-o Tue Jun  5 20:12:08 UTC 2012 (1)",
processor="x86_64", system="Linux/3.2.0-29-generic", leap=00, stratum=1,
precision=-22, rootdelay=0.000, rootdisp=31.196, refid=GUDE,
reftime=d3c5d838.75cb8306  Fri, Aug  3 2012  6:55:20.460,
clock=d3c5d844.8f4457f4  Fri, Aug  3 2012  6:55:32.559, peer=44449, tc=6,
mintc=3, offset=-43.458, frequency=-3.564, sys_jitter=1.685,
clk_jitter=14.366, clk_wander=1.260

In der Ausgabe erkennt man, dass die Funkuhr mit stratum=0 und der zugehörige PC mit dem NTP-Dienst als stratum=1 läuft.

Zusätzlich kann es nötig sein, AppArmor den Zugriff auf das NTP-Gerät zu erlauben, und zwar nicht über den Symlink (/dev/refclock-x), sondern dem echten seriellen oder USB-Gerät. In der Datei /etc/apparmor.d/tunables/ntpd wird die die Variable NTPD_DEVICE auf das verwendete NTP-Gerät gesetzt:

@{NTPD_DEVICE}="/dev/ttyUSB*"

Die Variable NTPD_DEVICE wird damit im AppArmor Profil usr.sbin.ntpd korrekt verwendet. AppArmor muss anschließend neu gestartet werden:

sudo service apparmor restart 

GPS-Maus - per gpsd

Ist am Rechner eine GPS-Maus angeschlossen, kann diese als Zeitquelle verwendet werden. Es sollte eine udev-Regel vorhanden sein, die der GPS Maus mit "SYMLINK+="gps0" einen festen Namen vergibt (/dev/gps0). Weitere Voraussetzung ist, dass die GPS-Maus von gpsd erkannt und verwendet wird, und gpsd als automatisch startender Dienst konfiguriert ist.

Kurzhilfe für gpsd, Installieren und Konfigurieren:

sudo apt-get install gpsd
sudo dpkg-reconfigure gpsd 

Die Fragen nach automatisch Starten und automatisch GPS Geräte erkennen wird mit Ja beantwortet. Als zusätzliche Option gibt man meist "-n" an, damit GPS Daten auch ohne Client permanent an den Rechner gesendet werden. Nach einem Neustart des gpsd mit

sudo service gpsd restart 

werden die GPS Zeitdaten in den Shared Memory Driver (SHM) abgelegt. Nach einem Neustart der GPS-Maus kann es einige Minuten dauern, bis es einen SAT-fix hat und die Zeitdaten bereitstehen. Es können dabei weitere Clientprogramme gpsd gleichzeitig nutzen, die Nutzung als Zeitquelle für ntp blockiert die GSP Maus nicht. Clientprogramme dürfen /dev/gps0 natürlich nicht direkt nutzten, sondern müssen so konfiguriert werden, dass sie gpsd nutzen.

Die von gpsd bereitgestellten Zeitdaten in dem SHM können nun von ntp verwendet werden, die Konfiguration erfolgt in der /etc/ntp.conf :

# SHM 0
server 127.127.28.0
fudge 127.127.28.0 refid GPSa

# SHM 1
server 127.127.28.1
fudge 127.127.28.1 refid GPSp

SHM 1 mit PPS Daten wird nicht von allen GPS Mäusen unterstützt, und kann daher deaktiviert werden, falls hier keine Zeitdaten ankommen. Der ntp Dienst muss nun neu gestartet werden:

sudo service ntp restart 

Die folgende Beispiel Ausgabe zeigt

  • die lokale Uhr (LOCAL(0)),

  • eine erreichbare (Spalte reach==377) GPS-Maus (SHM(0)),

  • eine genauer laufende DCF-Uhr der Firma Meinberg {de} (*SHM(2)),

  • sowie zwei Internet-Zeitquellen:

ntpq -c peers 
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 LOCAL(0)        .LOCL.          10 l 155m   64    0    0.000    0.000   0.000
xSHM(0)          .GPSu.           0 l   54   64  377    0.000  -104.24   1.684
*SHM(2)          .DCFm.           0 l    4   16  377    0.000   -0.045   0.039
xzinc.v-yu.com   131.188.3.221    2 u  833 1024  377   73.571  -26.173  27.213
+char-ntp-pool.c .shm0.           1 u  771 1024  377   31.242    0.920  21.549

Problembehebung

Abweichung zu Zeitservern anzeigen

Will man herausfinden, um wie weit die Systemzeit von den angegebenen Zeitservern abweicht ("offset"), kann einer der beiden folgenden Befehle im Terminal [1] ausgeführt werden:

# Offset zu jedem einzelnen Zeitserver (in ms)
ntpq -p
# für NTP relevanter Offset (in s)
# nach einem Neustart des NTP-Servers kann einige Zeit vergehen, bis hier ein Wert steht
ntpdc -c loopinfo 

Hierbei ist allerdings zu beachten, dass die Systemzeit außer bei sehr großen Abweichungen "fließend" bzw. "schleichend" angepasst wird. Das heißt, dass die Systemzeit minimal langsamer oder schneller läuft, als sie eigentlich laufen müsste. Dadurch geht die Synchronisation nur langsam vonstatten, aber es treten keine Fehler durch Zeitsprünge auf. Beim Herunterfahren des Systems wird hingegen die Uhrzeit der Hardware-Uhr mit der vollen Abweichung überschrieben.

NTP korrigiert die Rechner-Uhrzeit nicht

Klemmt es beim NTP-Dienst (z.B. unsinnige Ausgabe bei ntpq -p bzw. ntpdc -c loopinfo), so hilft ggf. der Befehl [1] zum Neustarten des Dienstes:

sudo /etc/init.d/ntp restart 

Eine weitere Problemquelle sind zu große Abweichungen zwischen lokaler und Internet-Zeit. Dann wird zuerst der NTP-Dienst beendet:

sudo /etc/init.d/ntp stop 

Nun setzt man die Zeit manuell:

sudo ntpd -q -g -x -n 

Zum Schluss wird der NTP-Dienst wieder gestartet:

sudo /etc/init.d/ntp start 

Ganz vorsichtige Naturen starten den Rechner nach dieser Prozedur neu, da der auftretende "Zeitsprung" unvorhersehbare Konsequenzen haben kann.

Falsche Uhrzeit bei Windows-/Mac-/Linux-Parallelinstallation

Das System muss neben der Zeitzone auch wissen, wie die Hardware-Uhr konfiguriert ist. Unter UNIX/MacOS läuft sie standardmäßig nach koordinierter Weltzeit (UTC) {de} , während unter DOS/Windows die Hardware-Uhr nach lokaler Zeit gestellt wird. Dadurch geht in Windows die Zeit um eine (Winter-) bzw. zwei (Sommerzeit) Stunden nach, wenn man sie unter Linux korrekt stellt. Es empfiehlt sich daher, beide Systeme auf die selbe Methode einzustellen. Ab Ubuntu 9.04 konfiguriert sich bei der Parallel-Installation ("Dual Boot") zu einer vorhandenen Windows-Installation die Hardware-Uhr ebenfalls mit lokaler Zeit.

Windows auf UTC umstellen

Windows kann man über die Systemregistrierung auf UTC umstellen bzw. mit UTC betreiben. Dazu legt man mit dem Windows-Editor eine Datei namens utc.reg an und fügt folgenden Inhalt ein:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]
"RealTimeIsUniversal"=dword:00000001

Wichtig sind zwei Leerzeilen am Ende der Datei! Danach speichert man die Datei ab und führt sie als Administrator mit einem Doppelklick aus. Teilweise ist ein Neustart erforderlich, damit die Uhrzeit korrekt angezeigt wird.

Alternativ kann auch folgender Windows-Befehl ausgeführt werden:

reg.exe add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1 /f 

Linux auf lokale Zeit umstellen

Alternativ kann man Linux auf lokale Zeit umstellen. Dazu bearbeitet man die Konfigurationsdatei /etc/default/rcS mit einem Editor [2] und Root-Rechten und ändert den Abschnitt:

# Set UTC=yes if your system clock is set to UTC (GMT), and UTC=no if not.
UTC=no

entsprechend.

Rechner ohne Echtzeituhr

Für Rechner ohne eingebaute Echtzeituhr (RTC / Real Time Clock), z.B. der Raspberry, gibt es das Ubuntu/Debian Paket fake-hwclock. Dieses sichert die Systemuhrzeit regelmäßig in eine Datei, die dann beim Booten wieder eingelesen wird. Das ersetzt zwar keine echte Uhr, mildert aber den Effekt ab, dass andernfalls das System nach einem Neustart wieder im Jahr 1970 ist (POSIX-Standard).

Eigene Zeitserver

Wer einen eigenen öffentlich über das Internet erreichbaren Zeitserver betreibt, tut gut daran, diesen gegen Angriffe abzusichern. Mehr Hintergrundinformationen und weitere Maßnahmen sind der Anleitung Kommt Zeit, kommt – DDoS-Angriff {de} zu entnehmen (Stand: 01/2014).

Diese Revision wurde am 16. April 2014 01:33 von aasche erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Hardware, System, ntpdate, Systemzeit, Zeitzone, DCF, ntpd, Zeitserver, Samba, NTP, ntp.conf, UTC, RTC