Skip to main content

Making KVM Image File Sparse with virt-sparsify

Sparse files use disk space more efficiently. Only metadata information is written to disk instead of the empty space that constitutes the block, using less disk space. Sparse term corresponds to thin-provisioned image in the VMware jargon. To sparsify a vm guest image first you shut the guest down. In my KVM Host there is a non-sparse kvm image file which is identified like this:

# ls -lsh
61G -rw-r--r-- 1 qemu qemu 60G Jun 22 08:15 SRVTEST01.img

As seen from the output of the ls command SRVTEST01.img guest image occupies all of the file. To make it sparse:

# virt-sparsify SRVTEST01.img SRVTEST01_SPARSED.img
qemu-img version 0.9
Input disk virtual size = 64424509440 bytes (60.0G)

WARNING: There may not be enough free space on /tmp.
You may need to set TMPDIR to point to a directory with more free space.
Max needed: 60.0G. Free: 12.5G. May need another 47.5G.

Note this is an overestimate. If the guest disk is full of data
then not as much free space would be required.
You can ignore this warning or change it to a hard failure using the
--check-tmpdir=(ignore|continue|warn|fail) option. See virt-sparsify(1).
Press RETURN to continue or ^C to quit.
^C

Oops. /tmp is not enough to create temporary files. Change TMPDIR variable:

# export TMPDIR=/vms01
# virt-sparsify SRVTEST01.img SRVTEST01_SPARSED.img
qemu-img version 0.9
Input disk virtual size = 64424509440 bytes (60.0G)
Create overlay file in /vms01 to protect source disk ...

Examine source disk ...
100% ⟦#############################################################⟧ 00:00
Fill free space in /dev/sda1 with zero ...
100% ⟦#############################################################⟧ --:--
Fill free space in /dev/vg_srvtest01/lv_home with zero ...
100% ⟦#############################################################⟧ --:--
Fill free space in /dev/vg_srvtest01/lv_root with zero ...
100% ⟦#############################################################⟧ 00:00
Clearing Linux swap on /dev/vg_srvtest01/lv_swap ...
100% ⟦#############################################################⟧ 00:00
Copy to destination and make sparse ...

Sparsify operation completed with no errors. Before deleting the old
disk, carefully check that the target disk boots and works correctly.

# sync
# ls -lsh
61G -rw-r--r-- 1 qemu qemu 60G Jun 22 08:15 SRVTEST01.img
8.4G -rw-r--r-- 1 qemu qemu 60G Jun 22 08:15 SRVTEST01_SPARSED.img

Now sparsed image occupies only 8.4G.

# virsh list --all
Id Name State
--------------------------------------------------
- SRVTEST01 shut off

# virsh dumpxml SRVTEST01 > /vms01/SRVTEST01_SPARSED.xml
# vi /vms01/SRVTEST01_SPARSED.xml
--Change all SRVTEST01 occurences to SRVTEST01_SPARSED in the xml file here--

# virsh create /vms01/SRVTEST01_SPARSED.xml
Domain SRVTEST01_SPARSED created from /vms01/SRVTEST01_SPARSED.xml

# virsh list --all
Id Name State
--------------------------------------------------
10 SRVTEST01_SPARSED running
- SRVTEST01 shut off

# virsh undefine SRVTEST01
Domain SRVTEST01 has been undefined

# virsh list --all
Id Name State
--------------------------------------------------
10 SRVTEST01_SPARSED running

That's all. If everything is ok and SRVTEST01_SPARSED is running then SRVTEST01.img can be deleted.

Comments

Popular posts from this blog