пятница, 30 июня 2023 г.

Переключение синхронизации времени с systemd на ntp

При необходимости отказа от синхронизации с серверами времени через systemd выполните в терминале команды (даются в одну строку, чтобы выполнялись пакетным образом).

sudo apt install -y ntp && sudo systemctl restart ntp

В процессе выполнения указанной выше составной команды пакет systemd-timesyncd удаляется автоматически.

Проверить автоматический запуск службы ntp можно командой

  systemctl is-enabled ntp  

Ответ enabled является положительным. 

Указания серверов времени для синхронизации задаются в файле  /etc/ntp.conf  
В Linux Mint по умолчанию указаны следующие:

pool 0.ubuntu.pool.ntp.org iburst
pool 1.ubuntu.pool.ntp.org iburst
pool 2.ubuntu.pool.ntp.org iburst
pool 3.ubuntu.pool.ntp.org iburst

# Use Ubuntu's ntp server as a fallback.
pool ntp.ubuntu.com

Первые 4 строки указывают на пул серверов времени ubuntu.pool.ntp.org. При невозможности синхронизировать время ни с одним из указанных адресов синхронизация будет осуществлена с пулом серверов pool ntp.ubuntu.com

Эти значения можно изменить, указав предпочитаемые вами пулы адресов или конкретные серверы времени. Вы можете воспользоваться информацией с этого ресурса.
 
Бывает, что провайдер Интернет (как в моём случае) автоматически перенаправляет запросы с пулу ubuntu.pool.ntp.org на региональные серверы точного времени. В таком случае производить изменения в файле  /etc/ntp.conf  нет необходимости. Сведения об этом можно получить по запросу в терминале

  ntpq -p , например:


В пользу того, что провайдер перенаправляет запросы к пулу ubuntu.pool.ntp.org на региональные серверы точного времени говорят малые значения в столбце delay (время ответа). Либо информацию об этом можно получить по наименованию серверов времени в столбце remote.

Пояснения по приведенному выше рисунку:

remote – имя удаленного NTP-сервера. Если дать запрос ntpq -p -n , то вместо имён серверов будут отображены их IP-адреса.

refid – указывает, откуда каждый сервер получает время в данный момент. Это может быть имя хоста или что-то вроде .GPS., указывающее на источник глобальной системы позиционирования (Global Positioning System).

st – Stratum (уровень) это число от 1 до 16, указывающее на точность сервера. Единица означает максимальную точность, 16 означает, что сервер недоступен. 

poll – интервал между опросами (в секундах). Значение будет изменяться между минимальной и максимальной частотой опросов. В начале интервал будет маленьким, чтобы синхронизация происходила быстро. После того как часы синхронизируются, интервал начинает увеличиваться, чтобы уменьшить трафик и нагрузку на популярные сервера времени.

reach – восьмеричное представление массива из 8 бит, отражающего результаты последних восьми попыток соединения с сервером. Бит выставлен, если удаленный сервер ответил.

delay – количество времени (в секундах) необходимого для получения ответа на запрос "который час? ".

offset – наиболее важное поле. Разница между временем локального и удаленного серверов. В ходе синхронизации это значение должно понижаться (приближаться к нулю), указывая на то, что часы локальной машины идут все точнее.

jitter – дисперсия, то есть мера статистических отклонений от значения смещения (поле offset) по нескольким успешным парам запрос-ответ. Меньшее значение дисперсии предпочтительнее, поскольку позволяет точнее синхронизировать время.

Значение знаков перед именами серверов:

x – фальшивый источник по алгоритму пересечения;
. – исключён из списка кандидатов из-за большого расстояния;
- – удалено из списка кандидатов алгоритмом кластеризации;
+ – входит в конечный список кандидатов;
# – выбран для синхронизации, но есть 6 лучших кандидатов;
* – выбран для синхронизации;
o – выбран для синхронизации, но используется PPS;
пробел – слишком большой уровень, цикл или явная ошибка.

Служба ntpd сама отсеивает источники времени слишком выбивающиеся "за рамки разумного". Через некоторое время после запуска ntpd выберет наиболее достоверные источники данных и будет синхронизироваться с ними. Список эталонных NTP серверов регулярно пересматривается службой. Например, по этой ссылке указаны сведения по непонятному узлу hbars.site (см. рисунок).

Своего рода платой за переход синхронизации времени c systemd на ntp будет являться некоторый рост (до нескольких секунд) времени загрузки вашей системы. Лично у меня он составил порядка 3 секунд. Увидеть конкретное значение можно при выводе результата запроса в терминале

  systemd-analyze blame  (смотрите строку, содержащую ntp).

В связи с этим возникает вопрос: а зачем может возникнуть необходимость переключения с systemd-timesync на ntp?

Как указано в комментариях 31 и 33 на unix.stackexchange.com, далее – цитирование:

Systemd-timesyncd – это клиент SNTP, который менее точен, чем NTP. Читатели не должны вводить себя в заблуждение, думая, что systemd-timesyncd – это легковесный NTP-клиент.

systemd-timesyncd не дисциплинирует часы: часы не обучаются и не компенсируются, а внутренний дрейф часов с течением времени не уменьшается. У него есть рудиментарная логика для настройки интервала опроса, но без дисциплинирования хост навсегда останется с неравномерным временем, поскольку systemd-timesyncd подталкивает или тянет с любым интервалом, который, по его мнению, требуется для краткосрочного дрейфа. Он также не может оценить качество удаленного источника времени. Вы вряд ли получите точность намного выше 100 мс. Этого достаточно для простых устройств конечного пользователя, таких как ноутбуки, но это определенно может вызвать проблемы для распределенных систем, которым нужна более высокая точность времени.

Соответственно, если в Cinnamon вы делали лаунчер (кнопку запуска) для проверки состояния синхронизации времени (подробности), то строку

Exec=sh -c 'timedatectl timesync-status | cat - /dev/tty'

необходимо изменить на

Exec=sh -c 'ntpq -p | cat - /dev/tty'

Комментариев нет:

Отправить комментарий