Чому годинник Ubuntu стає повільнішим або швидшим?


16

Годинник Ubuntu вимкнений приблизно на півтори години:

Ubuntu Time & Date v. Офіційний час у США

З чого я навіть починаю вирішувати проблеми?

Нібито встановлюється "автоматично з Інтернету". Як я можу перевірити, що "Інтернет" знає, який час?

Деталі

У Ubuntu було достатньо часу для спілкування з Інтернетом:

$ 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

Цього разу сервер, який я знайшов за допомогою веб-пошуку, схоже, знає правильний час:

$ 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

Повідомлень про помилки, пов’язані з NTP, немає:

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

Після перезавантаження час автоматично було виправлено, і в ньому з’явилося наступне /var/log/syslog:

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

Журнал зміщення, про який повідомляє ntpdate, показує, що годинник переміщується приблизно на 9 секунд щогодини:

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

Час часу v. Зсув сервера часу


Передумови: ntp - чудовий інструмент для підтримки точного часу . Але потрібен обмежений час (кілька хвилин, а то й годин), щоб дійти до поточного часу з невірного часу. Це пов'язано з ntp-серверами (ваш вибір) та вашою затримкою в Інтернеті до цих. @Floyd намітив ярлик для швидкого застосування правильного часу. Але кращий час (і використання ntp ) вимагає ретельного вибору ntp-серверів.
david6

Моя машина робить це ... зводить мене з розуму ... Я маю котити час 20 хвилин щотижня ...
TheXed

Перше, що я б спробував зробити, це змінити акумулятор на материнській платі ....
TheXed

Відповіді:


17

ntp добре справляється з тим, щоб ваш комп’ютер був встановлений у потрібний час, і це робить, навіть не запускаючи його назад - що було б погано для деяких програм, які ви можете запустити.

Він не тільки встановлює час, але і постійно регулює, як ваш комп’ютер зберігає час, щоб його час не тільки було правильним в одну мить, але й залишалося близьким до реального часу (протягом десятків мілісекунд, а не десятків хвилин) . Він регулює як фазу (час), так і швидкість (як швидко годинник "тикає"). ntp ніколи не змушує годинник бігати назад. Визначити, як швидко позначити годинник після перезавантаження, може знадобитися багато часу, тому ntp відслідковує дрейф у файлі під назвою /var/lib/ntp/ntp.drift. Оскільки ви не запускаєте ntp, цього нічого не відбувається.

ntp не настільки популярний, як раніше, тому що сплячі ноутбуки та настільні комп’ютери, а віртуальні машини не дозволяють йому працювати деякий час. Він призначений для роботи раз у раз за власним розкладом на комп'ютері, який працює весь час, і в реальному світі, де час безперервний. Можливо, тому він не встановлений за замовчуванням на сучасній робочій станції. [Для Vmware див. Це]

Натомість ntpdate запускається, коли піднімається мережевий інтерфейс. Коли пробуджується сплячий ноутбук, він відновлює мережеве з'єднання, ntpdate запускається, і час знову настає правильним. Якщо апаратний годинник апарату досить точний, а мережа піднімається та зменшується досить часто, це, як правило, досить добре для більшості людей.

Чомусь акція ntpdate не завжди працює. Замість цього використовуйте ntpdate-debian . Синтаксис для for.mer - це щось на зразок ntpdate ntp.ubuntu.com , для останнього це ntpdate-debian

За відсутності однієї з цих речей, тоді ntp - це кращий спосіб зберегти час.

Системи розроблені таким чином, щоб кожен раз переривати таймер і оновлювати його уявлення про час кожного переривання. Поки апаратний таймер працює на специфікацію. часу не надто швидко дрейфує. Якщо апаратний таймер відсутній, час зменшиться більше (усі такі годинники будуть переноситись з тієї ж причини, що і ваш годинник, керований акумулятором, або годинник, керований акумулятором. Годинники, підключені до стіни, синхронізуються на час за частотою та фазою, що зберігається ваша енергетична компанія).

Більшість комп'ютерних таймерів керується кристалічною схемою генератора в інтегральних схемах. Незважаючи на кристал, вони працюють швидше і повільніше залежно від навколишнього середовища, переважно температури. Якщо у вас не встановлено якийсь час програмне забезпечення для синхронізації, про яке ми не знаємо, я б сказав, що годинник вашої системи відсутній.

