LinuxRuLinux без лишней теории
Двойная загрузка

Если сбивается время при переходе между Linux и Windows: два способа исправить

Редакция LinuxRu6 мин чтенияСоветы

Время сбивается при переходе между Linux и Windows, потому что Linux хранит в аппаратных часах UTC, а Windows местное время. Исправляется одной командой: либо ключ RealTimeIsUniversal в реестре Windows, либо timedatectl set-local-rtc 1 в Linux. Ниже оба способа, сравнение, синхронизация и откат.

Если сбивается время при переходе между Linux и Windows: два способа исправить
Фото: Sizyffe, CC BY 4.0, Wikimedia Commons
Содержание
  1. Причина
  2. Проверка
  3. Windows в UTC
  4. Linux в local
  5. Что выбрать
  6. Синхронизация
  7. Не помогло
  8. Особые случаи
  9. Откат
  10. Частые вопросы

Почему после Windows часы в Linux врут на несколько часов

На материнской плате есть аппаратные часы (RTC), которые идут от батарейки и работают при выключенном компьютере. Они хранят только цифры: дату и время, без часового пояса. Как эти цифры понимать, решает операционная система.

  • Linux по умолчанию считает, что в RTC записано время UTC, и сам прибавляет смещение пояса.
  • Windows по умолчанию считает, что там местное время.

Пример для Москвы (UTC+3). Linux синхронизировался по сети и записал в RTC 09:00 UTC, на экране у вас 12:00. Загружаетесь в Windows: она читает 09:00 как местное и показывает на три часа меньше. Синхронизировалась, записала в RTC 12:00 местного. Возвращаетесь в Linux, он видит 12:00 UTC и показывает 15:00. Отсюда характерный сдвиг ровно на величину вашего пояса: 3 часа для Москвы, 5 для Екатеринбурга, 7 для Новосибирска.

Лечится это одним действием: обе системы должны трактовать RTC одинаково. Выбрать можно любой из двух вариантов, но не оба сразу.

Как узнать, в каком режиме работают часы

# сводка по времени, поясу, RTC и синхронизации
timedatectl

# прочитать аппаратные часы напрямую
sudo hwclock --show

# третья строка файла: UTC или LOCAL
cat /etc/adjtime

В выводе timedatectl смотрите на строки:

  • RTC time показывает, что сейчас записано в аппаратных часах;
  • RTC in local TZ: no означает режим UTC (стандарт Linux), yes местное время;
  • System clock synchronized: yes и NTP service: active значат, что сетевая синхронизация работает.

Если RTC отличается от местного времени ровно на смещение пояса и RTC in local TZ: no, а Windows при этом не настроена, причина найдена.

Способ 1: перевести Windows на UTC

Этот вариант рекомендуют ArchWiki и документация Ubuntu: Linux остаётся в стандартном режиме, меняется одна запись в реестре Windows. Работает в Windows 10 и 11.

  1. Загрузитесь в Windows и откройте "Терминал (администратор)" или командную строку от имени администратора.
  2. Выполните команду:
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_QWORD /f
  1. Перезагрузитесь в Linux, дождитесь синхронизации по сети, затем снова в Windows и проверьте часы.

В инструкциях встречаются оба типа значения, REG_QWORD и REG_DWORD. В современных 64-битных Windows работают оба, главное, чтобы значение было 1. Если Windows после этого всё равно показывает неправильное время, в "Параметры", "Время и язык", "Дата и время" нажмите "Синхронизировать сейчас" или выполните в терминале администратора w32tm /resync.

Перед правкой реестра создайте точку восстановления Windows. Если машина с BitLocker, держите под рукой ключ восстановления: изменение реестра само по себе его не запрашивает, но любые эксперименты рядом с загрузкой лучше делать с ключом наготове. Подробнее о соседстве систем в инструкции как установить Linux рядом с Windows 11.

Способ 2: заставить Linux хранить местное время

Подходит, если нет прав администратора в Windows (рабочий ноутбук) или не хочется трогать реестр. В любом дистрибутиве с systemd:

sudo timedatectl set-local-rtc 1 --adjust-system-clock
timedatectl

Ключ --adjust-system-clock пересчитывает системное время из RTC с новой интерпретацией. После команды timedatectl покажет предупреждение о том, что режим местного времени в RTC не полностью поддерживается и может давать сбои при смене пояса и перевода часов. В России сезонного перевода нет с 2014 года, так что основная проблема отпадает, но предупреждение будет висеть всегда.

На системах без systemd или для разового исправления можно использовать hwclock: команда sudo hwclock --systohc --localtime запишет текущее системное время в RTC как местное и обновит /etc/adjtime.

Какой способ выбрать: сравнение

КритерийWindows в UTCLinux в местном времени
Где меняетсяреестр Windowsодна команда в Linux
Нужны права администратора Windowsданет
Поведение при переводе часовкорректноевозможен сдвиг на час, если обе системы переводят часы
Совместимость с несколькими Linux на одном дискевсе работают по умолчаниюкаждый Linux нужно перенастроить
Поездки со сменой поясабез проблемRTC придётся пересчитывать
Как откатитьудалить ключ RealTimeIsUniversaltimedatectl set-local-rtc 0

