Необходимо установить часы CMOS на местное время (из-за двойной загрузки DOS), timedatectl или hwclock, похоже, продолжают устанавливать часы CMOS (аппаратные) на UTC!

Это выходит за рамки сумасшедший.

У меня система с двойной загрузкой, одна ОС - FreeDOS (которая НЕ имеет возможности работать с часами CMOS, отличными от местного времени), а другая - Linux Mint 17.

Способ использования этой системы. заключается в том, что мы сидим в Linux и ждем «триггера» (программного триггера) для начала тестирования. Тестирование проводится под FreeDOS, поэтому сценарии настраивают все в Linux, затем настраивают систему на загрузку FreeDOS и запускают тест, а затем перезагружаются обратно в Linux. Это происходит от одного раза в несколько минут до одного раза в несколько дней.

Мы заметили, что иногда часы ПОЛНОСТЬЮ сбиваются. Похоже, что мы попадаем в цикл «установить часы CMOS на UTC; загрузить часы CMOS, предполагая, что это местное время (бац, на 8 часов впереди); установить часы CMOS на UTC (добавив ЕЩЕ 8 часов !!!); повторить'.

Абсолютное требование (ну, абсолютно желаемое), чтобы часы были правильными в обеих системах, независимо от того, как часто или редко мы загружаемся с одной на другую.

Я настроил NTP на стороне Linux, и обычно он работает нормально.

Судя по всему, я нахожусь в 11-минутном режиме.

Вот что происходит после установки часов hw (CMOS) на местное время, ожидания 11 минут и повторного просмотра:

tjr2pc1 ~ # date ;timedatectl status ; sleep 660 ; date;timedatectl status
Thu Feb  4 12:03:33 MST 2016
      Local time: Thu 2016-02-04 12:03:33 MST
  Universal time: Thu 2016-02-04 19:03:33 UTC
        RTC time: **Thu 2016-02-04 12:03:33**
        Timezone: America/Phoenix (MST, -0700)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: yes
      DST active: n/a

Warning: The RTC is configured to maintain time in the local time zone.     This
         mode is not fully supported and will create various problems     with time
     zone changes and daylight saving adjustments. If at all possible use
     RTC in UTC, by calling 'timedatectl set-local-rtc 0'.
Thu Feb  4 12:14:33 MST 2016
      Local time: Thu 2016-02-04 12:14:33 MST
  Universal time: Thu 2016-02-04 19:14:33 UTC
        RTC time: **Thu 2016-02-04 19:14:33**
        Timezone: America/Phoenix (MST, -0700)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: yes
      DST active: n/a
-----------------

Обратите внимание, что часы CMOS внезапно показывают время в формате UTC! **** ПОЖАЛУЙСТА, ОСТАНОВИТЕ ***

Я даже пытался установить fake-hwclock, это все еще происходит. Я даже переименовал / sbin / hwclock в / sbin / real_hwclock, пытаясь заставить ядро ​​просто оставить взорванную CMOS в покое.

На обзор: цель - заставить время работать как в FreeDOS, так и в Linux.

Меня не волнует, означает ли это, что Linux устанавливает часы CMOS на UTC, а затем восстанавливает их по местному времени после выключения, или я могу каким-то образом заставить Linux установить его на местное время вместо UTC. Или, если я могу заставить Linux полностью игнорировать часы CMOS (вот почему я установил fake_hwclock - я надеялся, что это сработает. Нет). Мне все равно, КАК, мне просто нужно, чтобы часы CMOS были установлены на правильное местное время после завершения работы Linux (чтобы FreeDOS получала правильное время). (По причинам, слишком сложным, чтобы беспокоить вас всех, невозможно запустить сеть под FreeDOS, поэтому я могу использовать ntp или скрипт или что-то еще, чтобы автоматически правильно установить время там. устанавливать время и дату под FreeDOS - это глупо, но я собираюсь сделать это, чтобы перестать бороться с глупостью)

Я сказал timedatectl , что часы CMOS показывают местное время.

/ etc / default / rcS говорит:

 UTC=no

