GNU/Linux fitxers tipus “sparse”

Com explica la wikipèdia els fitxer tipus “sparse” optimitzen millor l’espai en disc no escrivint els blocks d’informació que no contenen dades.

Aquests tipus de fitxers són àmpliament utilitzats entorns per disc de les màquines virtuals tipus KVM o VMWARE per discs en mode ThinProvisioning.

En GNU/Linux (i d’altres *nix) hi han diferents comandes què ens permeten treballar amb aquest tipus de fitxers.

du: Per identificar si un fitxer està en mode sparse o no
ls: Per identificar si un fitxer està en mode sparse o no

cp: Per poder copiar aquest tipus de fitxers i/o convertir-los en sparse.

rsync, tar i potser algún altre que em deixo.

Exemples:

Per identificar si un fitxer està en mode sparse o no podem utilitzar tant ‘du’ com ‘ls’:

ls -lha
total 44G
drwxr-xr-x 2 root root   47 29 gen 21:37 .
drwxr-xr-x 5 root root 4,0K 21 des 12:49 ..
-rw-r--r-- 1 root root  32G 29 gen 21:55 disk0.raw
-rw-r--r-- 1 root root  32G 13 abr  2013 disk0.raw.original

du -sh disk0.raw.original 
32G	disk0.raw.original

ls -lksh disk0.raw.original 
32G -rw-r--r-- 1 root root 32G 13 abr  2013 disk0.raw.original

ls -lksh disk0.raw 
12G -rw-r--r-- 1 root root 32G 29 gen 21:55 disk0.raw

du -sh disk0.raw 
12G	disk0.raw

Es pot apreciar que amb un simple ‘ls’ el tamany que ocupen els fitxers és el real i no el que hauria de ser si els dos fitxers fóssin de caràcter “normal” que llavors ocuparien 64G.

En el cas que ens interessés convertir un fitxer “normal” a tipus sparse per estalviar disc real podem utilitzar ‘cp’:

cp --sparse=always fitxer.original fitxer.convertit.tipus.sparse

D’aquesta manera podem estalviar disc o taxes de transferència en cas de voler replicar màquines virtuals entre hosts per exemple.

En el cas del dd:

dd of=disk-server.img bs=1G seek=30 count=0