Warum wird Ubuntus Uhr langsamer oder schneller?


16

Ubuntus Uhr ist um eine halbe Stunde abgestellt:

Ubuntu Time & Date gegen die offizielle US-Zeit

Wo beginne ich überhaupt mit der Fehlerbehebung?

Es wird angeblich "automatisch aus dem Internet" eingestellt. Wie kann ich überprüfen, ob "das Internet" weiß, wie spät es ist?

Einzelheiten

Ubuntu hatte viel Zeit, um mit dem Internet zu kommunizieren:

$ date; uptime
Fri May 18 05:56:00 PDT 2012
 05:56:00 up 12 days, 10:48,  2 users,  load average: 0.61, 0.96, 1.15

Dieser Zeitserver, den ich über eine Websuche gefunden habe, scheint die richtige Zeit zu kennen:

$ date; ntpdate -q north-america.pool.ntp.org
Fri May 18 05:56:09 PDT 2012
server 208.38.65.37, stratum 2, offset 1752.625337, delay 0.10558
server 46.166.138.172, stratum 2, offset 1752.648597, delay 0.10629
server 205.189.158.228, stratum 3, offset 1752.672466, delay 0.11829
18 May 05:56:18 ntpdate[29752]: step time server 208.38.65.37 offset 1752.625337 sec

Es gibt keine gemeldeten Fehler im Zusammenhang mit NTP:

$ grep -ic ntp /var/log/syslog
0

Nach dem Neustart wurde die Zeit automatisch korrigiert und Folgendes erschien in /var/log/syslog:

May 18 17:58:12 aux ntpdate[1891]: step time server 91.189.94.4 offset 1838.497277 sec

Ein Protokoll des von ntpdate gemeldeten Versatzes zeigt, dass die Uhr jede Stunde um etwa 9 Sekunden abweicht:

$ while true; do ntpdate-debian -q | tail -n 1 >> 'drift.log'; sleep 16m; done
^C
$ r -e '
    attach(read.table("drift.log", header=FALSE))
    clock <- as.POSIXct(paste(V1, V2, V3), format="%d %b %H:%M:%S")
    fit <- lm(V10~clock)
    png("drift.png")
    plot(clock, V10, xlab="Clock time", ylab="Time server offset (s)")
    abline(fit)
    mtext(sprintf("Drift rate: %.2f s/hr", fit$coefficients[[2]]*3600))
'

Uhrzeit v. Zeitserver-Offset


Hintergrund: ntp ist ein großartiges Tool, um genaue Zeitangaben zu erhalten . Es dauert jedoch eine endliche Zeit (einige Minuten oder sogar Stunden), um die aktuelle Zeit von der falschen Zeit zu ermitteln. Dies hängt mit ntp-Servern (Ihrer Wahl) und Ihrer Internet-Latenzzeit zu diesen zusammen. @Floyd hat eine Abkürzung umrissen, um die korrekte Zeit schnell zu erzwingen. Aber eine bessere Zeit (und Verwendung von NTP ) erfordert eine sorgfältige Auswahl der NTP-Server.
David6

Mein Auto macht das ... macht mich verrückt ... Ich muss jede Woche die Zeit um 20 Minuten
zurückdrehen

Das erste, was ich versuchen würde, ist das Wechseln der Batterie auf dem Motherboard ....
TheXed

Antworten:


17

ntp ist gut darin, Ihren Computer auf den richtigen Zeitpunkt einzustellen, und das, ohne ihn jemals rückwärts laufen zu lassen - was für einige Programme, die Sie möglicherweise ausführen , eine schlechte Sache wäre.

Sie stellt nicht nur die Uhrzeit ein, sondern nimmt auch kontinuierliche Anpassungen an der Uhrzeit Ihres Computers vor, sodass die Uhrzeit nicht nur zu einem bestimmten Zeitpunkt stimmt, sondern auch in der Nähe der Echtzeit bleibt (innerhalb von Dutzenden von Millisekunden, nicht Dutzenden von Minuten). . Es stellt sowohl die Phase (die Zeit) als auch die Rate (wie schnell die Uhr "tickt") ein. ntp lässt die Uhr niemals rückwärts laufen. Es kann eine Weile dauern, bis festgelegt ist, wie schnell die Uhr nach einem Neustart ankreuzt. Daher verfolgt ntp die Abweichung in einer Datei mit dem Namen /var/lib/ntp/ntp.drift. Da Sie ntp nicht ausführen, geschieht nichts davon.

