Вопрос или проблема
Я создал виртуальную машину с помощью следующей команды:
qemu-img create -f raw myVirtualDisk.raw 20G
qemu-system-x86_64 -enable-kvm -m 8G -smp 8 -boot d -cdrom /home/danny/2T/tmp/iso-image/ubuntu-24.04.1-live-server-amd64.iso -drive file=/home/danny/myVirtualDisk.raw,format=raw -netdev user,id=net0,net=192.168.0.0/24,dhcpstart=192.168.0.9 -device virtio-net-pci,netdev=net0 -vga qxl -device AC97 -rtc base=2023-04-01
После успешной установки ОС я запускаю виртуальную машину с помощью команды:
qemu-system-x86_64 -enable-kvm -m 8G -smp 8 -drive file=/home/danny/myVirtualDisk.raw,format=raw -netdev user,id=net0,net=192.168.0.0/24,dhcpstart=192.168.0.9 -device virtio-net-pci,netdev=net0 -vga qxl -device AC97 -rtc base=2023-04-01
Но когда виртуальная машина запущена и я вошел в систему, при вводе команды date
результат по-прежнему сегодняшний, -rtc base=2023-04-01
не кажется, что работает.
Ответ или решение
Проблема, с которой вы столкнулись, связана с тем, что параметр -rtc base=2023-04-01
в QEMU определяет только начальную дату и время для эмулятора оборудования RTC (Real-Time Clock), но не влияет на системное время внутри операционной системы. После установки Ubuntu система использует свою собственную инициализацию времени, которая может игнорировать значение, установленное в KVM/QEMU.
Вот пошаговая инструкция по исправлению данной проблемы и настройке виртуальной машины для использования заданной даты.
Шаг 1: Настройка времени в QEMU
При запуске виртуальной машины вы используете уже правильный параметр:
-rtc base=2023-04-01
Убедитесь, что вы также добавили параметр -rtc driftfix=slew
, чтобы уменьшить разницу во времени между хостом и гостевой ОС. Полная команда для запуска QEMU может выглядеть так:
qemu-system-x86_64 -enable-kvm -m 8G -smp 8 -drive file=/home/danny/myVirtualDisk.raw,format=raw -netdev user,id=net0,net=192.168.0.0/24,dhcpstart=192.168.0.9 -device virtio-net-pci,netdev=net0 -vga qxl -device AC97 -rtc base=2023-04-01,driftfix=slew
Шаг 2: Настройка времени в гостевой системе Ubuntu
После установки ОС и запуска виртуальной машины выполните следующие действия для корректировки времени:
-
Убедитесь, что пакет
ntp
не установлен. Если он установлен, он может перезаписывать время после загрузки. Проверка:dpkg -l | grep ntp
-
Если
ntp
установлен, удалите его:sudo apt remove ntp
-
Подождите несколько секунд после запуска для корректной инициализации времени RTC.
-
Синхронизация времени. После того, как вы убедились, что
ntp
не синхронизирует время, выполните следующую команду, чтобы установить время в системе на нужную вам дату и время:sudo date -s "2023-04-01 12:00:00"
(где
12:00:00
— это желаемое время). -
Проверьте текущее системное время:
date
-
Настройка системы на использование RTC при старте. Вы можете настроить систему для сохранения времени в RTC при остановке, чтобы при следующем запуске время автоматически синхронизировалось с установленным значением в RTC. Для этого добавьте или измените следующую строку в
/etc/rc.local
передexit 0
:hwclock --systohc
Заключение
С помощью этих шагов вы сможете правильно настроить системное время в вашей гостевой машинеUbuntu. Параметр -rtc base=2023-04-01
будет работать корректно только после настройки системного времени, и в дальнейшем вы сможете видеть заданную дату в командном выводе date
.