Автор Тема: Сбивается время в Linux и Windows [РЕШЕНО]  (Прочитано 14597 раз)

Оффлайн ivm

  • Ветеран
  • *****
  • Сообщений: 3073
  • Что бы ни случилось, всё будет хорошо!
Сбивается время в Linux и Windows [РЕШЕНО]
« : 26 Сентября 2019, 14:52:45 »
Если на компьютере установлены две системы Linux и Windows, иногда возникает сбой в отображении времени на несколько часов назад или вперёд.
Всё это происходит из-за различий формата хранения времени в этих операционных системах и будет происходить при каждой перезагрузке, сколько бы вы ни устанавливали правильное время. В компьютере есть два вида часов. Аппаратные - идут всегда, даже когда компьютер выключен, и программные часы, встроенные в ядро. Когда компьютер включается, значение аппаратных часов записывается в программные и в дальнейшем операционная система берёт время оттуда. Но Windows и Linux работают по-разному с этими двумя часами.

Есть два способа работы:
  • UTC - и аппаратные, и программные часы идут по Гринвичу. То есть часы дают универсальное время на нулевом часовом поясе. Например, если у вас часовой пояс GMT+3, Киев, то часы будут отставать на три часа. А уже пользователи локально прибавляют к этому времени поправку на часовой пояс, например, плюс +3. Каждый пользователь добавляет нужную ему поправку. Так делается на серверах, чтобы каждый пользователь мог получить правильное для своего часового пояса время.
  • localtime - в этом варианте программные часы тоже идут по Гринвичу, но аппаратные часы идут по времени локального часового пояса. Для пользователя разницы никакой нет, все равно нужно добавлять поправку на свой часовой пояс. Но при загрузке и синхронизации времени Windows вычитает из аппаратного времени 3 часа (или другую поправку на часовой пояс), чтобы программное время было верным.
Но эту проблему можно решить и даже несколькими способами.
Настройка Windows для работы по UTC
Итак, если у вас сбивается время windows и linux при переключении между операционными системами, лучшим способом будет заставить Windows работать по более правильному и логичному формату. Для этого достаточно добавить один ключ реестра. Вы можете сделать это с помощью одной команды в консоли. Чтобы открыть консоль в Windows 10 проведите мышь в левый нижний угол, затем нажмите правую кнопку. В контекстном меню выберите Командная строка (администратор):
Дальше наберите команду для 32 битных систем:
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
А для 64-битных нужно использовать тип значения  REG_QWORD:
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_QWORD /d 1Почти готово, но служба времени Windows независимо от этой настройки будет писать время в местном формате при обновлении его через интернет, поэтому удобно эту службу отключить. Для этого выполните:sc config w32time start= disabledЕсли вы хотите вернуть всё как было, то сделать это можно проще простого. Сначала возвращаем ключ реестра в правильное положение:
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 0И запускаем обратно службу синхронизации:sc config w32time start= demand
Настройка Linux для работы localtime
По умолчанию Linux использует формат хранения времени UTC, но если Linux сбивает время Windows, вы можете очень просто заставить систему хранить в аппаратном таймере местное время. Во всех дистрибутивах, использующих Systemd, в том числе в Ubuntu 16.04 и новее для этого достаточно выполнить команду:sudo timedatectl set-local-rtc 1 --adjust-system-clockЧтобы посмотреть текущее состояние аппаратных и программных часов, выполните: sudo timedatectlГотово, теперь вы можете перезапустить компьютер и запустить Windows, чтобы убедиться, что время не сбивается при перезагрузке.
В более ранних системах Ubuntu, вам нужно отредактировать файл /etc/default/rcS и заменить UTC=yes на UTC=no. Вы можете сделать это командой:sudo sed -i 's/UTC=yes/UTC=no/' /etc/default/rcSВернуть всё в прежнее состояние можно с помощью одной команды:sudo timedatectl set-local-rtc 0
А в ранних дистрибутивах Ubuntu:sudo sed -i 's/UTC=no/UTC=yes/' /etc/default/rcSИсточник

PS. C моей точки зрения, более правильно устанавливать Windows в виртуальную машину на Linux. В этом случае винда ведёт себя более стабильно. Правда, для этого нужно очень хорошо владеть настройками ВМ.