Создайте клон VirtualBox Machine, который не вызывает повторную активацию Windows после установки Windows

14

В большинстве руководств по установке Windows на VirtualBox в качестве шаблона для быстрых заданий Windows предлагается выполнить несколько шагов по подготовке виртуальной машины перед установкой Windows (лучшее руководство, которое я нашел: grahamrhay.wordpress.com ; другое довольно хорошее руководство: www .windowstablettv.com ). К сожалению, я не читал эти руководства до установки и активации Windows на виртуальной машине, которую я хотел использовать в качестве шаблона.

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

При просмотре файла шаблона определения виртуальной машины (VBOX или XML-файл для виртуальной машины /VirtualBox/Machine/Hardware) узел (идентификатор XPath) не имеет uuidатрибута. Но если я попытаюсь использовать VBoxManage modifyvm <uuid|name> --hardwareuuid <uuid>для установки нового UUID для шаблона ВМ, то шаблон ВМ теряет свой статус активации! (К счастью, я сделал резервную копию шаблона.) Таким образом, для достижения своей цели я не могу просто следовать этим руководствам, притворяясь, что я еще не установил Windows.

palswim
источник

Ответы:

11

К счастью, я заметил кое-что во всех моих Виртуальных машинах, которые я не подготовил, как было указано в этих руководствах.

Я побежал VBoxManage showvminfo <uuid|name>и заметил, что UUIDзначение соответствует Hardware UUIDзначению, что заставляет меня предположить, что если какое-либо определение виртуальной машины не имеет uuidатрибута в /VirtualBox/Machine/Hardwareузле, то виртуальная машина будет использовать значение «UUID машины» в качестве значения «UUID оборудования». Итак, для моей шаблонной виртуальной машины у нее был «Hardware UUID», который я мог использовать; Мне просто нужно было найти, как перенести его на любые клоны, которые я сделал.

Чтобы обеспечить передачу UUID, вы можете выбрать один из двух подходов:

  • Вы можете редактировать шаблон файла VM Definition напрямую. «Аппаратный UUID» будет передан клонам, только если он /VirtualBox/Machine/Hardwareимеет uuidатрибут. Итак, скопируйте /VirtualBox/Machine uuidатрибут и добавьте его в /VirtualBox/Machine/Hardware uuidатрибут. Вы, вероятно, захотите после этого повторно инициализировать базу данных компьютера VirtualBox, закрыв / убив любой процесс VirtualBox, который вы запускаете. (VBoxSVC иногда задерживается в Windows; возможно, вам придется убить его из диспетчера задач.)
  • Вы можете клонировать свой шаблон и создать новый шаблон ВМ, а затем использовать его VBoxManage modifyvm <uuid|name> --hardwareuuid <uuid>для установки «UUID оборудования» нового шаблона в «UUID компьютера» / «UUID оборудования» исходного шаблона. Я говорю, что вам нужно клонировать ВМ, чтобы создать ВМ нового шаблона, потому что, если вы попытаетесь установить «UUID оборудования» с помощью этой команды в исходном шаблоне, он не добавит uuidатрибут к /VirtualBox/Machine/Hardwareузлу, поскольку он все еще может подразумевать его из "Machine UUID", и, следовательно, не будет копировать это значение в любой клон, который он делает.
palswim
источник
Не ясно, о какой виртуальной машине вы говорите в первом пункте; также лучше использоватьVBoxManage modifyvm --hardwareuuid <uuid>
CharlesB
2
Команда modifyvmне установит атрибут /VirtualBox/Machine/Hardwareузла, uuidесли вы передадите UUID с тем же значением, что и атрибут /VirtalBox/Machineузла виртуальной машины uuid. Вы должны редактировать файл VBOX напрямую.
palswim
3

Этот скрипт powershell делает работу:

  1. клонировать машину, которая уже активирована.
  2. закрыть виртуальные процессы из диспетчера задач.
  3. запустите этот скрипт, модифицируя переменные к вашим значениям.

Помните, что имена виртуальных машин чувствительны к регистру.

$ORIGVirtualMachineName="BaseDevWin7"
$clonedVirtualMachineName="DevWin7a"
$vboxDir="c:\Program Files\Oracle\VirtualBox"
cd $vboxDir
$uid=$($($(.\VBoxManage.exe showvminfo $ORIGVirtualMachineName|select-string "Hardware UUID:").ToString()).Split())[4]
.\VBoxManage modifyvm $clonedVirtualMachineName --hardwareuuid $uid
Марсело Сайед
источник
2

Благодаря приведенным выше советам я успешно клонировал компьютер с гостевой Win7, работающей на хосте Kubuntu в тестовых целях без повторной активации.

Моя машина уже была активирована и (как описано выше) фактически не имела аппаратного UUID.

Для меня, похоже, MACHINE UUID предназначен только для управления Virtualbox, тогда как HARDWARE UUID используется логикой активации Windows. Если аппаратный UUID отсутствует, Virtualbox предоставляет UUID компьютера гостю, то есть Microsoft знает UUID компьютера.

Итак, вот как это работало без повторной активации в моем случае: 1) Скопируйте виртуальную машину (папку) с помощью обычного файлового браузера. 2) Откройте файл .vbox в простом текстовом редакторе. 3) Поскольку не было атрибута UUID для «оборудования», скопируйте атрибут UUID машины (например, uuid = "{xxx11111-2222-3333-4444-xxxxxxxxxxxx}") в запись "оборудование". 4) Сгенерируйте новый UUID для машины, например, с помощью uuidgenerator.net. 5) Перезаписать UUID машины VALUE сгенерированным значением UUID. => Готово.

Для параллельного управления обеими машинами в VB Manager сложнее:
1. Переименовать файл жесткого диска клонов .vdi.
2. В командной строке введите новый UUID для жесткого диска с помощью команды "VBoxManage internalcommands sethduuid .vdi. VBManager установит новый UUID и отобразит его.
3. В VB Manager добавьте новый компьютер. Отредактируйте компьютер, добавив новый файл жесткого диска. (и удалите оригинальный vdi, если он все еще присутствует).

Теперь у вас есть уникальные идентификаторы для всех виртуальных машин и жестких дисков. Вы можете управлять обеими машинами в VB Manager параллельно.

Дитер Шлютер
источник
1

Полный клон машины. Не начинай это.

Из командной строки:

VBoxManage modifyvm "Имя клонированной виртуальной машины" --hardwareuuid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

В качестве UUID используйте идентификатор устройства (или идентификатор оборудования, если имеется) с исходного устройства.

Чтобы получить UUID, используйте:

VBoxManage showvminfo "Оригинальное имя ВМ"

Это должно работать. Протестировано на гостевой Windows 10, уже активировано.

user4691
источник
Это работает в большинстве случаев, за исключением случаев, когда UUID соответствует атрибуту /VirtalBox/Machineузла виртуальной машины uuid, как показывают вопрос и другой комментарий .
Palswim