Start   Impressum         online lesen   Download         Jumping Blue Turtle

Debian für Unternehmer - Debian-Know-how

1136: Uhrzeitproblem beim NVIDIA-Chipsatz nForce 630a lösen

Dieses Modul behandelt einen Bug, der mindestens bei allen Rechnern mit dem NVIDIA-Chipsatz nForce 630a auftreten kann, also zum Beispiel bei einem Barebone vom Typ "Shuttle SN68PTG5".



1. Das Problem

In einem Debian-Linux geht die Systemuhr gegenüber der BIOS-Zeit um 2 Stunden vor.



2. Die Ursache

Die Ursache des Problems ist, dass Debian bei neueren Rechnern Probleme hat, die Software-Uhr des Betriebssystems mit der Hardware-Uhr des BIOS ordentlich zu synchronisieren.

Um das zu verdeutlichen, machen wir ein Experiment: Wir nehmen einen alten Rechner aus dem Jahr 2006 mit einem "VIA K8M800"-Chipsatz und wir nehmen einen neuen Rechner aus dem Jahr 2008 mit einem "NVIDIA nForce 630a"-Chipsatz. Auf beiden Rechnern läuft Debian Etch. Und auf beiden Rechnern wollen wir nun die aktuelle Zeit der Hardware-Uhr des BIOS wissen. Dazu gibt es folgenden Befehl:

hwclock --show

Etwa eine halbe Sekunde nach Befehlseingabe lautet das Ergebnis des alten Rechners ungefähr so:

So 22 Jun 2008 06:26:24 CEST  -0.039483 seconds

5 Sekunden nach Befehlseingabe lautet das Ergebnis des neuen Rechners exakt so:

select() to /dev/rtc to wait for clock tick timed out

Das ist ein Indiz dafür, dass Debian auf dem neuen Rechner mit dem Device "/dev/rtc" nicht kommunizieren kann.