ntp ist nicht mehr so ​​beliebt wie früher, da Laptops und Desktops nicht mehr verwendet werden können und virtuelle Maschinen die Ausführung zeitweise unterbinden. Es ist so konzipiert, dass es von Zeit zu Zeit nach eigenem Zeitplan auf einem Computer ausgeführt wird, der ständig ausgeführt wird, und in der realen Welt, in der die Zeit kontinuierlich ist. Das ist wahrscheinlich der Grund, warum es auf der modernen Workstation nicht standardmäßig installiert ist. [Vmware finden Sie hier]

Stattdessen wird ntpdate ausgeführt, wenn die Netzwerkschnittstelle aufgerufen wird. Wenn ein schlafender Laptop aufgeweckt wird, wird die Netzwerkverbindung wiederhergestellt, ntpdate wird ausgeführt und die Uhrzeit ist wieder korrekt. Wenn die Hardware-Uhr der Maschine ziemlich genau ist und das Netzwerk ziemlich oft hoch- und heruntergefahren wird, ist dies für die meisten Menschen im Allgemeinen gut genug.

Aus irgendeinem Grund läuft das Lager ntpdate nicht immer. Verwenden Sie in diesem Fall stattdessen ntpdate-debian . Die Syntax für den Former ist so etwas wie ntpdate ntp.ubuntu.com , für den letzteren ist es ntpdate-debian

Wenn eines dieser Dinge fehlt, ist ntp ein besserer Weg, um die Zeit zu behalten.

Systeme sind so konzipiert, dass sie von Zeit zu Zeit einen Timer-Interrupt einleiten und dessen Vorstellung von der Zeit jedes Interrupts aktualisieren. Solange der Hardware-Timer gemäß Spezifikation läuft. Die Zeit driftet nicht zu sehr. Wenn der Hardware - Timer nicht aktiviert ist, wird die Zeit stärker verschoben (alle diese Uhren werden aus dem gleichen Grund wie Ihre Armbanduhr oder batteriegesteuerte Uhr verschoben). In die Wand gesteckte Uhren werden mit der Zeit durch die Frequenz und Phase synchronisiert, die von gehalten werden Ihr Energieversorgungsunternehmen).

Die meisten Computer-Timer werden von einer quarzgesteuerten Oszillatorschaltung auf ihren integrierten Schaltkreisen gesteuert. Trotz des Kristalls laufen sie je nach Umgebungstemperatur schneller und langsamer. Sofern Sie keine Zeitsynchronisierungssoftware installiert haben, die wir nicht kennen, würde ich sagen, dass die Uhr Ihres Systems nicht den Spezifikationen entspricht.

Wenn Sie ntp für ein oder zwei Tage ausführen, werden Informationen in /var/lib/ntp/ntp.drift gespeichert, aus denen hervorgeht, um wie viel die Geschwindigkeit angepasst werden muss, mit der die Zeit Ihres Betriebssystems pro Interrupt voranschreitet, um Passen Sie Ihre Hardware-Taktrate an die Echtzeit an, die über das Internet übertragen wird. Wenn Sie die Datei unverändert lassen und erst nach einer Minute ntp starten und stoppen (vorausgesetzt, Sie behalten die Datei /var/lib/ntp/ntp.drift unverändert bei), kann dies u NTP endet. Ich bin mir dieses Details nicht sicher.

Ich vermute, der Wert, den ntp in /var/lib/ntp/ntp.drift speichern würde, unterscheidet sich erheblich von meinem.

Wenn diese Maschine jedoch die ganze Zeit läuft, ist es am besten, ntp zu installieren und es tun zu lassen. In den anderen Antworten finden Sie Einzelheiten dazu, wie Sie die Uhrzeit genau vor dem Start ermitteln können. Ich starte ntp auf meinem Desktop und ntpdate auf meinem Laptop.

Eine interessante mögliche Alternative, adjtimex, wird in dieser Antwort von nealmcb erwähnt.

Wenn Ihr System nicht ständig ausgeführt wird, bietet es sich an , ntpdate beim Systemstart auszuführen .

Warnung: Manche Software kann durchdrehen, wenn die Zeit des Computers verrutscht. Das Ausführen von ntpdate nach dem Start kann dazu führen, dass dies auftritt.

