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

Creating Multiple VLANs over Bonding Interfaces with Proper Routing on a Centos Linux Host

In this post, I am going to explain configuring multiple VLANs on a bond interface. First and foremost, I would like to describe the environment and give details of the infrastructure. The server has 4 Ethernet links to a layer 3 switch with names: enp3s0f0, enp3s0f1, enp4s0f0, enp4s0f1 There are two bond interfaces both configured as active-backup bond0, bond1 enp4s0f0 and enp4s0f1 interfaces are bonded as bond0. Bond0 is for making ssh connections and management only so corresponding switch ports are not configured in trunk mode. enp3s0f0 and enp3s0f1 interfaces are bonded as bond1. Bond1 is for data and corresponding switch ports are configured in trunk mode. Bond0 is the default gateway for the server and has IP address 10.1.10.11 Bond1 has three subinterfaces with VLAN 4, 36, 41. IP addresses are 10.1.3.11, 10.1.35.11, 10.1.40.11 respectively. Proper communication with other servers on the network we should use routing tables. There are three

Sending Jboss Server Logs to Logstash Using Filebeat with Multiline Support

In addition to sending system logs to logstash, it is possible to add a prospector section to the filebeat.yml for jboss server logs. Sometimes jboss server.log has single events made up from several lines of messages. In such cases Filebeat should be configured for a multiline prospector. Filebeat takes lines do not start with a date pattern (look at pattern in the multiline section "^[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}" and negate section is set to true ) and combines them with the previous line that starts with a date pattern. server.log file excerpt where DatePattern: yyyy-MM-dd-HH and ConversionPattern: %d %-5p [%c] %m%n Logstash filter: