Time (Русский)
Summary |
---|
Статья расказывает о методах конфигурирования и поддержания точного системного времени в Parabola Gnu/Linux. |
Related |
Network Time Protocol |
rc.conf |
Эта статья поможет вам настроить и использовать аппаратное и системное время. Аппаратные часы (hardware clock) также называют Real Time Clock (RTC) или CMOS clock, а системные, т.е. часы операционной системы - system clock.
Для ознакомления с методами установки точного системного времени, ознакомьтесь со статьей NTP.
Contents
1 Введение
Аппаратные часы встроены в ваш компьютер, предоставляют информацию о годе, месяце, дне, часе, минуте и секунде и работают, даже когда он выключен. Они могут вести отсчет местному (локальному) времени или времени в стандарте UTC. Подробнее на Википедии. Фактически, местное время - это то время, которое показывают ваши обычные часы (к примеру, любимые часы вашей бабушки), а время UTC, не вдаваясь в подробности, едино для всех жителей земного шара, точкой отсчета для которого является Гринвичский меридиан. По отношению ко времени UTC, ваше локальное время может отличатся на несколько часов. Поскольку вы читаете именно русскоязычный вариант статьи, то, скорее всего, ваше локальное время больше от трех до двенадцати часов по сравнению с UTC.
Все наиболее распространенные системы могут использовать локальное или UTС-время. По умолчанию, UNIX-подобные операционные системы используют UTС. В случае если у вас на компьютере установлено несколько операционных систем, лучше всего будет использовать в них UTC чтобы избежать конфликтов.
В UNIX-подобных операционных системах аппаратные часы могут быть проверены и сконфигурированы командой hwclock.
Кроме аппаратных часов, Linux также имеет системные (программные) часы, которые работают независимо. Системные часы отслеживают время,часовой пояс и контролируют, используется ли в вашей локали (локаль, как вы помните, настраивалась при установке системы в фале /etc/rc.conf) летнее время. Демон /etc/rc.d/hwclock предоставляет работу с командой hwclock и устанавливает системное время по аппаратным часам при загрузке операционной системы и наоборот, корректирует аппаратное время при завершении ее работы (ведь при своей работе операционная система может узнать более точное время, например от NTP-сервера). Таким образом, пользователи должны включать демон 'hwclock' в массив DAEMONS в /etc/rc.conf, чтобы это происходило автоматически. В качестве альтернативы этому демону, пользователи часто используют NTP для синхронизации времени с т.н. серверами времени в интернете.
2 Стандарты времени
Все наиболее распространенные операционные системы могут использовать локальное или UTС-время. По умолчанию, UNIX-подобные операционные системы используют UTС, в то время как другие могут использовать локальное время. В случае если у вас на компьютере установлено несколько операционных систем, лучше всего будет использовать в них UTC чтобы избежать конфликтов. GNU/Linux будет переходить на летнее время и обратно автоматически, только в том случае, если вы используете UTC, независимо от того, летнее или зимнее время сейчас. Если вы используете местное время, GNU/Linux не будет осуществлять переход, предполагая, что у вас несколько операционных систем и другая операционная система сделает это за нее. Если это не так, то вам придется переводить часы вручную.
Вы можете установить стандарт временного отсчета средствами командной строки. Для начала проверьте, какой стандарт вы выбрали, когда устанавливали систему:
$ grep ^HARDWARECLOCK /etc/rc.conf
Чтобы изменить стандарт временного отсчета на локальное время, используйте:
# hwclock --localtime
Или установить стандарт UTC:
# hwclock --utc
Не забудьте указать выбранные стандарты в файле rc.conf, они используются демоном hwclock.
HARDWARECLOCK="localtime"
или
HARDWARECLOCK="UTC"
После этих операций скорее всего придется обновить ваши аппаратные и системные часы. См. ниже #Установка времени.
3 Часовой пояс
Удостоверьтесь что вы правильно указали ваш часовой пояс в /etc/rc.conf, это значения используется не только для часов, но и для других программ. Чтобы проверить значение, введите:
$ grep ^TIMEZONE /etc/rc.conf
Вы можете просмотреть полный список часовых поясов в файле /usr/share/zoneinfo/ и выберите крупный город в одном с вами часовом поясе. Если вы плохо разбираетесь в географии, то вы всегда сможете посетить страницу в Википедии, на которой приведен полный список часовых поясов. Кроме указания ближайшего города, вы также можете выбрать часовой пояс непосредственно. Пример:
TIMEZONE="Asia/Yerevan"
Выбранный часовой пояс будет подхвачен системой после перезагрузки. Для того, чтобы изменить часовой пояс немедленно, в должны создать ссылку или скопировать соответствующий файл в /etc/localtime:
# cp /usr/share/zoneinfo/America/Chicago /etc/localtime
Далее вам потребуется установить точное время на аппаратных часах.
4 Установка времени
Аппаратные часы могут быть установлены по системным. Посмотрите, какое время установлено на ваших аппаратных часах:
$ hwclock --show
И системных часах:
$ date
Чтобы установить аппаратные часы непосредственно:
# hwclock --set --date "MM/DD/YYYY hh:mm:ss"
Установить системные часы:
# date MMDDhhmmYYYY
Аппаратные часы можно установить по системным и наоборот:
# hwclock --systohc # hwclock --hctosys
5 Погрешность часов
Нет ничего идеального. В том числе и часов. Время на любых часах хоть немного но отличается от реального. Одними из наиболее точных считаются атомные часы. Кварцевые часы, используемые в компьютерах, также не являются абсолютно точными, зато имеют относительно постоянную погрешность.
Каждый раз перед выключением демон hwclock сравнивает аппаратное и системное время (последнее принимается за наиболее точное) и вычисляет погрешность аппаратных кварцевых часов в день. Вычисленное значение погрешности записывается в файл /var/lib/hwclock/adjtime. Если hwclock не использовался больше суток, то он, на всякий случай, вычисляет новое значение погрешности.
Специальный скрипт корректирует аппаратные часы в соответствии с вычисленной погрешностью каждый час. Если вы видите, что ваши аппаратные часы идут все более и более неверно, то, вероятнее всего, в файле /var/lib/hwclock/adjtime записано неверное значение погрешности.
Это происходит если на аппаратных часах время изначально было установлено неверно или ваш временной стандарт (см. выше) не такой как у другой операционной системы, используемой на компьютере. Чтобы исправить это, удалите /var/lib/hwclock/adjtime и настройте время на всех ваших часах.
Системное время рассчитывается ядром, начиная с полуночи первого января 1st 1970 по стандарту UTC. Начальное значение системных часов рассчитываается исходя из показаний часов аппаратных (после корректировки погрешности и пересчета на местный часовой пояс UTC) при включении и идут независимо от аппаратных. Ядро Linux отслеживает системные часы, подсчитывая прерывания таймера. Как и аппаратные, они не являются идеально точными. Иногда системные часы могут потерять точность, если ядро сбрасывает прерывания. Но показания системынх часов можно сделать точными с помощью NTP. NTP будет регулировать частоту прерываний и количество тактов в секунду для уменьшения дрейфа системных часов. Эти значения могут быть скорректированы с помощью приложения adjtimex из AUR (От Archlinux).
6 Возможные проблемы
На некоторых ноутбуках (HP Compaq 6715s) была выявлена 1, 2 проблема. При этом системные часы спешили на два часа. После ввода команды:
$ hwclock --debug
Появляется следующий вывод консоли:
hwclock из util-linux 2.19.1 Используется /dev interface to clock. Дата последней корректировки отклонения - 1311726134 секунд после 1969 Дата последней калибровки - 1310756173 секунд после 1969 Аппаратные часы выставлены по местному времени Подразумевается, что аппаратные часы выставлены по местному времени. Ожидается тиканье часов... Истекло время ожидания тиканья часов select() в /dev/rtc # Собственно, строка с ошибкой ...synchronization failed
Подобная ошибка возникает при загрузке и выключении системы (ядро не может прочитать/изменить аппаратное время), а также при последующих операциях по конфигурированию времени. Вероятно, проблема в драйвере, включенном в ядро по умолчанию. Некоторые пользователи других дистрибутивов решали проблему использованием другого драйвера или добавлением ключей --directisa в скрипт демона.
Добавление демона hwclock в rc.conf по крайней мере решило проблему со спешащими часами. Тем не менее, любые запросы к аппаратным часам проходят один раз из семи. Если найдется решение проблемы, пожалуйста, свяжитесь с первым автором перевода этой статьи.