Man muss wissen, dass dies ein Problem sein kann: Wie ich mich erinnere, erwartet ntp, dass die Zeit nicht zu weit entfernt ist. Wenn dies der Fall ist, wird ntp die Zeit nicht anpassen, wenn es versucht, konservativ zu handeln . Wenn Sie in dieser Situation sind, ist es sinnvoll, beides zu tun: Führen Sie ntpdate beim Booten aus, um die Zeit zum richtigen Zeitpunkt zu initialisieren, und lassen Sie dann ntp laufen, um sie am Laufen zu halten und eine genaue Zeitmessung zu gewährleisten. Insbesondere eine schlechte Batterie des Motherboards kann diesen Fehler verursachen, ebenso wie das Booten eines Computers, der lange ausgeschaltet war.


Tolle Erklärung, John! Nur eine Kleinigkeit: Das Datum und die Uhrzeit der meisten Motherboards werden von einer separaten Echtzeituhr (RTC) verwaltet, die einen eigenen 32,768-kHz-Quarz verwendet (denn wenn Sie diese Frequenz durch 2 ^ 15 teilen, erhalten Sie genau eine Sekunde) und dem FSB Clock, die normalerweise bei über 100 MHz liegt, hat nichts mit Datums- und Zeitmessung zu tun - wenn dies der Fall ist, würde Over- / Underclocking sie durcheinander bringen - stattdessen ist es normalerweise Quarzdrift im RTC-Modul / der RTC-Schaltung. Können Sie dieses Problem nachschlagen und auf den Kommentar antworten und / oder Ihre Antwort bearbeiten, um dies widerzuspiegeln?
ish

Ich mache beides! Ich habe die Erwähnung der Übertaktung entfernt, da ich sie, wie gesagt, für unwahrscheinlich halte. Die RTC wird jedoch nur zum Einstellen der Uhrzeit beim Booten verwendet. Wie in Ihrem Kommentar erwähnt, ist es nur auf 1 Sekunde genau. Auf der man rtcSeite heißt es: "RTCs sollten nicht mit der Systemuhr verwechselt werden, die vom Kernel verwaltet wird und zur Implementierung von gettimeofday (2) verwendet wird." Sie wissen nicht, ob die Systemuhr mit der FSB-Uhr zusammenhängt . In der Kernel-Konfiguration des neuesten Ubuntu-präzisen i386-Kernels wird die Systemuhr auf 250 Hz aktualisiert. Danke für den Kommentar!
John S Gruber

@izx Auf meinem Laptop-System verwendet der Kernel das HPET als Clock-Quelle. Es ist konfigurierbar. Wikipedia sagt, dass dies Teil der Southbridge-Funktion ist. Ich weiß nicht, was das über die Beziehung zum FSB aussagt, aber ich glaube, der FSB ist Teil der Northbridge.
John S Gruber

Vielen Dank, John und @izx. Ich bin begeistert von der Vollständigkeit dieser. izx, ich hoffe du nimmst es nicht persönlich, dass ich es stattdessen als akzeptiert markiert habe. Ich denke, es wird die bessere Lektüre für zukünftige Besucher sein.
ændrük

@ændrük: überhaupt kein problem, wie du siehst, habe ich auch Johns gründlichkeit sehr geschätzt.
ish

12

- Normalerweise wird die Zeit nur einmal bei jedem Start oder Wakeup-from-Sleep synchronisiert

Das Problem scheint also zu sein, dass der Standard-Zeitserver von Ubuntu (was ist das?) Die falsche Zeit hat oder Ubuntu die Zeit nicht automatisch über das Internet einstellt.

Nein, Ubuntus Zeitserver ist korrekt und stellt die Zeit automatisch ein.

Das Problem ist, dass es normalerweise nur einmal bei jedem Systemstart auftritt (genauer gesagt, jedes Mal , wenn eine Netzwerkschnittstelle gestartet wird - ob nach dem Herunterfahren, dem Energiesparmodus oder dem Ruhezustand). Anhand Ihrer Betriebszeit kann man mit Sicherheit sagen, dass die Synchronisierung nicht länger als eine Woche zurückliegt. Und Ihre Systemuhr läuft aus irgendeinem Grund etwas schnell.

