Time (Русский)

From ParabolaWiki
Jump to: navigation, search


i18n


Dansk – Deutsch – English – Esperanto – Español – Euskera – Français – Galego – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Polski – Português – Română – Slovenský – Suomi – Svenska – Türkçe – Česky – Ελληνικά – Български – Русский – Српски – Українська – العربيّة – עברית – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어

Summary
Статья расказывает о методах конфигурирования и поддержания точного системного времени в Parabola Gnu/Linux.
Related
Network Time Protocol
rc.conf
Этот раздел или статья устарели(This article or section is out of date).
Пожалуйста помогите улучшить вики обновляя и исправляя статьи.


Эта статья поможет вам настроить и использовать аппаратное и системное время. Аппаратные часы (hardware clock) также называют Real Time Clock (RTC) или CMOS clock, а системные, т.е. часы операционной системы - system clock.

Для ознакомления с методами установки точного системного времени, ознакомьтесь со статьей NTP.

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 и настройте время на всех ваших часах.

Note: Если вы всегда выключаете свой компьютер чаще чем раз в сутки, погрешность, записанная в /var/lib/hwclock/adjtime не будет перепроверяться hwclock. Кварцевый генератор, конечно, надежная штука, но со временем параметры его могут меняться (например батарейка CMOS разряжается). Возможно, стоит иногда выключать компьютер реже чем раз в сутки. Тогда можно быть уверенным, что значение погрешности, по которому корректируются часы, будет самым новым, а часы самыми точными.

Системное время рассчитывается ядром, начиная с полуночи первого января 1st 1970 по стандарту UTC. Начальное значение системных часов рассчитываается исходя из показаний часов аппаратных (после корректировки погрешности и пересчета на местный часовой пояс UTC) при включении и идут независимо от аппаратных. Ядро Linux отслеживает системные часы, подсчитывая прерывания таймера. Как и аппаратные, они не являются идеально точными. Иногда системные часы могут потерять точность, если ядро сбрасывает прерывания. Но показания системынх часов можно сделать точными с помощью NTP. NTP будет регулировать частоту прерываний и количество тактов в секунду для уменьшения дрейфа системных часов. Эти значения могут быть скорректированы с помощью приложения adjtimex из AUR (От Archlinux).

Note: Если вы не используете NTP, то ваши аппаратные часы будут более точными, чем системные. Соответственно описанный механизм корректировки будет только вносить дополнительную погрешность и его лучше отключить. Для этого можно закомментировать строку hwclock --systohc в файле {/etc/rc.d/hwclock. Теперь при выключении компьютера система не будет изменять значение ваших аппаратных часов.

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 по крайней мере решило проблему со спешащими часами. Тем не менее, любые запросы к аппаратным часам проходят один раз из семи. Если найдется решение проблемы, пожалуйста, свяжитесь с первым автором перевода этой статьи.

7 Resources