Чи можливо отримати VM Virtualbox завжди запуск з одного і того ж часу, якщо так, як?


9

Я намагаюся використовувати VB для налаштування вікна Windows 7 для використання в навчальному курсі. Я хочу, щоб віртуальна машина завжди запускалася з тих же умов, зокрема:

  1. ВМ завжди запускається в одну і ту ж дату і час
  2. Диск залишається незмінним в результаті попередньої вправи

Я розробив, як налаштувати диск як "незмінний", про який слід подбати (2), але я не можу змусити запустити VM одночасно. Подивившись навколо, я виявив таке:

Після встановлення та запуску Virtualbox Guest Additions спробує синхронізувати час гостя з часом перебування. Цього можна запобігти, заборонивши гостьовій службі читати годинник хоста:

VBoxManage setextradata "VM name" "VBoxInternal / Devices / VMMDev / 0 / Config / GetHostTimeDisabled" 1

Я спробував це з вимкненим VM, і з цим запустився, але, схоже, нічого не робить. На цій же сторінці документації є також згадка про параметр "--timesync-set-start", проте я не бачу жодної згадки про формат для встановлення дати та часу. Допомога буде вітатися.


"Здається, це нічого не робить", ви маєте на увазі "час і дата системи синхронізуються з хостом"?
Sopalajo de Arrierez

Чи має бути для вас рішення встановити час та дату після завантаження Windows (я маю на увазі кілька секунд пізніше)? Думаю, простий .cmd-скрипт повинен це зробити.
Sopalajo de Arrierez

Сама Windows також може бути налаштована для синхронізації часу з сервером інтернету часу.
Thorbjørn Ravn Andersen

Відповіді:


16

Вам потрібно виконати такі дії, щоб гостьовий час зберігав те, що було:

1.Вимкніть синхронізацію часу вашої віртуальної машини:

1.1 Вимкнути хост для гостя Timesync

VBoxManage setextradata <YOUR_VM_NAME> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1

VBoxManage setextradata <YOUR_VM_NAME> "VBoxInternal/TM/TSCTiedToExecution" 1

Щоб повернути назад:

VBoxManage setextradata <YOUR_VM_NAME> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 0

1.2 Вимкнути GuestAddition Timesync

Використовуйте regedit.exe для зміни реєстру.

Знайдіть цю галузь: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ VBoxService

Змініть значення в ImagePathвід

system32\VBoxService.exe

до

system32\VBoxService.exe --disable-timesync

Перезавантажте свій VM або перезапустіть послугу "VirtualBox Service Additions Service".

2.Вимкніть синхронізацію часу Windows.

Перевірте налаштування часу. Вимкнути синхронізацію часу в Інтернеті.

Джерело: http://www.ppq.ch/snippets/15-vobxtime


Дякую. Ваш "1.2 Відключити GuestAddition Timesync" - це єдиний варіант, який, здається, працює для мене. Зміни хоста продовжували повертати VirtualBox. Я б подивився на файл після запуску VM та нових записів xml-даних додаткових даних було видалено.
Graymatter

5

Наступні кроки спрацюють, якщо хост-машиною є Windows / Linux.

  1. Якщо "цільовою машиною" є Windows: Відкрийте "цільову віртуальну машину" та застосуйте "Панель управління -> Дата та час -> Час Інтернету -> Змінити налаштування -> Відключити" Синхронізувати з сервером часу в Інтернеті "".

  2. Скопіюйте рядки нижче, як файл "yourfilename.ps1" (Windows) / "yourfilename.sh" (Linux) на хост-машині. Відредагуйте цей файл, як описано в кроці 3. 4. 5.


ХОСТА: ВІКНИ

$vbox_path="C:\Program Files\ORACLE\VirtualBox"
$vm_name="Win7_VB"
$start_utc=1444176000

#DO NOT CHANGE ANYTHING BELOW THIS LINE
$now_utc_ms=[int64](([datetime]::UtcNow)-(get-date "1/1/1970")).TotalMilliseconds
$dif_utc_ms=$start_utc * 1000 - $now_utc_ms
Write-Host "START UTC:" $start_utc*1000 " DIF UTC:" $dif_utc_ms " NEW UTC:" $now_utc_ms

cd $vbox_path
VBoxManage setextradata $vm_name "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "0"
VBoxManage setextradata $vm_name "VBoxInternal/TM/TSCTiedToExecution" 1
VBoxManage modifyvm     $vm_name --biossystemtimeoffset $dif_utc_ms
VBoxManage startvm      $vm_name
Start-Sleep -s 5

БУДІВЕЛЬ: LINUX

#!/bin/sh
vbox_path="/usr/bin/"
vm_name="Win7_VB"
start_utc=1444176000

