miércoles, 15 de junio de 2011

Compactar particiones con zerofree

Para realizar backups de imágenes de discos usadas en QEmu/KVM se puede optimizar usar zerofree. Este programa  escribe 0 (ceros) en los lugares de la imagen que NO está siendo usada por archivos, y que han sido usadas pero actualmente están libres (por ejemplo, en el lugar donde se haya creado un archivo que luego haya sido borrado).

Zerofree funciona para ext2/ext3/ext4, en particiones que no están montadas, o montadas solo-lectura. Esta utilidad es "inteligente" en el sentido que no hace "crecer" a los archivos sparse. 


Los pasos a seguir son:

  • cargar nbd

   ~$ sudo modprobe nbd max_part=16

  • asociar imagen de disco disk01.qcow2nbd1 y crear dispositivos asociados a particiones

   ~$ sudo qemu-nbd -c /dev/nbd1 -v disk01.qcow2
   ~$ sudo partprobe /dev/nbd1

  • ejecutar zerofree

   ~$ sudo zerofree -v /dev/nbd1p5

Listo! El archivo "disk01.qcow2" ocupa teóricamente 11G, pero como es un archivo sparse, en realidad está ocupado en disco sólo 1.9G:


   ~$ ls -lh disk01.qcow2
   -rw-r--r-- 1 root root 11G 2011-06-15 14:51 disk01.qcow2
   ~$ du -h disk01.qcow2 

   1.9G disk01.qcow2

El .tar ocupa sólo 918M:

   ~$ tar --sparse -cf disk01.qcow2.tar disk01.qcow2
   ~$ ls -lh disk01.qcow2.tar 
   -rw-r--r-- 1 horacio horacio 918M 2011-06-15 15:10 disk01.qcow2.tar

Y al comprimirlo solo nos queda 305M:

   $ gzip -1 disk01.qcow2.tar 
   $ ls -lh disk01.qcow2.tar.gz 
   -rw-r--r-- 1 horacio horacio 305M 2011-06-15 15:10 disk01.qcow2.tar.gz



   ~$ du -h *
   1.9G disk01.qcow2
   305M disk01.qcow2.tar.gz



En este caso, un archivo que ocupa inicialmente 1.9G lo llevamos a ocupar 918M (305M comprimido).

2 comentarios:

Fede Agostini dijo...

Buen post... ahora mi pregunta sería, como hago para recuperar uno de estos backups???

Software and Motorcycles dijo...

Descomprimís el archivo y listo, pisás el original, o lo usas para una maq. virtual nueva, etc.