
Я хотел бы использовать общий ntpd
демон, чтобы проверить, ведется ли время виртуальной машиной или нет, не позволяя ей фактическирегулироватьчасы.
Я запускаю Solaris 11.4 (стандартный образ Oracle для Intel) внутри VirtualBox на системе macOS и не могу правильно синхронизировать время. Мне пришло в голову, что виртуальная машина может использовать VirtualBox Guest Additions для этого (я не знаю, как это работает) и что я могу нарушить отсчет времени, работая ntpd
в гостевой ОС.
Чтобы проверить это, я подумал, что мне нужно настроить ntpd
виртуальную машину Solaris, чтобымониторнесколько общедоступных серверов времени, но каким-то образом не дать им изменить локальные часы. Таким образом, я мог посмотреть, как loopstats
и peerstats
логи выглядели с течением времени, чтобы увидеть, действительно ли локальные часы показывают правильное время.
Проблема в том, что я не могу найти никаких подсказок о том, как прекратить ntpd
корректировку местных часов.
Я хотел сделать это и в прошлом на системах, где я использую openntpd
(из OpenBSD) для фактического отсчета времени. ntpd
Тогда демон мог бы просто сидеть в фоновом режиме и следить, не вмешиваясь. Но я не смог найти способа сделать это и тогда.
решение1
нтпд
Понимая, что выдолжениспользуйте ntpd, насколько мне известно, единственные варианты:
отключить нтп
Как видно наntp.conf
страница руководстваесть возможность отключить ntpОбратная связь, или, говоря простым языком: удалить возможность расчета поправок времени между серверами времени и локальными часами. Строка, ntp.conf
необходимая для активации такой опции:
disable ntp
Примечание: при использовании этой опции время, которое ntpd может предоставить другим системам, запрашивающим ссылку на время, может быть неправильным/отсутствовать. Кажется разумным использовать строку для deny
отклонения всех запросов на время от других систем, если только вы не хотите отслеживать отклонение времени от внешней системы (используйте deny и разрешайте IP внешней системы).
Примечание:Мне не совсем ясно, что системные часы фактически оставлены "свободными" ntpd. Однако это документированная опция, так что если ntpd не соответствует тому, что документировано, то это ошибка.
минсэне
minsane minsane
Это минимальное количество кандидатов, доступных алгоритму выбора часов, чтобы создать один или несколько истинных химеров для алгоритма кластеризации. Если доступно меньше этого числа,часы недисциплинированны и им позволено бежать свободно.
Это делается путем установки строки (в ntp.conf
) следующего вида:
tos minsane 100
Или какое-то другое большое число (большее, чем количество доступных или используемых серверов).
Примечание: мне не ясно, сбрасывается ли значение дрейфа ядра на 0, чтобы избежать медленного смещения часов. Может быть разумно дополнительно установить , disable kernel
чтобы отключить функции дисциплины ядра.
Связанный
ntpd-qn
Когда ntpd
сервер работает, ntpq -pn
он может сообщать, насколько хорошо сервер ntpd выполняет свою работу по синхронизации системных часов. Это альтернативный способ регистрации разницы во времени.
ntpdate -q
Пакет ntpdate
(помеченный как устаревший) можно использовать для проверки разницы во времени с помощью:
ntpdate -q 'pool.ntp.org' # marked as deprecated.
Используйте ntpdate -qu 'pool.ntp.org'
, чтобы для запуска команды не требовались привилегии root ( -u
означает «использовать непривилегированные сетевые порты», однако исполняемый файл должен быть доступен пользователю).
снтп
Существует простая программа для запроса (не изменяйте ее, если не используется опция -s или -S):
sntp pool.ntp.org
дата
Программа rdate
умеет показывать удаленное время (и местное время):
rdate -np pool.ntp.org; date
Где -n
означает: использовать SNTP (RFC 2030) вместо протокола времени RFC 868 (по умолчанию); и толькоРаспечататьрезультат без внесения каких-либо фактических изменений.
Однако эта программа ограничена разрешением целых секунд (не долей). И онане имеет опций в солярисе
хрони
Заменяющий пакет ntp (chrony) способен выполнять проверку разницы во времени без установки системных часов:
chronyd -Q 'pool pool.ntp.org iburst'
Я полагаю, что все это методы определения (без изменения) разницы во времени между временем NTP в Интернете и системным временем.
решение2
Сомневаюсь, что это возможно из ntpd
коробки:
- В своей основе
ntpd
не имеет «третьих» часов.(Где первые два - этосистемные часы и монотонные часы). - Функционально
ntpd
написано вносить коррективы не только в текущее время,но и настраивать параметры, управляющие скоростью работы системных часов. Подразумевается, что это написано для отслеживания эффекта этих корректировок.
Если объединить эти два фактора, то крайне маловероятно, что у ntpd есть режим, который может правильно поддерживать значения этих параметров без внесения корректировок в режиме реального времени.ачасы, где единственные доступные ему часы — это системные часы.
Из вашего вопроса не ясно, что вам на самом деле нужно ntpd
. Подойдет любой [S]NTP-клиент.
Если вы освоили немного кода, то вы, возможно, сможете написать что-то, что будет опрашивать серверы без повторной калибровки системных часов.
Например, есть библиотека NTP для Python, которая называетсянтплиб. Скрипт для вывода смещения в 60-секундном опросе может выглядеть следующим образом:
import ntplib
import sys
import time
def main(*args):
ntp_client = ntplib.NTPClient()
while True:
for server in args:
try:
response = ntp_client.request(server, version=3)
print(response.offset)
time.sleep(60)
except ntplib.NTPException:
print("query failed: {}".format(server))
if __name__ == "__main__":
if len(sys.argv) == 1:
# Do not use this server for commertial software without permission
main('pool.ntp.org')
else:
main(sys.argv[1:])
Поместите это в файл ntp_check.py
. Убедитесь, что у вас установлен ntplib с pip install ntplib
или специфичным для дистрибутивов ( apt-get install python3-ntplib
). Затем вызовите его с помощью:
python3 ntp_check.py