#DO NOT CHANGE ANYTHING BELOW THIS LINE
now_utc_ms=$(($(date +%s)*1000))
dif_utc_ms=$(($(($start_utc * 1000)) - $now_utc_ms))
echo "START UTC:" $(($start_utc * 1000)) " DIF UTC:" $dif_utc_ms "NOW UTC:" $now_utc_ms

cd $vbox_path
VBoxManage setextradata $vm_name "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "0"
VBoxManage setextradata $vm_name "VBoxInternal/TM/TSCTiedToExecution" 1
VBoxManage modifyvm     $vm_name --biossystemtimeoffset $dif_utc_ms
VBoxManage startvm      $vm_name
sleep 5
  1. Оновіть "vbox_path" за допомогою шляху встановлення VirtualBox. (Хост: Windows)
  2. Оновіть "vm_name" з ім'ям зображення VirtualBox, яке буде запущено.
  3. Оновіть "start_utc" за допомогою http://www.epochconverter.com/ . Цільова машина запускається завжди з "start_utc" часу. Конвертор епох
  4. Відкрийте "Windows PowerShell" у меню "Пуск" як адміністратор . (Хост: Windows)
  5. Виконайте наступну команду та дайте відповідь на питання як [Y]. (Хост: Windows)

    Set-ExecutionPolicy RemoteSigned
    
  6. Запустіть правою кнопкою миші на "yourfilename.ps1" і виберіть "Запустити з PowerShell", щоб запустити цільову машину. (Хост: Windows)

  7. Запустіть команду виконувати команду Linux Terminal нижче, щоб запустити цільову машину (Хост: Linux)

    chmod +x yourfilename.sh && sh yourfilename.sh
    

Примітка. Завжди використовуйте крок 8 (Хост: Windows) / крок 9 (Хост: Linux) для запуску цільової віртуальної машини.


Для користувачів, у яких є Linux Linux, я створив скрипт bash на основі цієї відповіді, який ви можете знайти тут: gist.github.com/breautek/be83414034b973d53691645d6e178bb4 Просто збережіть його як startvm.sh chmod +x startvm.shта використовуйте ./startvm.shдля його запуску. Можливо, буде працювати і на mac-хості, але я цього не перевіряв.
Норман Бро

1

Щоб відповісти на оригінальне запитання ОП (MartinK): Чи можна отримати VM Virtualbox завжди починати з одного і того ж часу, якщо так, як?

Це можливо просто

(a) Встановлення властивості "GetHostTimeDisabled" = 1, використовуючи команду VBoxManage в командному рядку (в режимі офлайн, тобто перед запуском VM)

(b) Запустіть VM із збереженого SnapShot, зробленого раніше. (у бажаний час початку)

Більше не потрібно команд кожного разу, коли це працює. (тестовано для Windows Guest в хостах Windows)

Ця відповідь ближче до попередньої відповіді Олівера Зальцбурга, за винятком того, що він пропустив налаштування параметрів "GetHostTimeDisabled". Звичайно, синхронізацію з Інтернетом у часі (NTP) слід відключити на збереженому знімку.


0

Використовуйте знімки.

  1. Для того, щоб створити новий знімок, просто використовуйте Сфотографувати кнопку в моментальних знімках Огляду:

    введіть тут опис зображення

  2. Назвіть знімок і збережіть його.

  3. Коли ви хочете пізніше завантажити фіксований стан, поверніться до попереднього знімка за допомогою кнопки Відновити знімок :

    введіть тут опис зображення

Якщо ви хочете переконатися, що ваш знімок завжди має одну і ту ж дату, ви, ймовірно, захочете відключити синхронізацію часу в Інтернеті в Windows, знявши прапорець Синхронізувати з сервером часу в Інтернеті в діалоговому вікні конфігурації годин.


Це чудове рішення, і я вирішує цю проблему для мене. Тоді здається, що якщо я використовую знімок, мені не потрібно заважати зробити диск «непорушним» - я прав? Крім того, хоча мені це не потрібно для вирішення моєї проблеми, мені цікаво призначення команд VBoxManage, про які я згадував у своєму попередньому дописі (і як змусити їх працювати)
Martin K

Будь ласка, зверніться до документації щодо цієї команди: virtualbox.org/manual/ch09.html#disabletimesync Я не бачу, яку користь матиме непорушний диск або що це насправді означає у цьому контексті.
Der Hochstapler

Відповідно до моєї оригінальної публікації, я вже переглянув документацію, на яку ви посилаєтесь, і спробував примусити її працювати - однак нічого не зробив. Мені, мабуть, чогось не вистачає - але що?
Martin K
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.