Вопрос или проблема
У меня возникли проблемы с отказами на моем KVM хосте (Lubuntu 20.04), и при поиске решения я заметил некоторые ошибки, связанные со временем.
При дальнейшем расследовании, к моему ужасу, я увидел, что время не синхронизируется. Я уверен, что это было настроено ранее, не имею понятия, как это стало не настроенным.
admin@virtland:~$ sudo timedatectl
[sudo] пароль для admin:
Локальное время: Пт 2020-07-10 09:14:14 EDT
Всемирное время: Пт 2020-07-10 13:14:14 UTC
Время RTC: Пт 2020-07-10 13:14:14
Часовой пояс: Америка/Нью_Йорк (EDT, -0400)
Системные часы синхронизированы: нет
NTP служба: н/д
RTC в локальном TZ: нет
admin@virtland:~$
Я нашел этот поток и попробовал верхний ответ, но это не принесло никакой пользы.
https://askubuntu.com/questions/929805/timedatectl-ntp-sync-cannot-set-to-yes
admin@virtland:~$ sudo systemctl stop ntp
admin@virtland:~$ sudo ntpd -gq
10 Июл 09:17:57 ntpd[34358]: ntpd [email protected] (1): Запускается
10 Июл 09:17:57 ntpd[34358]: Командная строка: ntpd -gq
10 Июл 09:17:57 ntpd[34358]: протокол: точность = 0.070 мкс (-24)
10 Июл 09:17:57 ntpd[34358]: файл секундного прыжка ('/usr/share/zoneinfo/leap-seconds.list'): хорошая контрольная сумма
10 Июл 09:17:57 ntpd[34358]: файл секундного прыжка ('/usr/share/zoneinfo/leap-seconds.list'): загружен, истекает=2020-12-28T00:00:00Z последний=2017-01-01T00:00:00Z ofs=37
10 Июл 09:17:57 ntpd[34358]: Слушать и игнорировать на 0 v6wildcard [::]:123
10 Июл 09:17:57 ntpd[34358]: Слушать и игнорировать на 1 v4wildcard 0.0.0.0:123
10 Июл 09:17:57 ntpd[34358]: Слушать нормально на 2 lo 127.0.0.1:123
10 Июл 09:17:57 ntpd[34358]: Слушать нормально на 3 enp6s0 10.0.0.18:123
10 Июл 09:17:57 ntpd[34358]: Слушать нормально на 4 lo [::1]:123
10 Июл 09:17:57 ntpd[34358]: Слушать нормально на 5 enp6s0 [fe80::7285:c2ff:fe65:9f19%3]:123
10 Июл 09:17:57 ntpd[34358]: Слушание на сокете маршрутизации на fd #22 для обновлений интерфейса
10 Июл 09:17:58 ntpd[34358]: Запрос сервера пула 209.50.63.74
10 Июл 09:17:59 ntpd[34358]: Запрос сервера пула 4.53.160.75
10 Июл 09:18:00 ntpd[34358]: Запрос сервера пула 69.89.207.199
10 Июл 09:18:00 ntpd[34358]: Запрос сервера пула 72.30.35.88
10 Июл 09:18:01 ntpd[34358]: Запрос сервера пула 173.0.48.220
10 Июл 09:18:01 ntpd[34358]: Запрос сервера пула 162.159.200.1
10 Июл 09:18:01 ntpd[34358]: Запрос сервера пула 108.61.73.243
10 Июл 09:18:02 ntpd[34358]: Запрос сервера пула 208.79.89.249
10 Июл 09:18:02 ntpd[34358]: Запрос сервера пула 208.67.75.242
10 Июл 09:18:02 ntpd[34358]: Запрос сервера пула 91.189.94.4
10 Июл 09:18:03 ntpd[34358]: Запрос сервера пула 91.189.89.198
10 Июл 09:18:03 ntpd[34358]: Запрос сервера пула 67.217.112.181
10 Июл 09:18:04 ntpd[34358]: Запрос сервера пула 91.189.89.199
10 Июл 09:18:04 ntpd[34358]: Запрос сервера пула 64.225.34.103
10 Июл 09:18:05 ntpd[34358]: Запрос сервера пула 91.189.91.157
10 Июл 09:18:06 ntpd[34358]: Запрос сервера пула 2001:67c:1560:8003::c8
10 Июл 09:18:06 ntpd[34358]: ntpd: отставание времени +0.001834 с
ntpd: отставание времени +0.001834с
admin@virtland:~$ sudo service ntp start
admin@virtland:~$ sudo timedatectl
Локальное время: Пт 2020-07-10 09:18:21 EDT
Всемирное время: Пт 2020-07-10 13:18:21 UTC
Время RTC: Пт 2020-07-10 13:18:21
Часовой пояс: Америка/Нью_Йорк (EDT, -0400)
Системные часы синхронизированы: нет
NTP служба: н/д
RTC в локальном TZ: нет
admin@virtland:~$
Я подумал, что, может быть, мне нужно использовать какие-то более современные инструкции, поэтому я попробовал это:
https://linuxconfig.org/how-to-sync-time-on-ubuntu-20-04-focal-fossa-linux
admin@virtland:~$ timedatectl set-ntp off
Не удалось установить ntp: NTP не поддерживается
admin@virtland:~$ timedatectl set-ntp on
Не удалось установить ntp: NTP не поддерживается
Затем я попробовал это, из другого потока:
admin@virtland:~$ sudo systemctl status systemd-timesyncd.service
[sudo] пароль для admin:
● systemd-timesyncd.service
Загружен: замаскирован (Причина: Единица systemd-timesyncd.service замаскирована.)
Активен: неактивен (мертв)
Я никогда не трогал timesyncd.conf, но он полностью закомментирован:
cat /etc/systemd/timesyncd.conf
# Этот файл является частью systemd.
#
# systemd является бесплатным программным обеспечением; вы можете переиздавать его и/или изменять
# в соответствии с условиями Общей лицензии на меньшее публичное использование, как опубликовано
# Фондом свободного программного обеспечения; либо версии 2.1 Лицензии или
# (по вашему выбору) любой более поздней версии.
#
# Записи в этом файле показывают значения по умолчанию времени компиляции.
# Вы можете изменить настройки, отредактировав этот файл.
# Значения по умолчанию можно восстановить, просто удалив этот файл.
#
# См. timesyncd.conf(5) для подробностей.
[Time]
#NTP=
#FallbackNTP=ntp.ubuntu.com
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048
Я снова проверил timedatectl, и теперь он включен, но все равно не использует NTP. Я понимаю, что NTP более точен, и это может быть важно в некоторых ситуациях. Не уверен, нужно ли виртуализации с pci passthrough крайне точное время или нет.
Из других материалов, которые я читал, я подумал, что, возможно, NTP конфликтует с timesyncd.
Поэтому удалите ntp на время:
sudo systemctl stop ntp
sudo apt-get purge ntp
Но после удаления ntp, NTP показывал, что он активен!
admin@virtland:~$ timedatectl
Локальное время: Пт 2020-07-10 09:34:52 EDT
Всемирное время: Пт 2020-07-10 13:34:52 UTC
Время RTC: Пт 2020-07-10 13:34:52
Часовой пояс: Америка/Нью_Йорк (EDT, -0400)
Системные часы синхронизированы: да
NTP служба: активна
RTC в локальном TZ: нет
Я схожу с ума? NTP все еще здесь как-то? Нет.
admin@virtland:~$ sudo systemctl start ntp
Не удалось запустить ntp.service: Единица ntp.service не найдена.
Извините за то, что не спросил более целенаправленный вопрос, но что, черт возьми, здесь происходит?
Я совершенно потерян. Также я позже отредактирую этот пост и сделаю заметку о том, решило ли удаление NTP (и таким образом его активация?!) проблемы со стабильностью, которые привели меня в эту кроличью нору.
Редактировать: Следующее, что я сделал, отключил ntp на timesyncd и (пере)установил NTP, как описано здесь. https://www.digitalocean.com/community/tutorials/how-to-set-up-time-synchronization-on-ubuntu-18-04
Это привело к:
admin@virtland:~$ ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
0.us.pool.ntp.o .POOL. 16 p - 64 0 0.000 0.000 0.000
1.us.pool.ntp.o .POOL. 16 p - 64 0 0.000 0.000 0.000
2.us.pool.ntp.o .POOL. 16 p - 64 0 0.000 0.000 0.000
3.us.pool.ntp.o .POOL. 16 p - 64 0 0.000 0.000 0.000
0.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
1.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
2.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
3.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
ntp.ubuntu.com .POOL. 16 p - 64 0 0.000 0.000 0.000
admin@virtland:~$ timedatectl
Локальное время: Пт 2020-07-10 10:35:39 EDT
Всемирное время: Пт 2020-07-10 14:35:39 UTC
Время RTC: Пт 2020-07-10 14:35:40
Часовой пояс: Америка/Нью_Йорк (EDT, -0400)
Системные часы синхронизированы: нет
NTP служба: н/д
RTC в локальном TZ: нет
admin@virtland:~$ systemctl status systemd-timesyncd
● systemd-timesyncd.service
Загружен: замаскирован (Причина: Единица systemd-timesyncd.service замаскирована.)
Активен: неактивен (мертв)
admin@virtland:~$ nano /etc/ntp.conf
admin@virtland:~$ systemctl статус systemd-timesyncd
● systemd-timesyncd.service
Загружен: замаскирован (Причина: Единица systemd-timesyncd.service замаскирована.)
Активен: неактивен (мертв)
admin@virtland:~$ ntpstat
несинхронизировано
опрос сервера каждые 8 секунд
Я отменил эти изменения, как рекомендовал Майкл Хэмптон:
Означает ли это, что это работает?
boss@virtland:~$ sudo systemctl stop ntp
Не удалось остановить ntp.service: Единица ntp.service не загружена.
boss@virtland:~$ sudo timedatectl set-ntp yes
boss@virtland:~$ sudo timedatectl set-ntp on
boss@virtland:~$ ntpq -p
bash: /usr/bin/ntpq: Нет такого файла или каталога
boss@virtland:~$ systemctl статус systemd-timesyncd
● systemd-timesyncd.service - Синхронизация сетевого времени
Загружен: загружен (/lib/systemd/system/systemd-timesyncd.service; включен; >
Активен: активен (работает) с Пт 2020-07-10 10:49:18 EDT; 50 секунд назад
Документы: man:systemd-timesyncd.service(8)
Главный PID: 108365 (systemd-timesyn)
Статус: "Первоначальная синхронизация с сервером времени 91.189.94.4:123 (ntp.ubu>
Задачи: 2 (лимит: 154317)
Память: 1.8М
CGroup: /system.slice/systemd-timesyncd.service
└─108365 /lib/systemd/systemd-timesyncd
10 Июл 10:49:17 virtland systemd[1]: Запуск синхронизации сетевого времени...
10 Июл 10:49:18 virtland systemd[1]: Запущена синхронизация сетевого времени.
10 Июл 10:49:18 virtland systemd-timesyncd[108365]: Первоначальная синхронизация т>
строки 1-14/14 (КОНЕЦ)
timedatectl
Локальное время: Пт 2020-07-10 10:52:56 EDT
Всемирное время: Пт 2020-07-10 14:52:56 UTC
Время RTC: Пт 2020-07-10 14:52:56
Часовой пояс: Америка/Нью_Йорк (EDT, -0400)
Системные часы синхронизированы: да
NTP служба: активна
RTC в локальном TZ: нет
Так что, я думаю, это работает. Поскольку отказы, которые заставили меня следовать этим путем, все еще происходят, я предполагаю, что время не было проблемой.
Команда timedatectl
сообщает, что NTP используется, когда либо chronyd
, либо systemd-timesyncd
включены и работают. Оба из этих легковесных NTP клиентов подходят для большинства серверов и рабочих станций. Она не распознает службу ntpd
, которая предназначена как для клиента NTP, так и для сервера, и теперь, когда у нас есть специализированное программное обеспечение для клиента NTP, она больше не предпочитается для систем, которые не нуждаются в том, чтобы передавать NTP другим системам или использовать специализированное оборудование, такое как GPS, для получения времени.
Просто чтобы прояснить различия между тремя наиболее часто используемыми демонами:
timesyncd и ntpd являются обеими службами синхронизации времени, доступными в Linux, но они значительно различаются по функциональности, сложность и сферам использования. Вот разбивка ключевых различий и информации о том, что может быть лучше в зависимости от ваших потребностей.
1. Цель и области использования
– systemd-timesyncd:
- Цель: Простой клиент NTP, встроенный в systemd для основной синхронизации времени с удаленными NTP серверами.
- Случай использования: Подходит для настольных пользователей, легковесных серверов или сред, где вам нужна надежная, точная синхронизация времени без необходимости в передовых функциях, таких как пользовательские конфигурации времени.
– ntpd (демон сетевого времени):
- Цель: Полнофункциональная, самостоятельная реализация NTP, которая предоставляет как синхронизацию времени, так и расширенные параметры конфигурации.
- Случай использования: Идеально подходит для окружающей среды, где требуются высокая точность, пользовательские конфигурации или возможности сервера времени, например в дата-центрах, корпоративных системах или сетях с сложными требованиями к временным меткам.
2. Функциональность и особенности
– systemd-timesyncd:
- Простой клиент NTP.
- Использует меньше системных ресурсов и имеет низкие накладные расходы.
- В основном синхронизирует время с внешними NTP серверами, не предоставляя время другим системам.
- Не поддерживает передовые функции NTP, такие как аппаратная временная метка, точное отслеживание времени или уровни страта локальных часов.
– ntpd:
- Полная реализация NTP, поддерживающая как клиентские, так и серверные режимы.
- Может служить в качестве сервера NTP, распределяя время другим системам.
- Поддерживает сложные конфигурации (например, пиринг между NTP серверами, несколько источников времени, дисциплина часов, обработка секундных прыжков).
- Обеспечивает более высокую точность, включая точность на микросекунды, в зависимости от оборудования и условий сети.
- Может быть настроен для использования аппаратных эталонных часов (например, GPS-приемников) для высокоточной отслеживания времени.
3. Простота использования и конфигурации
– systemd-timesyncd:
- Прост в использовании и настройке, требует минимальной настройки.
- Конфигурация осуществляется через простой файл /etc/systemd/timesyncd.conf или автоматически через DHCP.
- Подходит для пользователей, которым просто нужна точная синхронизация времени без углубления в подробные конфигурации.
– ntpd:
- Сложнее настраивать и конфигурировать из-за своего обширного набора функций.
- Требует ручной настройки NTP серверов в /etc/ntp.conf.
- Предлагает более детальное управление синхронизацией времени, но может требовать глубоких знаний протоколов NTP и принципов синхронизации времени.
4. Использование ресурсов
– systemd-timesyncd:
- Легковесный, с очень низкими накладными расходами по ЦП и памяти.
- Разработан для систем, где критична минимальная потребность в ресурсах (например, встроенные устройства, легковесные серверы).
– ntpd:
- Потребляет больше ресурсов, хотя все еще вполне низок для большинства современных систем.
- Может быть избыточным для систем, которым нужна только базовая синхронизация времени, учитывая его сложность.
5. Точность
– systemd-timesyncd:
- Обеспечивает приемлемую точность для большинства не критичных случаев использования (в пределах миллисекунд или десятков миллисекунд).
– ntpd:
- Предлагает более высокую точность (до микросекунд, в зависимости от оборудования и сети).
- Лучше подходит для приложений, где точно соблюдение времени имеет значение, например в финансовых системах, научных экспериментах или системах реального времени.
6. Что лучше?
– systemd-timesyncd лучше, если:
- Вам нужна простая, надежная синхронизация времени без каких-либо сложных требований.
- Вы запускаете легковесный сервер, настольный компьютер или встроенное устройство, где важна эффективность использования ресурсов.
- Вы предпочитаете простоту и минимальную конфигурацию.
- Требования к точности не являются крайне высокими (приемлемы миллисекунды).
– ntpd лучше, если:
- Вам требуется синхронизация времени с высокой точностью (точность на микросекунды или лучше).
- Вам нужно настроить сервер времени для передачи времени другим устройствам в сети.
- Вам нужны расширенные функции NTP, такие как аппаратная синхронизация часов, несколько источников времени или режим пиринга.
- Вы работаете в окружении с строгими требованиями к учету времени, например, в научных исследованиях, финансах или системах реального времени.
7. Альтернативы:
chrony: Еще один инструмент синхронизации времени, который часто считается средним вариантом между timesyncd и ntpd. Он легковесный, как timesyncd, но предлагает много передовых функций и более высокую точность, благодаря чему стал популярным выбором для серверных окружений.
Резюме:
-
timesyncd: Идеален для большинства типичных пользователей и серверов, где простота и легковесная функциональность являются ключевыми.
-
ntpd: Идеален для сложных окружений, где необходима высокая точность учета времени, настройки сервера и расширенные функции NTP.
-
chrony: Сильная альтернатива, которая сочетает простоту timesyncd с некоторыми передовыми функциями ntpd.
Ответ или решение
Проблемы синхронизации времени в Ubuntu 20.04 на KVM-хосте: детальный анализ
Введение
Синхронизация времени является важным аспектом работы серверов и виртуальных машин, особенно когда речь идет о системах виртуализации, таких как KVM. В данной статье мы обсудим проблемы с синхронизацией времени, которые возникли в вашей системе Lubuntu 20.04, и предложим возможные решения.
Исходные данные проблемы
Вы отметили, что при проверке статуса синхронизации времени с помощью команды timedatectl
отображалось следующее:
System clock synchronized: no
NTP service: n/a
Это говорит о том, что время в системе не синхронизировано, и служба NTP неактивна.
Причины проблем
-
Маскирование службы systemd-timesyncd:
При выполнении командыsystemctl status systemd-timesyncd.service
, вы обнаружили, что эта служба замаскирована:Loaded: masked (Reason: Unit systemd-timesyncd.service is masked.) Active: inactive (dead)
Это означает, что служба не может быть запущена. Маскирование службы может произойти по различным причинам, включая конфликты с другими службами, такими как ntpd.
-
Конфликты между ntpd и timesyncd:
Были попытки запустить ntpd, который является полнофункциональным NTP-сервером и клиентом, однако, в вашей системе скорее всего используются systemd-timesyncd или chrony как более легковесные и современные альтернативы. Вы можете столкнуться с конфликтами, если одновременно попытаетесь использовать несколько NTP-сервисов.
Рекомендации по исправлению
-
Деактивация и маскирование ntpd:
Если вы хотите использоватьsystemd-timesyncd
, рекомендуется удалить ntpd:sudo systemctl stop ntp sudo apt-get purge ntp
-
Разморозка и активация systemd-timesyncd:
Чтобы снять маску сsystemd-timesyncd
и активировать его:sudo systemctl unmask systemd-timesyncd.service sudo systemctl enable systemd-timesyncd.service sudo systemctl start systemd-timesyncd.service
-
Настройка конфигурации:
Вам необходимо отредактировать файл конфигурацииtimesyncd
для указания NTP-серверов.sudo nano /etc/systemd/timesyncd.conf
Измените настройки, добавив реальные NTP-серверы:
[Time] NTP=ntp.ubuntu.com
-
Проверка статуса:
После внесения изменений стоит проверить статус:timedatectl
Ожидается, что
System clock synchronized
теперь будет отображаться какyes
, и служба NTP будет активна.
Использование альтернативных решений
Если ваши требования к синхронизации времени более строгие, рассмотрите возможность использования chrony
. Эта программа сочетает в себе легкость работы timesyncd
с некоторыми продвинутыми функциями, которые предлагает ntpd
.
Другие полезные команды
Для диагностики состояния синхронизации времени вы можете использовать:
ntpq -p
Это покажет состояние подключения к NTP-серверам и уровень синхронизации.
Заключение
Проблемы с синхронизацией времени могут быть вызваны рядом факторов, включая конфликты между службами. Важно правильно настраивать и контролировать используемые службы NTP. Надеюсь, предложенные рекомендации помогут вам восстановить корректную синхронизацию времени в вашей системе Lubuntu 20.04 и устранить потенциальные сбои в работе виртуальных машин.