Якщо ви запускаєте ntp протягом дня або двох, він би зберігав інформацію в /var/lib/ntp/ntp.drift, яка б вказувала, скільки потрібно буде скорегувати швидкість, з якою ваша операційна система просувається за час перерви, щоб відповідати вашій апаратній тактовій частоті в реальному часі через Інтернет. Збереження файлу однаковим і лише запуск та зупинка ntp через хвилину після цього (якщо ви збережете файл /var/lib/ntp/ntp.drift незмінним) може зробити багато для того, щоб виправити це, якщо часові зсуви ntp встановлюються після ntp закінчується. Я не впевнений у цій деталі.

Я підозрюю, що значення ntp зберігатиметься в /var/lib/ntp/ntp.drift набагато інше, ніж моє.

Якщо ця машина постійно працює, однак, найкраще зробити, це встановити ntp і дозволити цьому зробити свою справу. Дивіться інші відповіді для отримання детальної інформації про те, як отримати час безпосередньо перед його початком. Я запускаю ntp на робочому столі та ntpdate на своєму ноутбуці.

У цій відповіді згадується nealmcb у цікавій можливій альтернативі adjtimex.

Якщо ваша система не працює постійно, запуск ntpdate під час завантаження здається хорошим варіантом.

Попередження про певне програмне забезпечення може вийти з ладу, якщо час на комп’ютерах йде назад. Запуск ntpdate після завантаження може призвести до цього.

Один готча, це може бути проблемою: Як я пам'ятаю, ntp очікує, що час не буде занадто далеко. Якщо це так, намагаючись діяти консервативно, ntp взагалі не налаштовує час. Якщо ви знаходитесь у цій ситуації, є сенс зробити і те й інше - запустити ntpdate під час завантаження, щоб ініціалізувати час до потрібного часу, а потім дозволити ntp запустити, щоб він працював, щоб забезпечити точне затримка часу. Зокрема, погана батарея на материнській платі може спричинити цю помилку, як і завантаження комп'ютера, який вимкнено давно.


Чудове пояснення Іван! Лише одна дрібниця - дата / час на більшості материнських плат підтримується окремим RTC (годинником у режимі реального часу), який використовує власний кристал 32,768 КГц (адже ділення цієї частоти на 2 ^ 15 дає точнісіньку секунду), і FSB тактова частота, що зазвичай знаходиться на частоті 100 МГц, не має нічого спільного з тим, щоб зберігати дату і час - якщо так, то надмір / розблокування може зіпсувати це - натомість це зазвичай кристалічний дрейф у модулі / схемі RTC. Чи можете ви розглянути це питання та відповісти на коментар та / або відредагувати свою відповідь, щоб це відобразити?
Останній

Я зроблю обоє! Я видалив згадку про перевищення часу, оскільки вважаю це малоймовірним, як я вже говорив. Однак RTC просто використовується для встановлення часу на час завантаження. Як зазначається у вашому коментарі, точна лише 1 секунда. На man rtcсторінці написано: "RTC не слід плутати з системними годинниками, це програмний годинник, який підтримується ядром, і використовується для впровадження gettimeofday (2) ..." Не знаю, чи системний годинник пов'язаний з годинником FSB . Дивлячись на конфігурацію ядра, останнє ядро ​​Ubuntu точне i386 оновлює системну тактову частоту на 250 ГГц. Дякуємо за коментар!
Джон С Грубер

@izx У системі мого ноутбука ядро ​​використовує HPET як свій тактовий ресурс. Це налаштовується. У Вікіпедії сказано, що це частина функції південного мосту. Я не знаю, що це говорить про його стосунки з ФСБ, але я вважаю, що ФСБ є частиною північного мосту.
Джон С Грубер

Дякую, Джон та @izx. Я в захваті від всебічності цього. izx, сподіваюся, ти не сприймаєш це особисто, що я позначив це як прийняте. Я думаю, що це буде краще читати для майбутніх відвідувачів.
ændrük

@ ændrük: взагалі немає проблем, як ви бачите, я дуже цінував також ретельність Джона.
Іш

