Системное время и синхронизация [108.1]

Рейтинг: 71.7% · 16 голосов
Полный курс LPIC-1 (экзамены 101-500 и 102-500): архитектура, загрузка, пакеты, команды и текст, ФС и права, шелл-скрипты, пользователи, сервисы, сеть, безопасность. Debian и RHEL.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Системное время и синхронизация [108.1]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-1 и как устроен путь администратора
  2. Железо, устройства и модули ядра [101.1]
  3. Загрузка системы: от BIOS до systemd [101.2]
  4. systemd, цели и уровни выполнения [101.3]
  5. План разметки диска и swap [102.1]
  6. Загрузчик GRUB 2 [102.2]
  7. Разделяемые библиотеки [102.3]
  8. Управление пакетами в Debian: dpkg и apt [102.4]
  9. Управление пакетами RPM, DNF и Zypper [102.5]
  10. Linux как гость виртуализации [102.6]
  11. Командная строка Bash [103.1]
  12. Обработка текста фильтрами [103.2]
  13. Базовое управление файлами [103.3]
  14. Потоки, конвейеры и перенаправление [103.4]
  15. Процессы: создание, мониторинг, сигналы [103.5]
  16. Приоритеты выполнения процессов [103.6]
  17. Регулярные выражения [103.7]
  18. Редактор vi и vim [103.8]
  19. Разделы и создание файловых систем [104.1]
  20. Целостность и обслуживание ФС [104.2]
  21. Монтирование файловых систем [104.3]
  22. Урок 21. Права доступа и владение: rwx, chmod, umask и специальные биты
  23. Жёсткие и символические ссылки
  24. FHS и поиск файлов в системе [104.7]
  25. Окружение и кастомизация оболочки [105.1]
  26. Урок 25. Написание простых bash-скриптов [105.2]
  27. Графика, рабочие столы и доступность
  28. Учётные записи пользователей и групп
  29. Автоматизация задач: cron, at, таймеры [107.2]
  30. Локализация и интернационализация [107.3]
  31. Системное время и синхронизация [108.1] (вы здесь)
  32. Системное логирование [108.2]
  33. Основы почтового агента (MTA) [108.3]
  34. Печать и CUPS [108.4]
  35. Основы интернет-протоколов [109.1]
  36. Постоянная конфигурация сети [109.2]
  37. Диагностика сети [109.3]
  38. DNS на стороне клиента [109.4]
  39. Задачи администрирования безопасности [110.1]
  40. Настройка безопасности хоста [110.2]
  41. Шифрование данных: SSH и GnuPG [110.3]
Урок 30. Системное время и синхронизация [108.1]

Точное время - это не косметика, а фундамент. По расхождению часов разваливаются логи (события из разных машин не выстраиваются в линию), отваливается TLS (сертификат valid-from/valid-to проверяется по системным часам), ломается Kerberos (билет считается просроченным при дрейфе больше пяти минут), путается cron и сборка пакетов. В этом уроке разберём два набора часов в машине, как ими управлять через date, hwclock и timedatectl, что такое UTC и часовые пояса, и как держать время точным по NTP через chrony и systemd-timesyncd.

Изображение

Как это работает

В компьютере живут двое часов. Аппаратные (RTC, real-time clock, они же CMOS/hardware clock) тикают от батарейки даже при выключенном питании, но они грубые и дрейфуют. Системные (software clock) ведёт ядро: при загрузке оно один раз читает RTC, а дальше отсчитывает время само, инкрементируя счётчик по таймерным прерываниям. Все программы видят именно системные часы.

Ключевой принцип: внутри Linux время живёт в UTC как число секунд от эпохи (1 января 1970). Часовой пояс - это всего лишь правило перевода UTC в локальное представление при выводе. Поэтому грамотная настройка - хранить RTC в UTC, а пояс задавать отдельно файлом /etc/localtime (симлинк на зону из /usr/share/zoneinfo). Это снимает проблемы при переходе на летнее время и при работе нескольких ОС на одной машине.

Часы дрейфуют: кварц в любой машине идёт не идеально, набегают секунды в сутки. NTP (Network Time Protocol) лечит это, опрашивая удалённые серверы, вычисляя смещение (offset) и сетевую задержку, после чего плавно подстраивает скорость хода системных часов (slewing) вместо грубого скачка. Скачок назад опасен: монотонность времени нарушается, и логика, завязанная на возрастание времени, ломается. Поэтому демон не переводит стрелки рывком, а ускоряет или замедляет ход, пока offset не сойдётся к нулю.

Пулы серверов (pool.ntp.org и vendor-пулы вроде 2.debian.pool.ntp.org) - это DNS-имена, за которыми крутится много реальных серверов. Демон берёт несколько источников, отсеивает вруны (falsetickers) и считает по согласному большинству. Это и отказоустойчивость, и защита от одного сбойного сервера.

В 2026 году дефолт разный: на серверах RHEL/Fedora и в Ubuntu Server стоит chrony - полноценный NTP-клиент и сервер, хорошо переживающий ноутбучные засыпания и плавающую сеть. На десктопном Ubuntu и в минимальных Debian-системах за время отвечает лёгкий systemd-timesyncd - это только клиент SNTP, сервером он быть не умеет. Старый демон ntpd (reference implementation) считается наследием; новые ставят chrony.

Команды и примеры

Текущее состояние и системные часы:

Код: Выделить всё

date                      # локальное время
date -u                   # то же в UTC
date +%s                  # секунды от эпохи (Unix time)
date '+%Y-%m-%d %H:%M:%S' # свой формат вывода
date -d '2026-06-13 +3 days'  # арифметика дат
Главный современный инструмент - timedatectl (часть systemd, одинаков в обоих семействах):

Код: Выделить всё

timedatectl                          # обзор: время, RTC, пояс, статус NTP
timedatectl list-timezones           # список зон
sudo timedatectl set-timezone Europe/Moscow
sudo timedatectl set-ntp true        # включить сетевую синхронизацию
sudo timedatectl set-time '2026-06-13 12:00:00'  # ручная установка (только при выключенном NTP)
Аппаратные часы напрямую (требует root, обходит timedatectl):

Код: Выделить всё

sudo hwclock --show               # прочитать RTC
sudo hwclock --systohc            # записать системное время в RTC
sudo hwclock --hctosys            # наоборот, прочитать RTC в систему
sudo hwclock --utc --systohc      # явно зафиксировать, что RTC хранится в UTC
Установка пакетов NTP-демона различается:

Код: Выделить всё

# Debian / Ubuntu
sudo apt install chrony
# RHEL 10 / Fedora 41+
sudo dnf install chrony
Конфиг chrony: /etc/chrony/chrony.conf (Debian/Ubuntu) или /etc/chrony.conf (RHEL/Fedora). Источники задают так:

Код: Выделить всё

pool 2.pool.ntp.org iburst        # пул, iburst ускоряет первую синхронизацию
server ntp1.example.com iburst    # конкретный сервер
driftfile /var/lib/chrony/drift   # запоминает скорость дрейфа между перезагрузками
makestep 1.0 3                    # разрешить скачок, если offset большой, в первые 3 замера
Управление и диагностика через chronyc:

Код: Выделить всё

chronyc tracking      # текущий эталон, offset, дрейф в ppm, точность
chronyc sources -v    # список источников с расшифровкой колонок
chronyc sourcestats   # статистика по каждому источнику
sudo chronyc makestep # принудительно подстроить рывком сейчас
В выводе chronyc sources символ '*' помечает выбранный источник (current best), '+' - приемлемые кандидаты, '?' - недоступные, 'x' - отброшенный как falseticker.

Если используется systemd-timesyncd (там, где он дефолт):

Код: Выделить всё

timedatectl timesync-status    # offset, сервер, частота опроса
systemctl status systemd-timesyncd
# серверы правятся в /etc/systemd/timesyncd.conf, секция [Time]
Частые грабли
  • Запущены сразу два демона (chrony и systemd-timesyncd) - они дерутся за часы. Один должен быть выключен: при установке chrony timesyncd обычно деактивируется автоматически, но проверьте systemctl is-active обоих.
  • timedatectl set-time молча игнорируется (или ругается), когда включён NTP. Сначала set-ntp false, потом ручная установка.
  • RTC хранится в localtime (наследие двойной загрузки с Windows). Тогда после смены пояса время уезжает. Признак - строка RTC in local TZ: yes в timedatectl. Лечится переводом RTC в UTC.
  • Часы синхронизированы, но в браузере и логах время не то - перепутан часовой пояс. UTC верное, представление кривое. Проверяйте /etc/localtime и set-timezone.
  • NTP заблокирован файрволом: исходящий UDP/123 закрыт, синхронизации нет, а ошибки молчаливые. Смотрите chronyc tracking - там будет Leap status: Not synchronised.
  • В контейнере не правьте время - оно общее с ядром хоста. Синхронизируйте часы на хосте, контейнеры наследуют.
  • Виртуалки после долгого засыпания или миграции прыгают во времени. chrony это переживает лучше ntpd, но проверьте, что гостевой агент не дерётся с NTP за управление часами.
Мини-лаба
  • Выполните timedatectl и зафиксируйте текущий пояс, статус NTP и режим хранения RTC.
  • Установите chrony пакетным менеджером своего дистрибутива и убедитесь, что systemd-timesyncd деактивировался (systemctl is-active systemd-timesyncd).
  • В конфиге chrony добавьте региональный пул с iburst, перезапустите сервис.
  • Через chronyc sources -v найдите источник, помеченный '*', и через chronyc tracking прочитайте текущий offset и дрейф в ppm.
  • Смените пояс на другой (например, Asia/Yekaterinburg), убедитесь, что date изменился, а date -u остался прежним. Верните свой пояс.
  • Прочитайте RTC через sudo hwclock --show, сравните с системным временем, затем синхронизируйте RTC командой sudo hwclock --systohc.
Контрольные вопросы
  • Чем отличаются аппаратные (RTC) и системные часы и в какой момент ядро их связывает?
  • Почему RTC рекомендуется хранить в UTC, а не в локальном времени, и где задаётся часовой пояс?
  • Какой командой включить и проверить сетевую синхронизацию, не вспоминая имя демона?
  • Что показывают chronyc tracking и chronyc sources, и что означают символы '*', '+', 'x' в списке источников?
  • Чем systemd-timesyncd принципиально ограничен по сравнению с chrony?
  • Почему демон обычно подстраивает ход часов плавно (slewing), а не переводит их рывком, и когда рывок всё же допустим?
👍7 ❤️4 🔥 😄 🤔1
Аватара пользователя
vue5
Сообщения: 1
Зарегистрирован: 12 май 2026, 22:19

Re: Системное время и синхронизация [108.1]

Сообщение vue5 »

А если ноут несколько дней спал, chrony сам подтянет время или нужно chronyc makestep руками? У меня после suspend offset скачет на минуты.
👍1 ❤️ 🔥1 😄 🤔
Аватара пользователя
ladylover
Сообщения: 1
Зарегистрирован: 18 май 2026, 19:08

Re: Системное время и синхронизация [108.1]

Сообщение ladylover »

Поймал грабли с RTC in local TZ после дуалбута с виндой - логи в journalctl ехали на 3 часа, пока не перевёл RTC в UTC.
👍1 ❤️1 🔥 😄 🤔
Ответить
← Предыдущая глава
Локализация и интернационализация [107.3]
Следующая глава →
Системное логирование [108.2]

Все главы курса «LPIC-1: администратор Linux (101 + 102)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-1: администратор Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей