Bug 1172660

Summary: virt-resize --expand fails on ubuntu-14.04.img image
Product: Red Hat Enterprise Linux 7 Reporter: Richard W.M. Jones <rjones>
Component: libguestfsAssignee: Richard W.M. Jones <rjones>
Status: CLOSED ERRATA QA Contact: Virtualization Bugs <virt-bugs>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 7.2CC: hutao, huzhan, leiwang, mbooth, ptoscano, rbalakri, sylvain.pasche, wshi
Target Milestone: rc   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: libguestfs-1.28.1-1.25.el7 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: 1169015 Environment:
Last Closed: 2015-11-19 06:58:12 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 1169015    
Bug Blocks:    

Description Richard W.M. Jones 2014-12-10 14:13:45 UTC
+++ This bug was initially created as a clone of Bug #1169015 +++

Description of problem:

virt-resize fails with an "write: No space left on device" error when trying to expand the http://libguestfs.org/download/builder/ubuntu-14.04.xz image.

I encountered this error by running virt-builder with --size=10G on Fedora 21. It used to work on Fedora 20.

Version-Release number of selected component (if applicable):

rpm -q libguestfs-tools-c 
libguestfs-tools-c-1.28.2-3.fc21.x86_64

Steps to Reproduce:
1. curl http://libguestfs.org/download/builder/ubuntu-14.04.xz | xz -cd > ubuntu-14.04.img
2. virt-resize -v -x --expand=/dev/sda1 ubuntu-14.04.img 10G.img 2>&1  | tee virt-resize-log.txt

Actual results:

virt-resize: error: libguestfs error: copy_device_to_device: /dev/sdb2: 
write: No space left on device

(full detail in attached log file)

--- Additional comment from Sylvain Pasche on 2014-11-28 17:48:27 EST ---

I forgot the "truncate -s10G 10G.img" command just before running virt-resize.

--- Additional comment from Richard W.M. Jones on 2014-11-29 02:26:44 EST ---

I suspect https://github.com/libguestfs/libguestfs/commit/fc34e2d16c2d13d6ae7a381ba931e345ab5ae56d
(which I don't think is wrong) which changes the type
we use when creating the extended partition.  Previously
it would create it as "primary", now it is created as
"extended".

--- Additional comment from Sylvain Pasche on 2014-11-29 08:28:53 EST ---

Looks like it is, if I revert that change it succeeds (tried with libguestfs-1.29.11).

--- Additional comment from Hu Tao on 2014-12-07 22:26:21 EST ---



--- Additional comment from Hu Tao on 2014-12-07 22:29:22 EST ---

Please try the attached patch and feedback. Thanks!

The root cause of the problem is that the size of an extended partition reported by Linux is alwas 1024 bytes, so when you are writing to the device (such as /dev/sdb2) corresponding to the extended partition, you can only write 1024 bytes.

--- Additional comment from Richard W.M. Jones on 2014-12-08 09:11:21 EST ---

Hu Tao's patch has gone upstream, please try it out:

https://github.com/libguestfs/libguestfs/commit/9d6f0b6a86d68438b27a3d783677c63f39ec6627

--- Additional comment from Sylvain Pasche on 2014-12-09 15:33:34 EST ---

I tried the patch on top of libguestfs-1.29.13 and the resizing succeeds now with ubuntu-14.04.img.

Thanks!

--- Additional comment from Richard W.M. Jones on 2014-12-10 09:13:10 EST ---

Closing / upstream.

This is likely to be a problem on Fedora 21 & RHEL 7.1 too,
so I am going to clone it.

Comment 1 Hu Zhang 2015-01-15 08:04:40 UTC
Reproduced this bug with the package:
libguestfs-tools-c-1.28.1-1.18.el7.x86_64

Reproduce steps:
1. truncate -s 10G 10G.img
2. virt-resize -v -x --expand=/dev/sda1 ubuntu-14.04.img 10G.img 2>&1  | tee virt-resize-log.txt

Error returns:
libguestfs: trace: copy_device_to_device = -1 (error)
virt-resize: error: libguestfs error: copy_device_to_device: /dev/sdb2: 
write: No space left on device

Comment 2 Richard W.M. Jones 2015-04-13 13:42:13 UTC
A simpler reproducer for this is:

  $ virt-builder ubuntu-14.04 --size 50G

With 1:libguestfs-tools-c-1.28.1-1.18.el7.x86_64 this will
fail with an error message:

[  10.0] Resizing (using virt-resize) to expand the disk to 50.0G
virt-resize: error: libguestfs error: copy_device_to_device: /dev/sdb2: 
write: No space left on device

With the fixed virt-builder, you should see the virt-builder complete
successfully.

Comment 4 Hu Zhang 2015-09-11 10:49:41 UTC
Verified with the package:
libguestfs-tools-c-1.28.1-1.52.el7.x86_64

Verify steps:
1. truncate -s 10G 10G.img
2. virt-resize -v -x --expand=/dev/sda1 ubuntu-14.04.img 10G.img 2>&1  | tee virt-resize-log.txt
...
libguestfs: calling virDomainDestroy "guestfs-3p0icg9ei6m89bsq" flags=VIR_DOMAIN_DESTROY_GRACEFUL
libguestfs: trace: shutdown = 0
libguestfs: trace: close
libguestfs: closing guestfs handle 0xdd4f10 (state 0)
libguestfs: command: run: rm
libguestfs: command: run: \ -rf /tmp/libguestfsLLzpkF

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

So no errors return. Verified.

Comment 6 errata-xmlrpc 2015-11-19 06:58:12 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://rhn.redhat.com/errata/RHBA-2015-2183.html