LINUX.ORG.RU
решено ФорумAdmin

Убрать неиспользованное место qcow2

 


1

1

Доброго времени суток!

Есть хост с квм и в нем виртуальная машина с Вин2К8Р2 в файле qcow2. Сам виртуальный диск Вин2К8Р2 на 150Г. Файл 75Г. Винда показывает, что занято порядка 40Г. Есть ли методы сжать именно файл до вот этих реально занятых 40Г при сохранении размера виртуального диска? У вмваре у меня получалась такая фигня.

Перегонка qcow2 -> raw и обратно ничего не дает.

Прошу помочь



Последнее исправление: alex-123 (всего исправлений: 1)

Нужно чтобы ОС (венда в твоём случае) как-то обозначила неиспользуемые блоки на виртуальном диске. Ну или хотя бы занулила их. В линуксе для этого есть discard (смотри команду TRIM для SSD). Не помню точно с какой версии qemu это поддерживает, но поддержка точно есть.

В твоём случае я бы загрузил внутри виртуалки systemrescuecd (или какой-нибудь другой livecd, не суть важно) и прошёлся по файловым системам ntfswipe'ом. А затем просто qemu-img convert из qcow2 снова в qcow2, он должен нули автоматически убирать.

Ещё нагугливается вот такая штука: http://libguestfs.org/virt-sparsify.1.html, но я не пробовал.

Deleted
()

если бы файл был бы raw-формата (а не qcow2) — то наверно помогло бы:

echo "БЫЛО: $(du --si hdd.img)"

mount -o loop hdd.img /mnt/                   || exit 1
fstrim /mnt/                                  || exit 1
umount /mnt/                                  || exit 1
cp --sparse=always hdd.img new_hdd.img        || exit 1
mv new_hdd.img hdd.img                        || exit 1

echo "СТАЛО: $(du --si hdd.img)"

а вот файлы qcow2-формата — даж не знай что внутри них..

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 4)
Ответ на: комментарий от user_id_68054

нееет..

не выйдет..

команда fstrim — не сработает на линуксе.

тримить придётся на гостевой (вирутальной) Виндовой машине както

а уже только потом делать на хостовом линуксе:

cp --sparse=always hdd.img new_hdd.img        || exit 1
mv new_hdd.img hdd.img                        || exit 1
user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 1)
Ответ на: комментарий от Deleted

C virt-sparsify не поехало. Итоговый образ имеет тот же размер, что и начальный.

Очевидно действительно нужно как-то метить неиспользумое место в самой винде.

alex-123
() автор топика
Ответ на: комментарий от alex-123

2k8r2 сама умеет ужимать диск (хреново, правда, но умеет). В оснастке диспетчера дисков щелкни по диску и выбери «Shrink».

Korrvin
()
Ответ на: комментарий от Korrvin

В плане? Shrink сжимает раздел (том). Я говорю а файле с образом вирт.машины. Разделы в образе сжимать не надо. Файл с образом так и должен остаться динамически расширяемым.

alex-123
() автор топика
Ответ на: комментарий от alex-123

C virt-sparsify не поехало. Итоговый образ имеет тот же размер, что и начальный.

А ты как именно смотрел? Если оно действительно «sparsify», то вывод ls не изменится.

[root@localhost]# ls -lh image.qcow2 
-r--r--r--. 1 root root 1.1T Apr 24 01:37 image.qcow2
[root@localhost]# du -hs image.qcow2 
5.3G	image.qcow2

Deleted
()
Ответ на: комментарий от Deleted

метод с ntfswipe поехал. итог 36Г файл и он даже загрузился. Но очень долго...Не сильно промышленное решение, но зато работает.

Спасибо вам

alex-123
() автор топика
Ответ на: комментарий от nerve

сами пробывали? в моем случае экономия 200М всего. На 75Г это вообще копейки. А обрабатывается наверное больше часа.

alex-123
() автор топика

qemu-img convert умеет убирать нули. значит надо забить неиспользованное место нулями. в винде для этого есть sfill. в линуксе- dd if=/dev/zero. заполняем нулями файл вм пока не закончится место,стираем файл, вырубаем вм и делаем qemu-img convert

dyasny ★★★★★
()
Ответ на: комментарий от alex-123

этот метод действует с 2007го года, когда я его первый раз попробовал, он надежен и не имеет багов

dyasny ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.