Если сомневаетесь, выбирайте первый способ. Второй хорош как быстрая заплатка на чужом или корпоративном компьютере.

Сетевая синхронизация времени в Linux и Windows

После выбора режима обе системы должны брать точное время из сети, иначе часы будут уплывать на секунды и минуты в месяц.

# включить синхронизацию NTP
sudo timedatectl set-ntp true

# Ubuntu, Debian, Arch: подробности systemd-timesyncd
timedatectl timesync-status

# Fedora: там вместо timesyncd работает chrony
chronyc tracking
chronyc sources

Если NTP service показывает inactive, проверьте саму службу: systemctl status systemd-timesyncd или systemctl status chronyd. Как включать и перезапускать службы, описано в статье про systemctl. Задать свой сервер для timesyncd можно в /etc/systemd/timesyncd.conf, строка NTP=ru.pool.ntp.org, затем sudo systemctl restart systemd-timesyncd.

В Windows синхронизацией занимается служба "Служба времени Windows" (w32time). Если она отключена, включите автоматическую установку времени в параметрах.

Время всё равно сбивается: что ещё проверить

  • Неверный часовой пояс. Сдвиг на час или два при правильном RTC обычно означает, что в Linux выбран не тот пояс. Проверьте timedatectl, список поясов выводит timedatectl list-timezones, установка: sudo timedatectl set-timezone Europe/Moscow.
  • Время сбрасывается на 2000 или 2010 год после выключения из розетки. Села батарейка CR2032 на материнской плате. Это аппаратная проблема, программно её не обойти, только заменить батарейку.
  • Сбой после быстрого запуска Windows. Режим "Быстрый запуск" на самом деле гибернация ядра, Windows при старте может не перечитать RTC. Отключите его в параметрах электропитания, это заодно убережёт общий NTFS-раздел.
  • Третья система. macOS на Hackintosh или вторая копия Linux, настроенная в local, снова портят RTC. Все системы на машине должны использовать один режим.
  • Неправильная дата в BIOS. Если время в UEFI сильно отличается, загрузчик или Secure Boot могут ругаться на сертификаты. Выставьте время в настройках прошивки вручную, затем дайте системам синхронизироваться. Если после экспериментов пропало меню выбора систем, поможет инструкция по восстановлению GRUB.

Живая флешка, виртуальные машины и компьютер без интернета

Загрузка с Live USB

Живой образ Ubuntu или Fedora ничего не знает о ваших настройках и работает в стандартном режиме UTC. Если вы выбрали второй способ (Linux в местном времени), одна загрузка с флешки с доступом к сети снова собьёт часы в Windows. С первым способом такой проблемы нет, и это ещё один довод в его пользу. Про запись и проверку образов читайте в статье о загрузочной флешке.

Виртуальные машины

Внутри VirtualBox, VMware или QEMU у гостя свои виртуальные часы, на RTC хоста они не влияют. Если гостевая Windows показывает неправильное время, в VirtualBox в настройках системы машины есть флажок аппаратных часов в UTC (Hardware Clock in UTC Time), а в libvirt параметр clock offset: для Windows обычно ставят localtime, для Linux utc.

Компьютер без сети

Без NTP аппаратные часы постепенно уплывают. Время можно выставить вручную: sudo timedatectl set-ntp false, затем sudo timedatectl set-time '2026-10-23 12:00:00'. Новое значение сразу записывается и в RTC.

Как вернуть настройки по умолчанию

Вернуть Windows к местному времени в RTC (терминал администратора):

reg delete "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /f

Вернуть Linux в стандартный режим UTC:

sudo timedatectl set-local-rtc 0 --adjust-system-clock
timedatectl

После отката снова проверьте RTC in local TZ и дайте обеим системам синхронизироваться по сети. Подробная справка с историей вопроса и вариантами для разных выпусков есть на странице UbuntuTime в документации сообщества Ubuntu. Базовые команды терминала, которые пригодились выше, собраны в шпаргалке основных команд Linux.

Частые вопросы

Почему время сдвигается ровно на 3 часа?

Это смещение московского пояса от UTC. Linux пишет в аппаратные часы UTC, Windows читает их как местное время, и разница равна вашему часовому поясу.

Какой способ лучше: менять Windows или Linux?

Надёжнее перевести Windows на UTC ключом RealTimeIsUniversal. Перевод Linux на местное время проще, но systemd считает этот режим не полностью поддерживаемым.

Нужно ли что-то менять в BIOS?

Обычно нет. После настройки дайте одной из систем синхронизироваться по сети, она сама запишет правильное время в аппаратные часы.

Почему время сбрасывается после отключения питания?

Села батарейка CR2032 на материнской плате. Программная настройка тут не поможет, батарейку нужно заменить.

Как проверить, что Linux хранит время в UTC?

Выполните timedatectl и посмотрите строку RTC in local TZ. Значение no означает UTC.

Документация и источники

Читайте также

Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.