12

- Зазвичай час синхронізується лише один раз після кожного завантаження або неспання

Отже, проблема полягає в тому, що сервер часу за замовчуванням Ubuntu (що це?) Має неправильний час, або Ubuntu не встановлює час автоматично з Інтернету.

Ні, сервер часу Ubuntu правильний, і він встановлює час автоматично з нього.

Проблема полягає в тому, що зазвичай виникає лише один раз при кожному завантаженні (або якщо бути точнішим, кожен раз, коли виводиться мережевий інтерфейс - від відключення, сну чи сплячки). Виходячи з вашого часу роботи, можна сказати, що він не синхронізувався більше тижня. І ваш системний годинник з якоїсь причини працює трохи швидко.

- Налаштуйте погодинну cronроботу для синхронізації, якщо ви не перезавантажуєтесь часто, або ваш сервер / робочий стіл ніколи не переходить до сну

Ваша найкраща ставка - це налаштувати роботу з крон, я б сказала щогодини, якщо ви хочете суперточний час. Найпростіший спосіб зробити це:

  • sudo editor /etc/cron.hourly/ntpsync

Додайте наступні рядки:

#! / бін / баш

ntpdate ntp.ubuntu.com # або ваш вибір сервера
  • зберегти, вийти та sudo chmod +x /etc/cron.hourly/ntpsync

Ви можете вкласти це /etc/cron.dailyзамість цього, якщо хочете, раз на день.


Пляма на. Я приймаю це за те, щоб правильно відповісти на моє запитання, чому годинник неправильний, але я скептично ставлюся до цього рішення. Мені доведеться дізнатися трохи більше про це, перш ніж вирішувати, що робити.
ændrük

Якщо ви встановите обраний сервер у файлі ntp.conf, чи потрібно вам його переосмислити тут?
Снексе

6

Це може статися, якщо ви встановили демон часу ntp і час на вашій машині занадто далеко, щоб швидко виправити.

Щоб виправити це, відкрийте термінал і зробіть

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

Що це робить:

  1. Зупиніть ntp демон
  2. Встановити годинник
  3. Час зараз має бути правильним
  4. перезапустити ntp демон

Якщо у вас не встановлено ntp, зробіть це

  sudo apt-get install update

Оновлення: Використання ntpdate у роботі з cron, як було рекомендовано тут, призводить до тонких проблем.

Ntpdate зробить час "стрибок" щогодини або близько того. Використання ntp дозволяє уникнути цієї проблеми, оскільки вона регулює час, перекошуючи годинник. Крім того, під час вибору ntp-сервера по сусідству дає ще більшу точність, це не обов'язково. Конфігураційний файл ntp за замовчуванням містить кілька серверів, і сервер автоматично компенсує будь-які затримки.

Підсумок: - використовувати ntp - якщо вам далеко, вимкніть ntp, запустіть ntpdate один раз і перезапустіть ntp.


/etc/init.d/ntpне існує. Це досить недавня установка Ubuntu 12.04, і я навмисно не змінив нічого, пов’язаного з часом.
ændrük

Тоді я рекомендую встановити його.
Флойд

Наскільки це можливо, я вважаю за краще не втручатися в загальносистемну конфігурацію та послуги. Якщо цей файл не встановлений за замовчуванням, чому повинні бути необхідними параметри часу та дати за замовчуванням?
ændrük

1
Чи правильний час після перезавантаження? Я підозрюю, що оновлення годин просто запускає ntpdate один раз. У деяких системах виникає проблема, що системний годинник, який підтримує Linux, працює занадто швидко. У мене це було, зокрема, із системами, що працюють як віртуальні машини.
Флойд

1
Якщо ця проблема не виникає після перезавантаження або відключення, можливо, ваша клітина CMOS відмерла в MOBO.
atenz

1

У мене була подібна проблема, і вона була викликана чимось в брандмауері. Врешті-решт я додав щогодинну роботу cron, але додав -uаргумент, ntpdateщоб змусити її використовувати не стандартний порт.

Моя проблема була викликана тим, що Ubuntu фактично не перевіряв, чи ntpdateпрацює, але автоматично припускаючи, що він буде працювати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.