- Richten Sie einen stündlichen cronJob für die Synchronisierung ein, wenn Sie nicht häufig neu starten oder Ihr Server / Desktop nicht in den Ruhezustand wechselt

Ihre beste Wette ist es, einen Cron-Job einzurichten, ich würde sagen, stündlich, wenn Sie eine supergenaue Zeit wollen. Der einfachste Weg dies zu tun ist:

  • sudo editor /etc/cron.hourly/ntpsync

Fügen Sie die folgenden Zeilen hinzu:

#! / bin / bash

ntpdate ntp.ubuntu.com #oder Server Ihrer Wahl
  • speichern, beenden und sudo chmod +x /etc/cron.hourly/ntpsync

Sie können dies /etc/cron.dailystattdessen eingeben, wenn Sie möchten, einmal pro Tag.


Spot on. Ich akzeptiere dies für die korrekte Beantwortung meiner Frage, warum die Uhr falsch ist, aber ich bin skeptisch gegenüber dieser Problemumgehung. Ich muss etwas mehr darüber lernen, bevor ich mich für eine Maßnahme entscheide.
ændrük

Wenn Sie den Server Ihrer Wahl in der Datei ntp.conf festgelegt haben, müssen Sie ihn hier neu definieren?
Snekse

6

Dies kann passieren, wenn Sie den NTP-Zeit-Daemon installiert haben und die Zeit auf Ihrem Computer zu weit entfernt ist, um eine schnelle Korrektur durchzuführen.

Um das Problem zu beheben, öffne ein Terminal und mache

  sudo service ntp stop
  sudo ntpdate swisstime.ethz.ch
  date
  sudo service ntp start

Was dies bewirkt:

  1. Stoppen Sie den ntp-Daemon
  2. Uhr einstellen
  3. Die Zeit sollte jetzt stimmen
  4. Starten Sie den ntp-Daemon neu

Wenn Sie ntp nicht installiert haben, machen Sie es mit

  sudo apt-get install update

Update: Die Verwendung von ntpdate in einem Cron-Job, wie hier empfohlen, führt zu subtilen Problemen.

Das ntpdate bewirkt, dass die Zeit jede Stunde oder so springt. Die Verwendung von ntp vermeidet dieses Problem, da die Zeit durch Verdrehen der Uhr angepasst wird. Auch wenn die Auswahl eines NTP-Servers in der Nachbarschaft eine noch höhere Genauigkeit bietet, ist dies nicht erforderlich. Die Standard-NTP-Konfigurationsdatei enthält mehrere Server, und der Server gleicht Verzögerungen automatisch aus.

Fazit: - NTP verwenden - Wenn Sie weit davon entfernt sind, fahren Sie NTP herunter, führen Sie NTPdate einmal aus und starten Sie NTP neu.


/etc/init.d/ntpexistiert nicht. Dies ist eine relativ neue Ubuntu 12.04-Installation, und ich habe nichts in Bezug auf die Zeit absichtlich geändert.
ændrük

Dann empfehle ich die Installation.
Floyd

Ich bevorzuge es, mich so weit wie möglich nicht in systemweite Konfigurationen und Dienste einzumischen. Wenn diese Datei nicht standardmäßig installiert ist, warum sollte es erforderlich sein, dass die Standardeinstellungen für Uhrzeit und Datum funktionieren?
ændrük,

1
Ist die Zeit nach einem Neustart korrekt? Ich vermute, dass das Uhr-Update nur einmal ntpdate ausführt. Einige Systeme haben das Problem, dass die von Linux gepflegte Systemuhr viel zu schnell läuft. Ich habe das besonders mit Systemen gehabt, die als virtuelle Maschinen laufen.
Floyd

1
Wenn dieses Problem nach einem Neustart oder Herunterfahren weiterhin besteht, ist Ihre CMOS-Zelle in MOBO möglicherweise nicht mehr funktionsfähig.
Atenz

1

Ich hatte ein ähnliches Problem und es wurde von etwas in der Firewall verursacht. Am Ende habe ich den stündlichen Cron- Job hinzugefügt, aber das -uArgument hinzugefügt ntpdate, damit er einen Nicht-Standard-Port verwendet.

Mein Problem wurde dadurch verursacht, dass Ubuntu nicht prüfte, ob es ntpdatefunktioniert, sondern automatisch davon ausging, dass es funktionieren würde.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.