VirtualBox: Зменшуємо розмір дискового файлу VDI

VirtualBox – віртуалізація для операційних систем

Недавнім часом я став помічати те, що об’єм моєї віртуальної машини постійно зростає. Начебто на це причин не повинно бути жодних: так як я у ній жодних програм не встановлюю і на диск C:/ нічого не копіюю. Використовую VirtualBox & Windows XP лише для тестових цілей у сфері програмування. Проблема в прицнипі очевидна, адже Microsoft і його файлова система NTFS не навчились й досі ефективно використовувати вільний дисковий простір. Тому, процес дефрагментації дисків для FAT/FAT32/NTFS – це уже як “бутерброд на сніданок” 🙂 Чим частіше ми це будемо виконувати, тим повільніше будемо відчувати втрату продуктивності самої Windows OS. Але для VirtualBox є своє “підводне каміння”: навіть якщо ми і будемо виконувати дефрагментацію віртуальної машини, і файли, що використвуюуться будуть переміщатися у початкові кластери нашого диску, то об’єм VDI диску вуртуальної машини не буде зменшуватися. Так як вільний простір який ми бачимо утилітою дефрагментації – це не показник того, що це місце не використовується. Щоб для системи було зрозуміло, що є вільні кластери які ніким не використовуються – необхідно їх “обнулити”. Тому, давайте розглянемо той випадок, як мені вдалось оптимізувати  VDI файл з 10,5Гб до 4,32Гб.

Спершу давайте запам’ятаємо що у нас було до початку роботи, щоб було з чим порівнювати ефективність цієї публікації 🙂

VirtualBox Manager. Windows XP VM

VirtualBox Manager. Windows XP VM перед процедурою оптимізації

Я на рисунку спеціально червоним виділив об’єм VDI диску. Перед процедурою оптимізації він займав 10,52Гб. А тепер беремось за сам процес:

  1. Завантажуємо нашу гостьову ОС (в моєму випадку це Windows XP) у VirtualBox.
  2. Виконуємо процедуру очистки диску C:, включаємо “Сжимать диск для экономии места”, а також відключаємо “Разрешить индексирование диска для быстрого поиска”. Але якщо Ви працюєте у віртуальній машині досить часто і виконуєте у ній пошук по файлам, то краще не відключати індексування для швидкого пошуку. Ось як це візуально виглядає:

    Windows XP – очистка диска

    Windows XP – очистка диска

  3. Дальше нам необхідно виконати дефрагментацію диску C:. Цей процес бажано зробити 2 рази: але не один за одним, а через перезавантаження гостьової ОС. Тобто, виконали перший раз дефрагментацію – перезавантажили гостьову ОС, потім знову виконали вдруге дефрагментацію. Це дасть змогу добитися максимально-ефективного переміщення даних на початок розділу, щоб ефективно “відрізати” вільне місце, що не буде використовуватися. Якщо все виконали вірно, то маєте побачити ось такий результат:

    Windows XP дефрагментація

    Windows XP дефрагментація

  4. Як я уже писав вище, нам необхідна програма, яка “обнулить” вільні кластери. Я рекомендую SDelete. Якби не було, але саме ця програма знаходиться на сервері Microsoft-а, тому їй можна довіряти 🙂 Запуск цієї програми робимо за допомогою такої команди:

    Цей процес у мене десь зайняв приблизно 15-20хв.
  5. Коли завершиться пункт 4 – виключаємо гостьову ОС. Дальше відкриваємо термінал і запускаємо команду:

    Якщо у Вас VirtualBox програма знаходиться не у /Applications/ – то підкорегуйте cd команду вище. У моєму випадку все виглядало так:

    $ cd /Applications/VirtualBox.app/Contents/MacOS/
    $ ./VBoxManage modifyhd –compact /Volumes/SOFT/WindowsXP.vdi
    0%…10%…20%…30%…40%…50%…60%…70%…80%…90%…100%

  6. Ось тепер і бажаний результат:
    VirtualBox Manager VDI після оптимізації

    VirtualBox Manager VDI після оптимізації

    Тобто, мені вдалось зменшити розмір VDI файлу із 10.52Гб до 4.32Гб. – це більш як у 2 рази.

  • Alexander Berezoskiy

    Толково, проте IMHO це все VBOX повинен робити. Там э свій дефрагментатор.

    • А де він знаходиться? А то в /Contents/MacOS/ я нічого “толкового” для дефрагментації не знайшов 🙂

      • Хм. В целом дефрагментация динамического виртуального диска и дефрагментация раздела NTFS, который на этом диске находится – это две “очень большие разницы”. Первое надо делать на хост-системе, а второе – на гвест-системе. VBoxManage modifyvm –compact – для первого. Вторым не занимался.
        К тому же в целом катить бочку на “неэффективность” NTFS тоже не надо. Тут разные факторы работают, не только использование пространства диска. Удаленные файлы необязательно нужно сразу же использовать заново – вдруг у вас случится энурез и придется восстанавливать что-то случайно удаленное? Тогда ВНЕЗАПНО окажется что лучше б NTFS затирал (повторно использовал) удаленные файлы как можно позже. Профит! 🙂

        • Антон, спасибі за коментар! 🙂
          Щодо 2 “разниц”: а хіба в статті не описано? Там же спочатку пропонується дефрагментація NTFS розділу (п.3) на рівні самої ОС, а уже потім п.5 – зжимання вірт. диску.

          Щодо NTFS – тут думки можуть розбігатися. Справа не в тому, що “Удаленные файлы необязательно нужно сразу же использовать заново”, мова йшла про не ефективний аллокейтінг простору при збереженні n-біта інформації. Це і є проблемою NTFS та і всього сімейства FS від “мелкософта”. Та й в “неті” можна знайти безліч детальних недоліків цієї FS. Якщо говорити про її переваги над чимось UNIX-им () – то я таких не пригадаю 🙂