Что ж, приступим сразу к делу. Как-то мы устанавливали виртуальную машину для сборки одного проекта, однако от души сделали динамический диск на 80GB. Однако позже стало понятно, что не стоило этого делать, так как у виртуальной MacOS оказалась весьма интересная особенность - даже если пространство на виртуалке остается незаполненным, она все равно занимает место на нашем Хосте (в моем случае - Windows). И так, вместо 27GB, фактически она занимала 50GB. Странно? Ну, пожалуй. Ведь динамический диск должен расширяться по ходу заполнения файлами. А что делать, если место пустует...
![Фактическое место, занимаемое виртуальной машиной на хосте Windows Фактическое место, занимаемое виртуальной машиной на хосте Windows](https://habrastorage.org/getpro/habr/upload_files/6ff/9b9/8a8/6ff9b98a8248558b9f95983381d1dab6.jpg)
Так вот, к чему я это. Хватит предисловий и давайте попробуем разобраться с этим.
В целом, весьма четкая инструкция по этому вопросу уже была размещена на самом форуме 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
![](https://habrastorage.org/getpro/habr/upload_files/1c7/1f9/dbe/1c71f9dbe615c9cb9248c908bec349d5.jpg)
Шаг 3. Уменьшаем значение в строке GB. Я уменьшу его до 36GB. (Все важные данные должны быть в синем поле)
![](https://habrastorage.org/getpro/habr/upload_files/07e/8f1/85f/07e8f185ff7b52b8ac212c293f3e6efb.jpg)
После этого жмем Apply и перезаходим в дисковую утилиту.
![](https://habrastorage.org/getpro/habr/upload_files/458/213/ce5/458213ce544cacfeafe468311cc05056.jpg)
Итак, с этим закончили. А теперь переходим к интересному.
Освобождаем пространство
Для начала мы должны узнать путь к пустому диску, который отделили от основного. Находим путь к диску с пустым пространством и вбиваем в терминал diskutil secureErase freespace 0 "/Volumes/Untitled"
![](https://habrastorage.org/getpro/habr/upload_files/a84/5fb/759/a845fb75942b6a3d0a909076378d9863.jpg)
Упс. Что-то пошло не так. Добавим sudo в начало команды.
![](https://habrastorage.org/getpro/habr/upload_files/8e2/50f/459/8e250f4594a65825788235623f8beb32.jpg)
Теперь все хорошо. Выключаем виртуальную машину и выходим в терминал Windows. Данные VirtualBox и сама виртуалка MacOS хранятся у меня на разных дисках, так что обратите на это внимание.
Набираем следующую команду:
cd "C:\Program Files\Oracle\VirtualBox"
//Переходим в директорию с VBoxManage
.\VBoxManage.exe modifyhd --compact "D:\VirtualBox\macOS\macOS.vdi"
//Запускаем команду по уменьшению машины.
Сократится фактическое пространство, заполненное нулями.
Итак, вы молодцы! Однако, в этом методе есть свои недочеты. У нас все еще остается виртуальное пространство. И фактический размер все еще может расширяться до заданного виртуального.
![Физический размер 33,63 и виртуальны - 78.13 Физический размер 33,63 и виртуальны - 78.13](https://habrastorage.org/getpro/habr/upload_files/d15/bab/c6a/d15babc6a18fd5a7446ec83cc057b05b.jpg)
Ко всему прочему, у нас остается диск с незаполненным пространством. Пожалуй, объединим его с основным. Данные удалятся только с него, так что об этом беспокоиться не нужно. Основной не затронет.
![](https://habrastorage.org/getpro/habr/upload_files/d2a/cef/5d3/d2acef5d34ca46093dee02ecb2c7b47b.jpg)
Но сначала нам нужно узнать, как называются диски, чтобы ничего случайно не испортить. Заходим в терминал, набираем следующее: diskutil list
Нам вывалится список всех существующих дисков.
![](https://habrastorage.org/getpro/habr/upload_files/91d/b9c/703/91db9c703be3870d1c5217a1910331f9.jpg)
Видим, что на физическом диске как раз два разделенных нами логических. Итак, снова переходим в консоль и набираем следующее (предварительно сравнив названия дисков с названием в приведенном ниже наборе команд)
diskutil apfs deleteContainer
disk0s3 diskutil eraseVolume free n disk0s3
diskutil apfs resizeContainer disk0s2 0
Нужно сказать, что этот этап вовсе не обязателен. Просто захотелось его добавить на всякий случай для тех, кто любит стабильность и ему незачем два раздельных диска.
Конечно, этот способ не идеальный, ведь у нас все еще остается изначально заданный виртуальный размер машины. Тем не менее, надеюсь, это кому-то поможет.
Да прибудет с вами Омниссия.
MrCleaner
Финальный .ova не помешает где нибудь выложить на mega или disroot, например.