Что ж, приступим сразу к делу. Как-то мы устанавливали виртуальную машину для сборки одного проекта, однако от души сделали динамический диск на 80GB. Однако позже стало понятно, что не стоило этого делать, так как у виртуальной MacOS оказалась весьма интересная особенность - даже если пространство на виртуалке остается незаполненным, она все равно занимает место на нашем Хосте (в моем случае - Windows). И так, вместо 27GB, фактически она занимала 50GB. Странно? Ну, пожалуй. Ведь динамический диск должен расширяться по ходу заполнения файлами. А что делать, если место пустует...
Так вот, к чему я это. Хватит предисловий и давайте попробуем разобраться с этим.
В целом, весьма четкая инструкция по этому вопросу уже была размещена на самом форуме VirtualBox.: https://forums.virtualbox.org/viewtopic.php?t=84452
Инструкция была максимально простой, но мне стало немного беспокойно из-за конфузов, которые случались у некоторых ребят с форума. Дело в том, что команда diskutil secureErase freespace 0 / стерла все данные, что были на виртуалке Mojave.vdi у одного юзера, а после часовой кропотливой сборки проекта на моей виртуалке этого совсем не хотелось. Пришлось еще немного порыться в интернете и поосторожничать. И вот, ответ нашелся на superuser.com:
For MacOS Guest do this:
-
Nullify free space in guest system:
diskutil secureErase freespace 0 "/Volumes/Macintosh HD"
(replace /Volumes/Macintosh HD with your drive name)
Shutdown the guest VM
-
Run this command to reduce VDI disk image size
VBoxManage modifyhd /path/to/thedisk.vdi --compact
OR
VBoxManage modifymedium /path/to/thedisk.vdi --compact
Отлично, теперь мы знаем, что можно указывать конкретный диск и уже именно его забивать нулями.
Ну что ж, идем в наш дорогой MacOS и разделяем наш диск на несколько разделов.
Разделяем диск на MacOS
Шаг 1. Зайти в Finder —> Utilities —> Disk Utility
Шаг 2. Выбираем диск, жмем вкладку Portition
Шаг 3. Уменьшаем значение в строке GB. Я уменьшу его до 36GB. (Все важные данные должны быть в синем поле)
После этого жмем Apply и перезаходим в дисковую утилиту.
Итак, с этим закончили. А теперь переходим к интересному.
Освобождаем пространство
Для начала мы должны узнать путь к пустому диску, который отделили от основного. Находим путь к диску с пустым пространством и вбиваем в терминал diskutil secureErase freespace 0 "/Volumes/Untitled"
Упс. Что-то пошло не так. Добавим sudo в начало команды.
Теперь все хорошо. Выключаем виртуальную машину и выходим в терминал Windows. Данные VirtualBox и сама виртуалка MacOS хранятся у меня на разных дисках, так что обратите на это внимание.
Набираем следующую команду:
cd "C:\Program Files\Oracle\VirtualBox"
//Переходим в директорию с VBoxManage
.\VBoxManage.exe modifyhd --compact "D:\VirtualBox\macOS\macOS.vdi"
//Запускаем команду по уменьшению машины.
Сократится фактическое пространство, заполненное нулями.
Итак, вы молодцы! Однако, в этом методе есть свои недочеты. У нас все еще остается виртуальное пространство. И фактический размер все еще может расширяться до заданного виртуального.
Ко всему прочему, у нас остается диск с незаполненным пространством. Пожалуй, объединим его с основным. Данные удалятся только с него, так что об этом беспокоиться не нужно. Основной не затронет.
Но сначала нам нужно узнать, как называются диски, чтобы ничего случайно не испортить. Заходим в терминал, набираем следующее: diskutil list
Нам вывалится список всех существующих дисков.
Видим, что на физическом диске как раз два разделенных нами логических. Итак, снова переходим в консоль и набираем следующее (предварительно сравнив названия дисков с названием в приведенном ниже наборе команд)
diskutil apfs deleteContainer
disk0s3 diskutil eraseVolume free n disk0s3
diskutil apfs resizeContainer disk0s2 0
Нужно сказать, что этот этап вовсе не обязателен. Просто захотелось его добавить на всякий случай для тех, кто любит стабильность и ему незачем два раздельных диска.
Конечно, этот способ не идеальный, ведь у нас все еще остается изначально заданный виртуальный размер машины. Тем не менее, надеюсь, это кому-то поможет.
Да прибудет с вами Омниссия.
MrCleaner
Финальный .ova не помешает где нибудь выложить на mega или disroot, например.