libguestfs-tools Virtual Machine Image Tools
http://libguestfs.org/guestfish.1.html
http://libguestfs.org/guestfs-recipes.1.html
apt-get install libguestfs-tools
Image Information
Partition information
- virt-filesystems -lh --extra --uuid -a example.img
-
Name Type VFS Label Size Parent /dev/sda1 filesystem ext4 - 24G - /dev/sda2 filesystem unknown - 1.0K - /dev/sda5 filesystem swap - 1022M -
-
- virt-filesystems --all --long --uuid -h -a example.img
- Even more information :-)
Disk Usage
- virt-df -h -a example.img
-
Filesystem Size Used Available Use% example.img:/dev/sda1 23G 14G 8.6G 59%
-
Make image sparse / smaller
Note: also works for a already sparse image to make it even smaller
- mkdir /srv/tmp
- Create larger tmp area
- virt-sparsify --temp=/srv/tmp/ example.img example.sparse.img
- Copys the image to a sparse image
- On 16.04: virt-sparsify --tmp /srv/tmp/ example.img example.sparse.img
- ls -lahs
-
98G -rw------- 1 root root 108G Oct 28 19:58 example.img 49G -rw------- 1 root root 108G Nov 26 13:10 example.sparse.img
-
- virt-sparsify --in-place example.img
- Sparsifys the image in place (overwriting it)
make small and convert to compressed qcow2 for backup:
- fsck with guestfish (see below)
- TMPDIR=/var/lib/libvirt/images/tmp virt-sparsify -v --check-tmpdir fail --compress --convert qcow2 example.com.img example.com.minified.qcow2
Remove partitions
- virt-filesystems --partitions --long -a example.img
-
Name Type MBR Size Parent /dev/sda1 partition 83 25768755200 /dev/sda /dev/sda2 partition 05 1024 /dev/sda #locical base partition /dev/sda5 partition 82 1071644672 /dev/sda
-
- truncate -s 26G example.withoutswap.img
- virt-resize --no-extra-partition --delete /dev/sda2 bigfish.ull.at.sparse.img example.withoutswap.img
Shrink Image
- guestfish -a example.img
- run
- list-filesystems
- /dev/sda1: ext4
/dev/sda2: unknown
/dev/sda5: swap
- /dev/sda1: ext4
- e2fsck-f /dev/sda1
- resize2fs-size /dev/sda1 16G
- e2fsck-f /dev/sda1
- quit
- truncate -s 17G example.shrinked.img
- Prepare empty file
- virt-resize --shrink /dev/sda1 example.img example.shrinked.img
- virt-resize: error: libguestfs error: resize2fs: e2fsck 1.42.13
(17-May-2015)
The filesystem size (according to the superblock) is 4194304 blocks
The physical size of the device is 4194256 blocks
Either the superblock or the partition table is likely to be corrupt!
- virt-resize: error: libguestfs error: resize2fs: e2fsck 1.42.13
- try again with removing swap
- truncate -s 26G example.withoutswap.img
- virt-resize --no-extra-partition --delete /dev/sda2 example.img example.withoutswap.img
- virt-resize --shrink /dev/sda1 example.withoutswap.img example.shrinked.img
- virt-filesystems --partitions --long -a bigfish.ull.at.shrinked.img
-
Name Type MBR Size Parent /dev/sda1 partition 83 18251382784 /dev/sda
-
Expand/grow partition in image
With removal of swap partition, which is added later on in the vm
- ls -lhs example.img
-
48G -rw------- 1 syslog uuidd 100G Oct 28 19:58
-
- virt-filesystems --partitions --long -a example.img
-
Name Type MBR Size Parent /dev/sda1 partition 83 106300440576 /dev/sda /dev/sda2 partition 05 1024 /dev/sda /dev/sda5 partition 82 1070596096 /dev/sda
-
- truncate -s 150G example.withoutswap.img
- ls -l example.withoutswap.img
-
-rw-r--r-- 1 root root 161061273600 Nov 30 11:34
-
- We want to leave space for a small swap partition of 2GB
- echo "(161061273600 - 106300440576 - (2 * 1073741824)) / 1024 / 1024" | bc
- Total img size - existing partition size - space for new swap
- 50176
- virt-resize --no-extra-partition --delete /dev/sda2 --resize /dev/sda1=+50176M example.img example.withoutswap.img
- ls -lahs example.withoutswap.img
-
47G -rw-r--r-- 1 root root 150G Nov 30 12:00
-
- virt-filesystems --all --long --uuid -h -a example.withoutswap.img
-
Name Type VFS Label MBR Size Parent UUID /dev/sda1 filesystem ext4 - - 148G - 5245bfb5-23a2-43f8-91d9-37adbc49001b /dev/sda1 partition - - 83 148G /dev/sda - /dev/sda device - - - 150G - -
-
Finaly boot the vm, add the swap partition and update /etc/fstab