Nun gibt es laut der man-Page von "hwclock" noch die Option "--directisa". Die Beschreibung dazu lautet dort wie folgt:

       --directisa
              is  meaningful  only on an ISA machine or an Alpha (which imple-
              ments enough of ISA to be, roughly speaking, an ISA machine  for
              hwclock's  purposes).   For  other  machines,  it has no effect.
              This option tells hwclock to use explicit  I/O  instructions  to
              access  the  Hardware  Clock.  Without this option, hwclock will
              try to use the /dev/rtc device (which it assumes to be driven by
              the rtc device driver).  If it is unable to open the device (for
              read), it will use the explicit I/O instructions anyway.

              The rtc device driver was new in Linux Release 2.

Unsere Tests werden gleich zeigen, dass diese Beschreibung irreführend ist, denn tatsächlich haben wir es hier weder mit ISA-Maschinen noch mit Alpha-Architekturen zu tun, sondern einfach nur mit moderner PCI-Hardware. Wir werden jetzt den Befehl "hwclock" so aufrufen, dass er während seiner Arbeit eindeutige I/O-Instruktionen nutzt, um auf die Hardware-Uhr des BIOS zuzugreifen. Wir nutzen jetzt auf beiden Rechnern folgenden Befehl:

hwclock --directisa --show

Etwa eine halbe Sekunde nach Befehlseingabe lautet das Ergebnis des alten Rechners ungefähr so:

So 22 Jun 2008 06:26:24 CEST  -0.039483 seconds

Etwa eine Sekunde nach Befehlseingabe lautet das Ergebnis des neuen Rechners ungefähr so:

So 22 Jun 2008 06:26:24 CEST  -0.039483 seconds

Wir haben jetzt also ein eindeutiges Ergebnis: Während es auf dem alten Rechner keinen Unterschied macht, ob auf die Hardware-Uhr des BIOS direkt per I/O-Instruktionen oder indirekt über das Device "/dev/rtc" zugegriffen wird, macht es auf dem neuen Rechner sehr wohl einen Unterschied.

Nun haben wir das Problem und die Ursache so weit verstanden, dass wir es lösen können.



3. Die Lösung

Die Software-Uhr des Betriebssystems geht gegenüber der Hardware-Uhr des BIOS deswegen um 2 Stunden vor, weil Debian beim Hochfahren des Rechners die tatsächliche Uhrzeit nicht auslesen kann (und sie beim Herunterfahren des Rechners auch nicht zurückschreiben kann).

Wenn wir das ändern wollen, dann müssen alle Zugriffe des Betriebssystems auf die Hardware-Uhr des BIOS direkt erfolgen, unter Umgehung des vom Betriebssystem zur Verfügung gestellten Gerätes "/dev/rtc". Gehen Sie dazu wie folgt vor:

  1. Öffnen Sie die Datei "/etc/init.d/hwclock.sh" wie folgt:
    mcedit /etc/init.d/hwclock.sh
    
  2. Gehen Sie in die Zeile 21. Diese Zeile sollte folgenden Inhalt enthalten:
    HWCLOCKPARS=
    
  3. Ändern Sie die Zeile 21 so ab, dass sie danach wie folgt aussieht:
    HWCLOCKPARS="--directisa"
    
  4. Speichern und schließen Sie die Datei.


4. Einmalige Korrektur

Ab sofort kann Linux auf die Hardware-Uhr zugreifen. Beim nächsten Herunterfahren des Systems wird Linux das auch machen und eine falsche Uhrzeit in die Hardware-Uhr eintragen. Dann wird nicht nur die Software-Uhr, sondern auch die Hardware-Uhr um 2 Stunden vor gehen. Sie können das Problem wie folgt lösen:

  1. Rebooten Sie den Rechner und betreten Sie das BIOS.

  2. Korrigieren Sie dort die Uhrzeit.

Wenn Sie wollen, können Sie natürlich auch im Betriebssystem die Uhrzeit korrigieren. Aber: Im BIOS sind die Werkzeuge dazu intuitiver zu bedienen als auf der Kommandozeile und Sie können davon ausgehen, dass Ihre Uhrzeit sofort und ohne Korrekturverluste irgendwelcher dazwischenhängender Instanzen an die Hardware-Uhr weitergegeben wird. Sie können das auch unmittelbar kontrollieren, weil Sie nur im BIOS die Hardware-Zeit und nicht die Software-Zeit angezeigt bekommen. Auch Zeitzonen verwirren hier nicht, weil es das Konzept "Zeitzone" hier einfach nicht gibt.



5. Warum eine Uhr nicht um 2 Stunden vor gehen darf

Was passieren kann, wenn ein Betriebssystem mit der Hardware-Uhr kommunizieren kann, ein anderes jedoch nicht, das können Sie in folgendem tatsächlich stattgefundenen Szenario nachvollziehen

  • Der Rechner bootet in das Betriebssystem, dessen Software-Uhr um 2 Stunden vor geht.

  • Eine 114 Gigabyte große Partition wurde zum 21. mal gemountet und muss jetzt gecheckt werden. Der Rechner braucht deshalb 5 Minuten länger zum Booten, als üblich.

  • Ungeduldig warten Sie diese 5 Minuten ab. Danach arbeiten Sie mit dem System. Nach der Arbeit booten Sie um in ein anderes System.

  • Der Rechner bootet jetzt in das Betriebssystem, dessen Software-Uhr genau geht.

  • Die 114 Gigabyte große Partition wurde jetzt vor 49710 Tagen (also vor etwa 136 Jahren) das letzte mal gemountet und muss daher schon wieder gecheckt werden. Deweiteren kommen Fehlermeldungen, die sich darüber beschweren, dass die Zugriffe auf die Partition in der Zukunft liegen. Und wieder braucht der Rechner 5 Minuten länger zum Booten, als üblich.

Damit so etwas nicht die Regel wird, sollten Sie das Uhrzeit-Problem möglichst zeitnah beheben.



6. Externe Informationen

Probleme dieses Kalibers werden in der Regel von den wenigsten Zeitgenossen entdeckt oder gar durchschaut, weil sie nicht immer so offensichtlich sind, wie bei Menschen, die mit mehreren Betriebssystemen auf einem Rechner arbeiten.

Der Vorteil der Globalisierung ist, dass wenigstens im englischen Sprachraum Gedanken und Lösungsansätze zu diesen Problem ausgetauscht wurden, ohne auf 25 Prozent des Weges das Denken komplett einzustellen. Die beiden wichtigsten Links, die mich dazu gebracht haben, zu verstehen, was hier eigentlich los ist, sind die folgenden: