Dlaczego zegar Ubuntu działa coraz wolniej?

16

Zegar Ubuntu jest wyłączony o około pół godziny:

Czas i data Ubuntu v. Oficjalny czas w USA

Gdzie mogę nawet zacząć to rozwiązywać?

Podobno jest ustawiony „automatycznie z Internetu”. Jak mogę sprawdzić, czy „Internet” wie, która jest godzina?

Detale

Ubuntu miał dużo czasu na komunikację z Internetem:

$ 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

Wydaje mi się, że ten serwer czasu znaleziony podczas wyszukiwania w sieci zna prawidłowy czas:

$ 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

Nie zgłoszono żadnych błędów związanych z NTP:

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

Po ponownym uruchomieniu czas został automatycznie skorygowany, a w /var/log/syslog:

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

Dziennik przesunięcia zgłaszanego przez ntpdate pokazuje, że zegar dryfuje o około 9 sekund co godzinę:

$ 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))
'

Czas zegara v. Przesunięcie serwera czasu

ændrük
źródło
Tło: ntp jest doskonałym narzędziem do utrzymywania dokładnego czasu . Ale przejście do aktualnego czasu z niepoprawnego czasu zajmuje skończony czas (kilka minut, a nawet godzin). Jest to związane z serwerami NTTP (do wyboru) i opóźnieniami internetowymi w stosunku do nich. @ Floyd przedstawił skrót, aby szybko wymusić poprawny czas. Ale lepszy czas (i użycie NTTP ) wymaga starannego wyboru serwerów NTTP.
david6
Mój samochód to robi ... doprowadza mnie do szału ... Muszę cofać czas o 20 minut co tydzień ...
TheXed
Pierwszą rzeczą, którą spróbuję zrobić, jest wymiana baterii na płycie głównej ...
TheXed

Odpowiedzi:

17

ntp dobrze radzi sobie z ustawieniem komputera we właściwym czasie i robi to bez uruchamiania go wstecz - co byłoby niekorzystne dla niektórych programów, które możesz uruchamiać.

Nie tylko ustawia czas, ale dokonuje ciągłych zmian w sposobie, w jaki komputer utrzymuje czas, dzięki czemu jego czas jest nie tylko odpowiedni w jednej chwili, ale pozostaje zbliżony do czasu rzeczywistego (w ciągu kilkudziesięciu milisekund, nie dziesiątek minut) . Reguluje zarówno fazę (czas), jak i szybkość (szybkość, z jaką zegar „tyka”). ntp nigdy nie powoduje, że zegar biegnie wstecz. Ustalenie szybkości tykania zegara po ponownym uruchomieniu może zająć dużo czasu, więc ntp śledzi dryft w pliku o nazwie /var/lib/ntp/ntp.drift. Ponieważ nie używasz NTTP, nic takiego się nie dzieje.

ntp nie jest tak popularny, jak kiedyś, ponieważ śpiące laptopy i komputery stacjonarne, a maszyny wirtualne zatrzymują go na jakiś czas. Został zaprojektowany tak, aby uruchamiał się od czasu do czasu według własnego harmonogramu na komputerze, który działa cały czas, oraz w prawdziwym świecie, w którym czas jest ciągły. Prawdopodobnie dlatego nie jest domyślnie instalowany na nowoczesnej stacji roboczej. [Zobacz Vmware ]

Zamiast tego uruchamiany jest program ntpdate po uruchomieniu interfejsu sieciowego. Po przebudzeniu uśpiony laptop ponownie ustanawia połączenie sieciowe, uruchamiany jest program ntpdate , a czas znów jest poprawny. Jeśli zegar sprzętowy maszyny jest dość dokładny, a sieć jest dość często podnoszona i wyłączana, to na ogół wystarcza dla większości ludzi.

Z jakiegoś powodu czas ntpdate nie zawsze działa. W takim przypadku użyj ntpdate-debian . Składnia for.mer to coś w rodzaju ntpdate ntp.ubuntu.com , dla tego drugiego to ntpdate-debian

W przypadku braku jednej z tych rzeczy, ntp jest lepszym sposobem na zachowanie czasu.

Systemy są zaprojektowane tak, aby co jakiś czas przerywały odliczanie czasu i aktualizowały wyobrażenie o czasie za każdym razem. Dopóki zegar sprzętowy działa zgodnie ze specyfikacją. czas nie płynie za bardzo. Jeśli zegar sprzętowy nie jest, czas będzie płynął dłużej (wszystkie takie zegary będą dryfować, z tego samego powodu, co Twój zegarek na rękę lub zegar sterowany baterią. Zegary podłączone do ściany są synchronizowane z czasem przez częstotliwość i fazę utrzymywaną przez Twoja firma energetyczna).

Większość timerów komputerowych jest kontrolowanych przez kryształowo sterowany obwód oscylatora w jego obwodach scalonych. Pomimo kryształu działają szybciej i wolniej w zależności od środowiska, głównie temperatury. Jeśli nie masz zainstalowanego oprogramowania do synchronizacji czasu, o którym nie wiemy, powiedziałbym, że zegar twojego systemu jest wyłączony.

Gdybyś miał biec ntp przez dzień lub dwa, zapisywałoby to informacje w /var/lib/ntp/ntp.drift, które wskazywałyby, jak bardzo musiałby dostosować szybkość, z jaką twój system operacyjny przyspiesza na przerwanie, aby dopasuj częstotliwość zegara sprzętowego do czasu rzeczywistego przesyłanego przez Internet. Utrzymanie tego samego pliku i po prostu uruchomienie i zatrzymanie ntp po minucie (zakładając, że plik /var/lib/ntp/ntp.drift pozostanie niezmieniony) może wiele zrobić, aby to naprawić, jeśli zestawy odchyleń zegara ntp pozostaną później NTTP się kończy. Nie jestem pewien tego szczegółu.

Podejrzewam, że wartość przechowywana przez ntp w /var/lib/ntp/ntp.drift jest znacznie inna niż moja.

Jeśli jednak ten komputer działa cały czas, najlepiej jest zainstalować program NTTP i pozwolić mu działać. Zobacz pozostałe odpowiedzi, aby uzyskać szczegółowe informacje na temat uzyskania odpowiedniego czasu przed jego uruchomieniem. biegnę ntp na pulpicie i ntpdate na moim laptopie.

Interesująca możliwa alternatywa, adjtimex, jest wymieniona w tej odpowiedzi przez nealmcb.

Jeśli Twój system nie działa cały czas, działa dobrym pomysłem jest ntpdate podczas rozruchu.

Ostrzeżenie, niektóre programy mogą wystraszyć, jeśli czas komputera cofnie się. Uruchamianie ntpdate po rozruchu może to spowodować.

Jeden problem, to może być problem: jak pamiętam, ntp spodziewa się, że czas nie będzie zbyt daleko. Jeśli tak, starając się działać zachowawczo, ntp w ogóle nie dostosuje czasu. Jeśli znajdujesz się w takiej sytuacji, sensowne jest zrobienie obu - uruchom ntpdate podczas rozruchu, aby uzyskać czas zainicjowany we właściwym czasie, a następnie pozwól, aby ntp uruchomił go, aby zapewnić dokładność pomiaru czasu. W szczególności zła bateria płyty głównej może powodować ten błąd, podobnie jak uruchamianie komputera, który był wyłączony przez długi czas.

John S Gruber
źródło
Świetne wyjaśnienie, John! Tylko jedna mała rzecz - data / czas na większości płyt głównych jest utrzymywany przez osobny zegar czasu rzeczywistego (RTC), który używa własnego kryształu 32,768 kHz (ponieważ podzielenie tej częstotliwości przez 2 ^ 15 daje dokładnie jedną sekundę), a FSB zegar, który zwykle ma częstotliwość 100+ MHz, nie ma nic wspólnego z utrzymywaniem daty i godziny - jeśli tak, to podkręcenie / zakłócenie go zepsułoby - zamiast tego zwykle dryfuje kryształ w module / obwodzie RTC. Czy możesz sprawdzić ten problem i odpowiedzieć na komentarz i / lub edytować odpowiedź, aby to odzwierciedlić?
ish
Zrobię oba! Usunąłem wzmiankę o przetaktowaniu, ponieważ moim zdaniem jest to nieprawdopodobne, jak już powiedziałem. Jednak RTC służy tylko do ustawiania czasu w czasie rozruchu. Jak wspomina Twój komentarz, jest on dokładny tylko do 1 sekundy. man rtcStrona mówi: „RTCs nie należy mylić z zegarem systemowym, który jest utrzymywany przez zegar oprogramowanie jądra i wykorzystywane do realizacji gettimeofday (2) ...” Nie wiem, czy zegar systemowy jest związany z zegarem FSB . Patrząc na konfigurację jądra, najnowsze jądro Ubuntu i386 precyzyjnie aktualizuje zegar systemowy na 250Hz. Dziękuję za komentarz!
John S Gruber,
@izx W moim laptopie jądro używa HPET jako źródła zegara. Jest konfigurowalny. Wikipedia mówi, że jest to część funkcji mostka południowego. Nie wiem, co to mówi o jego związku z FSB, ale sądzę, że FSB jest częścią mostu północnego.
John S Gruber,
Dziękuję, John i @izx. Jestem zachwycony kompleksowością tego. izx, mam nadzieję, że nie weźmiesz tego do siebie, że oznaczyłem to jako zaakceptowane. Myślę, że będzie to lepsza lektura dla przyszłych gości.
ændrük
@ ændrük: w ogóle nie ma problemu, jak widać, bardzo doceniłem również dokładność Johna.
ish
12

- Zwykle czas jest synchronizowany tylko raz przy każdym uruchomieniu lub wybudzeniu z trybu uśpienia

Problemem może być albo to, że domyślny serwer czasu Ubuntu (co to jest?) Ma nieprawidłowy czas, albo Ubuntu nie ustawia czasu automatycznie z Internetu.

Nie, serwer czasu Ubuntu jest poprawny i automatycznie ustawia z niego czas.

Problem polega na tym, że zwykle występuje tylko raz przy każdym uruchomieniu (a ściślej mówiąc, przy każdym uruchomieniu interfejsu sieciowego - od wyłączenia, uśpienia lub hibernacji). Biorąc pod uwagę czas dostępności, można bezpiecznie stwierdzić, że nie był zsynchronizowany przez ponad tydzień. Z jakiegoś powodu zegar systemowy działa z pewną szybkością.

- Skonfiguruj cogodzinne cronzadanie synchronizacji, jeśli nie uruchamiasz się często lub serwer / pulpit nigdy nie przechodzi w tryb uśpienia

Najlepiej założyć cron-zadanie, powiedziałbym, że co godzinę, jeśli chcesz bardzo precyzyjnego czasu. Najłatwiej to zrobić:

  • sudo editor /etc/cron.hourly/ntpsync

Dodaj następujące wiersze:

#! / bin / bash

ntpdate ntp.ubuntu.com # lub twój wybór serwera
  • zapisz, wyjdź i sudo chmod +x /etc/cron.hourly/ntpsync

Możesz włożyć to /etc/cron.dailyzamiast tego, jeśli chcesz, raz dziennie.

ish
źródło
Spot on. Przyjmuję to za prawidłowe udzielenie odpowiedzi na pytanie, dlaczego zegar jest nieprawidłowy, ale jestem sceptyczny wobec tego obejścia. Będę musiał dowiedzieć się nieco więcej na ten temat, zanim zdecyduję, jakie działania podjąć.
ændrük
Jeśli ustawisz wybrany serwer w pliku ntp.conf, czy musisz go tutaj przedefiniować?
Snekse,
6

Może się to zdarzyć, jeśli zainstalowałeś demona czasu NTTP, a czas na twoim komputerze jest zbyt daleko, aby można go było szybko poprawić.

Aby to naprawić, otwórz terminal i zrób to

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

Co to robi:

  1. Zatrzymaj demona NTTP
  2. Ustaw zegarek
  3. Czas powinien być teraz właściwy
  4. zrestartuj demona ntp

Jeśli nie masz zainstalowanego NTTP, zrób to z

  sudo apt-get install update

Aktualizacja: Używanie narzędzia ntpdate w zadaniu cron, zgodnie z zaleceniami, prowadzi do subtelnych problemów.

Ntpdate sprawi, że czas będzie „skakał” co godzinę. Użycie ntp pozwala uniknąć tego problemu, ponieważ dostosuje czas, pochylając zegar. Ponadto, chociaż wybór serwera NTTP w sąsiedztwie daje jeszcze wyższą dokładność, nie jest to konieczne. Domyślny plik konfiguracyjny NTTP zawiera kilka serwerów, a serwer automatycznie kompensuje wszelkie opóźnienia.

Konkluzja: - użyj ntp - jeśli jesteś daleko, zamknij ntp, uruchom raz ntpdate i zrestartuj ntp.

Floyd
źródło
/etc/init.d/ntpnie istnieje Jest to dość nowa instalacja Ubuntu 12.04 i nie zmieniłem celowo niczego związanego z czasem.
ændrük
Następnie polecam go zainstalować.
Floyd
O ile to możliwe, wolę nie mieszać się z konfiguracją i usługami dla całego systemu. Jeśli ten plik nie jest instalowany domyślnie, dlaczego powinien być konieczny do działania domyślnych ustawień czasu i daty?
ændrük
1
Czy czas jest poprawny po ponownym uruchomieniu? Podejrzewam, że aktualizacja zegara uruchamia raz ntpdate. Niektóre systemy mają problem z tym, że zegar systemowy obsługiwany przez system Linux działa o wiele za szybko. Miałem to szczególnie w przypadku systemów działających jako maszyny wirtualne.
Floyd
1
Jeśli problem będzie się powtarzał po ponownym uruchomieniu lub wyłączeniu, być może Twoja komórka CMOS nie działa w MOBO.
atenz
1

Miałem podobny problem i był spowodowany przez coś w zaporze. Na koniec dodałem croniczne zadanie cron, ale dodałem -uargument, ntpdateaby zmusić go do używania standardowego portu.

Mój problem był spowodowany ntpdatefaktem, że Ubuntu nie sprawdzał, czy działa, ale automatycznie zakładał, że zadziała.

Axel
źródło