resize: Fix handling of GPT and qcow2 (RHBZ#633766, RHBZ#633096).
authorRichard W.M. Jones <rjones@redhat.com>
Mon, 27 Sep 2010 16:00:45 +0000 (17:00 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Mon, 27 Sep 2010 17:28:30 +0000 (18:28 +0100)
commit0dc1f8e7aeb390e72125f459930850b8050318df
tree88fb73059d64f3b9462eacad4513a668fedec61f
parent7e4bf29fdf3067f3e83cd818a79ee522ae28e7ef
resize: Fix handling of GPT and qcow2 (RHBZ#633766, RHBZ#633096).

Previously we copied the bootloader data directly from the
source disk image to the target disk image using host file
operations (before launching libguestfs).  This has two problems:
firstly it has no chance of working with qcow2, and secondly
it didn't behave properly with GPT.

This changes the code so that everything is done through
libguestfs.  Block device sizes are now calculated properly
for qcow2 (RHBZ#633096) because this is done using the libguestfs
blockdev_getsize64 call.  The partition table is still created
by parted, but to workaround a bug in parted this is done before
copying the bootloader.  Finally the bootloader copy is done
using the new APIs pread-device and pwrite-device.

Shrinking now works, at least for simple cases (RHBZ#633766).
tools/virt-resize