звільнити не використовуваний простір у файлі qcow2-image на kvm / qemu


23

ми використовуємо kvm / qemu з qcow2-образами для наших віртуальних машин.

qcow2 має цю приємну особливість, коли файл зображень виділяє лише фактично необхідний простір віртуальною машиною. але як я скорочую файл зображення, якщо виділений простір віртуальної машини зменшується?

приклад:

1.) я створюю нове зображення у форматі qcow2, розміром 100 Гб

2.) Я використовую це зображення для встановлення ubuntu. для встановлення потрібно близько 10 Гбіт, файл зображення зростає приблизно до 10 Гб. нічого несподіваного поки що.

3.) я заповнюю зображення приблизно 40 ГБ додаткових даних. файл-файл зростає до 50 Гб. у мене все в порядку :-)

4.) Тут стає дивно: я видаляю всі 40 Гб даних на зображенні, але розмір зображення все одно набирає 50 Гб.

питання: як я можу звільнити ці 40 ГБ даних і зменшити зображення до потрібних лише 10 ГБ?

заздалегідь дякую, Берні

Відповіді:


26

Зображення не зменшиться автоматично, оскільки, видаляючи файли, ви фактично не видаляєте дані (ось чому функція відновлення функціонує). Qemu має змогу скорочувати зображення qcow2 назад, але те, що робить утиліта, насправді дедублює нулі з диска, залишаючи всю іншу інформацію недоторканою. Тож ідея полягала б у тому, щоб:

  1. Нуль-заповніть накопичувач ( dd if=/dev/zero of=/some/fileпоки не вистачить місця)
  2. видалити / деякі / файл
  3. вимкнути ВМ
  4. cd, де зберігаються і запускаються зображення для VM qemu-img convert -O qcow2 original_image.qcow2 deduplicated_image.qcow2
  5. змінити налаштування VM для використання нового deduplicate_image.qcow2, перевірити, чи працює VM, і видалити старе зображення

Це, afaik, працюватиме лише із зображеннями qcow2, я не перевіряв інші формати.


3
Якщо у вас є гостьова програма Windows, запустіть SDelete -z до нуля усього вільного місця (кроки 1,2 вище)
ndemou

17

virt-sparsify може зробити все це з меншими клопотами з вашого боку: http://libguestfs.org/virt-sparsify.1.html


Не дуже впевнений, що це було там у 2011 році
діасний

2
@dyasny Якщо існуючі відповіді на старі запитання з часом застаріли, варто написати нову відповідь. Однак ця нова відповідь може не відповідати стандартам для цього сайту.
kasperd

4
@dyasny Якщо хтось хоче витратити зусилля на написання нової якісної відповіді, кожен раз, коли стара застаріла, їх слід заохочувати до цього. Більш ретельна дискусія про те, як боротися із застарілими відповідями, краще підходить для мета.
kasperd

1

virt-sparsify fileA fileBзробить все це, але фактично не зменшить розмір зображення. Для цього потрібно додати --compress.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.