Bug 1038977

Summary: libguestfs does not works together with xfs + 4k sector size
Product: Red Hat Enterprise Linux 6 Reporter: Attila Fazekas <afazekas>
Component: libguestfsAssignee: Pino Toscano <ptoscano>
Status: CLOSED ERRATA QA Contact: Virtualization Bugs <virt-bugs>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 6.5CC: afazekas, huzhan, jherrman, jraju, leiwang, mbukatov, ptoscano, rjones, wshi
Target Milestone: rcKeywords: Reopened
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: libguestfs-1.20.11-13.el6 Doc Type: Bug Fix
Doc Text:
The libguestfs utilities were not able to use disk images on XFS file systems with 4-kilobyte sector size. This update introduces the "cachemode" parameter for the add_drive API, which controls drive caching and has a default value which allows disk images stored on the described file systems to be usable.
Story Points: ---
Clone Of: Environment:
Last Closed: 2015-07-22 05:55:10 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:

Description Attila Fazekas 2013-12-06 09:44:13 UTC
Description of problem:
libguestfs using cache type equivalent to quemu's cache=none option.
Basically it means disk images will be opened with O_DIRECT option.

xfs requires all I/O operation count/size needs to be integer multiple of the sector size.

If my sector size is 4k, the 512 byte read is invalid:

strace -Ff -e pread,read,open,write,read guestfish -a Fedora-x86_64-19-20130627-sda.qcow2 run
...
[pid 18605] open("Fedora-x86_64-19-20130627-sda.qcow2", O_RDWR|O_DIRECT|O_CLOEXEC) = 6
[pid 18616] pread(6, 0x7fce10000a00, 512, 0) = -1 EINVAL (Invalid argument)
....

Version-Release number of selected component (if applicable):
qemu-img-0.12.1.2-2.415.el6_5.3.x86_64
qemu-kvm-0.12.1.2-2.415.el6_5.3.x86_64
gpxe-roms-qemu-0.9.7-6.10.el6.noarch
libguestfs-1.20.11-2.el6.x86_64
libguestfs-tools-c-1.20.11-2.el6.x86_64


How reproducible:
always

Steps to Reproduce:
1. mkfs.xfs -f -s size=4096  /dev/vdb
2. mkdir /mnt/4k
3. mount /dev/vdb /mnt/4k
4. cd /mnt/4k
5. wget http://download.fedoraproject.org/pub/fedora/linux/releases/19/Images/x86_64/Fedora-x86_64-19-20130627-sda.qcow2
6. guestfish -a Fedora-x86_64-19-20130627-sda.qcow2 run


Actual results:
[root@xfs 4k]# guestfish -a Fedora-x86_64-19-20130627-sda.qcow2 run
libguestfs: error: /usr/libexec/qemu-kvm exited with error status 1.
To see full error messages you may need to enable debugging.
See http://libguestfs.org/guestfs-faq.1.html#debugging-libguestfs
libguestfs: error: guestfs_launch failed.
See http://libguestfs.org/guestfs-faq.1.html#debugging-libguestfs
and/or run 'libguestfs-test-tool'.

Expected results:
[root@xfs 512b]# guestfish -a Fedora-x86_64-19-20130627-sda.qcow2 run
[root@xfs 512b]# 

Do not use O_DIRECT.

Additional info:

The O_DIRECT is not used when the file-system refusing to open the image with O_DIRECT (like on tmpfs), but in the above situation it is failing on the read/write alignment and size requirements.

Newer version of the libguestfs are allowing to use the "writeback" mode.

(Disk with 4k physical sector size are very common in the market, probably in 2014 several now disk will also have 4k logical sector size.)

Comment 1 Richard W.M. Jones 2013-12-06 09:55:33 UTC
Upstream fix is:

https://github.com/libguestfs/libguestfs/commit/749e947bb0103f19feda0f29b6cbbf3cbfa350da
+ a few patches that follow that one.

(Is there a reason why this bug needs to be private?)

Comment 2 Richard W.M. Jones 2014-03-24 08:13:02 UTC
Pino: Fixing this involves backporting all the cachemode
stuff to RHEL 6.  Up to you if you can do this or think it
is too risky for an old stable RHEL release.

Comment 3 Richard W.M. Jones 2014-06-20 13:21:20 UTC
We decided not to fix this in RHEL 6.  However it has been
fixed in RHEL 7.0 and above.

Comment 4 Richard W.M. Jones 2014-08-04 09:27:22 UTC
I'm reopening this on the basis that two people have reported this
bug in RHOS when using XFS as a backing store for disk images.

Comment 8 Hu Zhang 2015-03-10 08:37:05 UTC
Verified with the package version:
libguestfs-1.20.11-14.el6.x86_64

Verify steps:
1. mkfs.xfs -f -s size=4096  test.raw
2. mkdir /mnt/4k
3. mount test.raw /mnt/4k -o loop
4. cd /mnt/4k
5. wget http://download.fedoraproject.org/pub/fedora/linux/releases/19/Images/x86_64/Fedora-x86_64-19-20130627-sda.qcow2
6. # guestfish -a Fedora-x86_64-19-20130627-sda.qcow2
   ><fs> run
   ><fs> list-filesystems 
   /dev/sda1: ext4

So verified.

Comment 13 errata-xmlrpc 2015-07-22 05:55:10 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-1444.html