Бывает полезно установить windows в виртуальную машину, активировать и экспортировать в ova. Из этого OVA можно сколько угодно раз импортировать машину, экспериментировать, удалять и снова импортировать. Даже на другой компьютер переносить. Только при каждом импорте отъезжает активация.
При удалении файлов внутри виртуальной машины размер образа меньше не становится. В результате и OVA занимает больше места, чем хотелось бы.
Обе эти проблемы можно решить.
1. Подготовка.
Создаём машину, ОС пока не ставим.
Придумываем uuid. Подойдет например такой: b88a53ed-7136-4a28-9ff1-044d3d22db1e. В linux этот uuid можно сгенерировать программой uuidgen. Именно к нему будет привязана активация windows. Если этого не сделать, то virtualbox при импорте будет каждый раз придумывать новый uuid, а windows будет терять активацию.
Вставляем этот uuid в качестве hardware id:
$ vboxmanage modifyvm <имя машины> --hardwareuuid b88a53ed-7136-4a28-9ff1-044d3d22db1e
Ставим windows, активируем, обновляем. Если очень хочется, то устанавливаем необходимые программы.
2. Уменьшаем размер файла с образом диска.
Загружаем виртуалку, тыкаем правой кнопкой на My computer, свойства, дополнительные параметры, защита системы, настроить, отключить защиту системы, ОК. Эта операция отключит возможность создания точек восстановления (снапшоты virtualbox куда функциональнее) и сэкономит немного пространства. Теперь отключаем своп (позже включим обратно). Для этого переключаемся на соседнюю вкладку “Дополнительно” и в разделе “Быстродействие” жмем кнопку “Параметры”. Опять вкладка “Дополнительно”, “Изменить”. Снимаем галку “Автоматически выбирать объем файла подкачки”, выбираем “Без файла подкачки”, жмем кнопку “Задать”. Соглашаемся с предупреждениями системы, закрываем вереницу окон кнопками ОК, перезагружаем виртуалку.
Теперь открываем My computer и тыкаем правой кнопкой на диски. Для каждого из них выполняем Disk cleanup (ставим все галки, удаляем все найденные лишние файлы) и дефрагментацию.
Для каждого диска запускаем sdelete.exe, который заполнит всё свободное пространство нулями:
sdelete.exe -z c:
Включаем обратно своп точно в том же месте, где выключали. Заработает он не сразу, а только после перезагрузки. Собственно, именно это нам и надо. Виртуалку не перезагружаем, а выключаем.
Теперь выкидываем из файла занятые нулями куски:
$ vboxmanage modifyvdi <имя файла>.vdi compact
Готово, теперь можно экспортировать виртуальную машину в ova штатным методом, через Файл -> экспорт конфигурации. OVA займет минимум места и при импорте этой машины активация отвалится с меньшей вероятностью.