Каталог
|
Настройка системного времени и его синхронизация в OC GNU/Linux : ARM / x86-x642021-07-22 Все статьи →Одним из важнейших пунктов в работе любой ОС является системное время и OC GNU/Linux не исключение. Это особенно актуально для серверов, ведь на нем завязаны почти все службы. На обычных материнских платах (стандарт: PC-совместимые) установлена микросхема BIOS в которой хранятся и настраиваются параметры касающиеся аппаратной части всей системы в целом, в том числе данные о времени и дате. В качестве автономного питания для микросхемы используется батарея. Таким образом, даже при полном отсутствии основного питания все параметры остаются неизменными. Изначально при загрузке OC считывает данные даты и времени именно из BIOS, а уже после загрузки синхронизируется с серверами (если данная опция настроена). Ситуация с одноплатными компьютерами, как правило, иная. На них отсутствует микросхема BIOS и автономное питание для нее. Поэтому в OC GNU/Linux на одноплатных компьютерах зачастую (в базовой конфигурации) за корректные параметры времени отвечает fake-hwclock. Данная программа завершает свою работу позже всех служб при отключении/перезагрузке OC и запускается раньше всех служб при ее загрузке. Последнее зарегистрированное время записывается в файл и потом из него же считывается. При таком подходе OC имеет общее представление о времени и ни о какой большой точности речь идти не может. С другой стороны это гарантия что все изменения в системе не останутся в прошедшем или будущем времени. Всю конфигурацию я буду производить на Orange Pi 3 и OC Armbian GNU/Linux 21.02.3 (Debian-Buster) с ядром Linux 5.4.65-sunxi64. Примечание: Независимо от архитектуры, аппаратной платформы и версии ОС смысл всей конфигурации останется прежним. Первоначально проверяем состояние fake-hwclock. root@orangepi-3:~# systemctl list-units --type service | grep fake-hwclock
Примечание: Приведена только нужная строка. Возможно что в ОС уже имеется какой-то сервис по синхронизации времени. Например, в OC GNU/Linux Debian 5.9.15-1-bpo10+1 aarch64 и в OC GNU/Linux на х86-х64 как правило (в базовой конфигурации) за синхронизацию времени отвечает systemd-timesyncd.service. В редких случаях возможен вариант и другого предустановленного сервиса. Поэтому, в только что установленной системе стоит проверить весь список systemctl > systemctl list-units --type service на наличие сервисов синхронизации времени. После чего решить какой сервис вы будете использовать. Теперь проверяем текущее системное время. Данное действие можно выполнить с помощью одной из двух программ: timedatectl или date. root@orangepi-3:~# timedatectl status
или root@orangepi-3:~# date +%B-%A-%F-%T-%p-%z
Проверка проводилась в 10:21:55 (21.06.2021) по киевскому времени. Мы видим что все три параметра времени (Local time, Universal time, RTC time) имеют одинаковое значение - 07:21:55. Единственный правильный параметр это дата. Примечание: В строке System clock synchronized: вместо no может быть yes. Такое значение будет истинным если в системе уже имеется какой-то сервис по синхронизации времени. Если в реальности сервис отсутствует, то значение yes в данный момент рассматривается как no. Причину такого явления в данной статье я объяснять не стану, поскольку это относится уже к сборке пакетов и ОС в целом, а не к настройке синхронизации. Устанавливаем правильное значение времени с помощью timedatectl. Для наглядности укажем параметр времени с датой. root@orangepi-3:~# timedatectl set-time "2021-06-21 10:25:00" Повторно проверяем текущее системное время. root@orangepi-3:~# timedatectl status
или root@orangepi-3:~# date +%B-%A-%F-%T-%p-%z
После того как время установлено корректно, приступим к инициализации часового пояса. В моем случае это Europe/Kiev. Что бы вывести полный список доступных часовых поясов используйте timedatectl list-timezones или воспользуйтесь сортировкой grep для вывода только конкретно нужного. Но прежде чем приступить к инициализации, следует обновить пакет tzdata. root@orangepi-3:~# apt-get update root@orangepi-3:~# apt-get upgrade tzdata
Примечание: после обновления пакета tzdata продолжать обновление остальных пакетов необязательно! Поэтому на вопрос Do you want to continue? [Y/n] нажмите n или y в зависимости от вашего выбора. Проверяем версию установленного пакета. root@orangepi-3:~# dpkg -s tzdata | grep Version:
Отсортировываем нужный часовой пояс из списка. root@orangepi-3:~# timedatectl list-timezones | grep Kiev
Указываем корректный часовой пояс. root@orangepi-3:~# timedatectl set-timezone Europe/Kiev Проверяем настройки часового пояса. root@orangepi-3:~# timedatectl status
Теперь локальное время с датой Local time: Mon 2021-06-21 10:31:27 EEST и часовой пояс Time zone: Europe/Kiev (EEST, +0300) установлены корректно. Основная настройка системного времени окончена, осталось только настроить службу синхронизации. В OC GNU/Linux есть два самых распространенных варианта решения данной задачи, по средствам systemd-timesyncd.service или ntp.service. Рассмотрим каждый из них по отдельности. Вариант 1. - systemd-timesyncd.service В основном на данный момент этот вариант для большинства OC GNU/Linux ARM имеет один неприятный нюанс. Изначально данный пакет отсутствует в системе. root@orangepi-3:~# dpkg -s systemd-timesyncd
Смотрим сведения о данном пакете. root@orangepi-3:~# apt-cache show systemd-timesyncd
Нас интересует строка основных зависимостей Depends: libc6 (>= 2.17), systemd (= 247.3-5~bpo10+2), adduser, а конкретно версия systemd (=247.3-5~bpo10+2). Проверяем текущую версию systemd. root@orangepi-3:~# dpkg -s systemd | grep Version:
Как вы видите установленная версия далеко не самая свежая, но если попробовать обновить systemd, то окажется что это самый последний релиз в репозиториях на данный момент. Естественно без обновления systemd до требуемой версии вы не сможете установить systemd-timesyncd. Конечно вариант обойти данное недоразумение существует и заключается он в том, что потребуется работа с исходником и последующей его сборкой под данный дистрибутив. Возможно в будущем разработчики дистрибутивов в которых наблюдается данная ситуация исправят ее. Я еще не проверял насколько стабильно работает версия 247.3-5~bpo10+2 в данном дистрибутиве. По этой причине дальнейшее рассмотрение первого варианта закончим и переходим к второму. Например, в OC GNU/Linux Debian 5.9.15-1-bpo10+1 aarch64 systemd-timesyncd работает стабильно. Вариант 2. - ntp.service Так же как и systemd-timesyncd изначально ntp отсутствует в системе. root@orangepi-3:~# dpkg -s ntp
Устанавливаем ntp после чего запускаем и добавляем в автозагрузку. root@orangepi-3:~# apt-get install ntp root@orangepi-3:~# systemctl start ntp root@orangepi-3:~# systemctl enable ntp
Сразу же после запуска должна произойти синхронизация, но для уверенности перезагружаем систему. root@orangepi-3:~# reboot После перезагрузки проверяем статус синхронизации и самой службы ntp в целом.. root@orangepi-3:~# timedatectl status
Синхронизация активна (System clock synchronized: yes). Примечание: после выполнения всех вышеперечисленных настроек значение yes строки System clock synchronized: соответствует действительности. root@orangepi-3:~# systemctl status ntp - ntp.service - Network Time Service Как вы можете видеть ntp загружено (Loaded: loaded (/lib/systemd/system/ntp.service; enabled; vendor preset: enabled)) и активно указанное время (Active: active (running) since Mon 2021-06-21 XX:XX:XX EEST; Xmin Xs ago). Примечание: возможно что лог ntp может вывести следующие строки:
На это можно не обращать внимание. Данные ошибки вызваны изменениями, внесенными в обнаружение фиктивных пакетов NTP. Они по-прежнему регистрируются даже с использованием последней версии NTP, но связь больше не теряется, и сообщения можно игнорировать. Для наглядности выводим мониторинг ntp. На этом настройка системного времени и его синхронизации завершена. P.S. Сервис ntp не только синхронизирует время, но и может быть настроен как сервер времени. Но рассмотрение данного вопроса выходит за рамки этой статьи. :)
Благодарим Вас за обращение! Ваш отзыв появится после модерации администратором.
Пока нет отзывов на эту статью.
|