Уменьшаем размер MacOS.vdi в VirtualBox

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Что ж, приступим сразу к делу. Как-то мы устанавливали виртуальную машину для сборки одного проекта, однако от души сделали динамический диск на 80GB. Однако позже стало понятно, что не стоило этого делать, так как у виртуальной MacOS оказалась весьма интересная особенность - даже если пространство на виртуалке остается незаполненным, она все равно занимает место на нашем Хосте (в моем случае - Windows). И так, вместо 27GB, фактически она занимала 50GB. Странно? Ну, пожалуй. Ведь динамический диск должен расширяться по ходу заполнения файлами. А что делать, если место пустует...

Фактическое место, занимаемое виртуальной машиной на хосте Windows
Фактическое место, занимаемое виртуальной машиной на хосте Windows


Так вот, к чему я это. Хватит предисловий и давайте попробуем разобраться с этим.
В целом, весьма четкая инструкция по этому вопросу уже была размещена на самом форуме VirtualBox.: https://forums.virtualbox.org/viewtopic.php?t=84452

Инструкция была максимально простой, но мне стало немного беспокойно из-за конфузов, которые случались у некоторых ребят с форума. Дело в том, что команда diskutil secureErase freespace 0 / стерла все данные, что были на виртуалке Mojave.vdi у одного юзера, а после часовой кропотливой сборки проекта на моей виртуалке этого совсем не хотелось. Пришлось еще немного порыться в интернете и поосторожничать. И вот, ответ нашелся на superuser.com:

For MacOS Guest do this:

  1. Nullify free space in guest system:

    diskutil secureErase freespace 0 "/Volumes/Macintosh HD"

    (replace /Volumes/Macintosh HD with your drive name)

  2. Shutdown the guest VM

  3. 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" //Запускаем команду по уменьшению машины.

Сократится фактическое пространство, заполненное нулями.

Итак, вы молодцы! Однако, в этом методе есть свои недочеты.У нас все еще остается виртуальное пространство. И фактический размер все еще может расширяться до заданного виртуального.

Физический размер 33,63 и виртуальны - 78.13
Физический размер 33,63 и виртуальны - 78.13

Ко всему прочему, у нас остается диск с незаполненным пространством. Пожалуй, объединим его с основным. Данные удалятся только с него, так что об этом беспокоиться не нужно. Основной не затронет.

Но сначала нам нужно узнать, как называются диски, чтобы ничего случайно не испортить. Заходим в терминал, набираем следующее: diskutil list
Нам вывалится список всех существующих дисков.

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

diskutil apfs deleteContainer
disk0s3 diskutil eraseVolume free n disk0s3
diskutil apfs resizeContainer disk0s2 0

Нужно сказать, что этот этап вовсе не обязателен. Просто захотелось его добавить на всякий случай для тех, кто любит стабильность и ему незачем два раздельных диска.

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

Да прибудет с вами Омниссия.

Источник: https://habr.com/ru/post/723994/


Интересные статьи

Интересные статьи

Добрый день. Меня зовут Сергей, я работаю системным архитектором в компании "РЕД СОФТ". Как я уже писал в прошлой статье, одна из проблем при эксплуатации СУБД Ред База Данных и Firebird — это уменьше...
Привет, мы команда СберМегаМаркета, и это обзорная статья о нашей площадке, пробный камень для блога Хабре. За нашими плечами спешный переезд с PHP на GO, ребрендинг и решение таких задач, с которыми ...
Источник картинки В мире много клавиатур, как вполне обычных, так и эргономичных, с продуманной структурой, либо же откровенно странных. Клавиатура EZ-Reach 2030, о которой пойдет речь...
Хочу поделиться опытом автоматизации экспорта заказов из Aliexpress в несколько CRM. Приведенные примеры написаны на PHP, но библиотеки для работы с Aliexpress есть и для...
Реализация ORM в ядре D7 — очередная интересная, перспективная, но как обычно плохо документированная разработка от 1с-Битрикс :) Призвана она абстрагировать разработчика от механики работы с табл...