The libguestfs project has a number of other useful tools, including:
- virt-edit for editing a file inside of an image.
- virt-df for displaying free space inside of an image.
- virt-resize for resizing an image.
- virt-sysprep for preparing an image for distribution (for example, delete SSH host keys, remove MAC address info, or remove user accounts).
- virt-sparsify for making an image sparse.
- virt-p2v for converting a physical machine to an image that runs on KVM.
- virt-v2v for converting Xen and VMware images to KVM images.
Modify a single file inside of an image
This example shows how to use virt-edit to modify a file. The command can take either a filename as an argument with the -a flag, or a domain name as an argument with the -d flag. The following examples shows how to use this to modify the /etc/shadow file in instance with libvirt domain name instance-000000e1 that is currently running:
# virsh shutdown instance-000000e1
# virt-edit -d instance-000000e1 /etc/ssh/sshd_config
# virsh start instance-000000e1
Resize an image
Here is an example of how to use virt-resize to resize an image. Assume we have a 16 GB Windows image in qcow2 format that we want to resize to 50 GB.
- First, we use virt-filesystems to identify the partitions:
# virt-filesystems --long --parts --blkdevs -h -a /data/images/win2012.qcow2 Name Type MBR Size Parent /dev/sda1 partition 07 350M /dev/sda /dev/sda2 partition 07 16G /dev/sda /dev/sda device - 16G -
- In this case, it is the
/dev/sda2partition that we want to resize. We create a new qcow2 image and use the virt-resize command to write a resized copy of the original into the new image:# qemu-img create -f qcow2 /data/images/win2012-50gb.qcow2 50G # virt-resize --expand /dev/sda2 /data/images/win2012.qcow2 \ /data/images/win2012-50gb.qcow2 Examining /data/images/win2012.qcow2 ... ********** Summary of changes: /dev/sda1: This partition will be left alone. /dev/sda2: This partition will be resized from 15.7G to 49.7G. The filesystem ntfs on /dev/sda2 will be expanded using the 'ntfsresize' method. ********** Setting up initial partition table on /data/images/win2012-50gb.qcow2 ... Copying /dev/sda1 ... 100% [ ] 00:00 Copying /dev/sda2 ... 100% [ ] 00:00 Expanding /dev/sda2 using the 'ntfsresize' method ... Resize operation completed with no errors. Before deleting the old disk, carefully check that the resized disk boots and works correctly.