И все же каждые 11 минут кто-то (я полагаю, ядро) устанавливает часы CMOS на время UTC! Хотя я прямо сказал, что это должно быть местное время.

И, да, я перезагружался (несколько раз) с тех пор, как в rcS задано значение UTC = no. Есть ли где-нибудь еще один файл конфигурации, чтобы заставить ядро ​​либо оставить часы CMOS в покое, либо принудительно установить их на местное время?

Обновление: я нашел кое-что интересное, w.r.t. «11-минутный режим», включая вопрос о Reddit, который говорит именно об этом, и обвиняет ntp и adjtimex (внутренние по отношению к ядру, а не исполняемый файл). Пока нет решения, и я собираюсь просто написать задание cron, которое запускается каждую минуту и ​​переводит часы hw обратно на местное время. (Я ненавижу пользоваться такой кувалдой, но мне действительно нужно время, чтобы быть точным - как можно скорее, так как наши часы полностью сбились с пути (время одного компьютера отстает более чем на 12 часов (странно), один - на 7 часов быстрее, а один впереди почти полтора дня! Только с пятницы по понедельник!)

0
30.01.2019, 23:51
2 ответа

Хорошо, во-первых, я не понимаю, почему меня заминусовали за этот вопрос.

В любом случае я, наконец, спустя 3 года нашел решение:

Убедитесь, что /etc/adjtime имеет значение «LOCAL», а не «UTC» (, в моем случае это была последняя строка файла ).

Убедитесь, что в файле /etc/hardwareclock есть «местное время» (В моем случае это был новый файл и в нем была только эта строка ).

Выполнение описанных выше действий, по-видимому, отключило флаг «синхронизация NTP» в ядре, который не позволяет ядру записывать время UTC в часы CMOS после завершения работы. Поэтому весьма вероятно, что ядро ​​не будет сохранять системное время в часах CMOS (. Я не проверял ). Однако два вышеуказанных изменения отключили режим «11 -минут».

Вот вывод timedatectl:

rusty@quigon2 ~ $ timedatectl
Local time: Wed 2019-01-30 14:18:53 MST
Universal time: Wed 2019-01-30 21:18:53 UTC
RTC time: Wed 2019-01-30 14:18:50
Time zone: America/Phoenix (MST, -0700)
Network time on: yes
NTP synchronized: no
RTC in local TZ: yes

Warning: The system is configured to read the RTC time in the local time zone.
...blah blah...

(Обратите внимание на информацию о «синхронизированном NTP» выше ).

Если вы хотите синхронизироваться с NTP (через ntpd или rdate или что-то еще ), это другая история. (Я использовал задание cron для rdate и hwclock --systohc каждые 30 минут...)

Существует вероятность того, что запуск timedatectl с некоторыми специфическими параметрами может привести к указанным выше изменениям в указанных выше файлах, я не проверял это.

2
28.01.2020, 04:53

В моем случае я решил использовать UTC в hwclock, чтобы избежать проблем с переходом на летнее время.

При загрузке работает настройка системного времени из hwclock, если в /etc/default/rcSесть строка UTC=yes.

Но работа hwclock --systohcзависит от различных настроек.
Использование переменной среды TZ=UTC0кажется плохим выбором, потому что она переопределяет настройку /etc/localtime, а dateработает также в UTC.

Использование hwclock --systohc --utcбудет работать для установки вручную, но не работает, когда время устанавливается с помощью ntp и автоматически сохраняется в hwclock.
Кроме того, команда reboot, похоже, записывает hwclock с неправильным часовым поясом.

Мой /etc/default/ntpdateсодержит

# Configuration script used by ntpdate-sync script

NTPSERVERS="de.pool.ntp.org"

# Set to "yes" to write time to hardware clock on success
UPDATE_HWCLOCK="yes"

Но вы можете изменить/создать /etc/adjtimeна

0 0 0
0
UTC

Это влияет только на hwclockи заставляет его сохранять/считывать время в формате UTC.

Кстати. Для некоторых систем (, таких как Yocto/busybox ), файл может храниться в другом месте, в моем случае в/var/lib/hwclock/adjtime

0
19.10.2021, 08:55

Теги

Похожие вопросы