Bug 914802
| Summary: | Support backup vendors in qemu to access qcow disk readonly (qemu-img metadata dump) | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux 6 | Reporter: | Bhavna Sarathy <bsarathy> | ||||||
| Component: | qemu-kvm | Assignee: | Paolo Bonzini <pbonzini> | ||||||
| Status: | CLOSED ERRATA | QA Contact: | Virtualization Bugs <virt-bugs> | ||||||
| Severity: | high | Docs Contact: | |||||||
| Priority: | high | ||||||||
| Version: | 6.4 | CC: | acathrow, agk, areis, asias, bsarathy, chayang, coughlan, jbrassow, jgalipea, juzhang, knoel, lnovich, michen, mkenneth, mpatocka, msnitzer, nkinder, pbonzini, qzhang, rwheeler, sct, shu, sluo, stefanha, tlavigne, virt-maint, xutian, zkabelac | ||||||
| Target Milestone: | rc | Keywords: | FutureFeature | ||||||
| Target Release: | --- | ||||||||
| Hardware: | Unspecified | ||||||||
| OS: | Unspecified | ||||||||
| Whiteboard: | |||||||||
| Fixed In Version: | qemu-kvm-0.12.1.2-2.403.el6 | Doc Type: | Release Note | ||||||
| Doc Text: |
Support for Dumping Metadata of Virtual Disks
This low-level feature introduces a new command option "qemu-img map" to dump all the information that is required for qcow2 images to be mapped to a block device via LVM. As a result, virtual machine images (with the virtual machine shutdown) can be accessed as block devices (or directly) without knowing the details of the qcow2 image format. This is useful to let backup applications read the contents of qcow2 guest images.
|
Story Points: | --- | ||||||
| Clone Of: | 906042 | ||||||||
| : | 977088 989646 (view as bug list) | Environment: | |||||||
| Last Closed: | 2013-11-21 06:38: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: | |||||||||
| Bug Depends On: | 914801, 1010610 | ||||||||
| Bug Blocks: | 883503, 883504, 896690, 906042, 960054, 963405, 977088, 989646, 1000882 | ||||||||
| Attachments: |
|
||||||||
|
Comment 2
RHEL Program Management
2013-03-01 06:47:19 UTC
Yes, I'll add instructions once the patches are closer to being ready. Hi Paolo, What's status of this feature? Thanks, Xu Hi Paolo, I'd like to verify this feature on build qemu-kvm-0.12.1.2-2.403.el6, would you give us a steps about how to verify this feature? Thanks, Xu Created attachment 799911 [details]
testing tool
The attached program can be used to test "qemu-img map". It will convert an image to raw, similar to "qemu-img convert" but using the output of "qemu-img map". You can test its result against "qemu-img convert".
I suggest testing the following cases:
(1) raw image
(2) qcow2 image
(3) qcow2 image with raw backing file
(4) qcow2 image with qcow2 backing file
(5) qcow2 image with raw backing file, after doing block_resize of the image
(6) qcow2 image with qcow2 backing file, after doing block_resize of the image
(In reply to Paolo Bonzini from comment #27) > Created attachment 799911 [details] > testing tool > > The attached program can be used to test "qemu-img map". It will convert an > image to raw, similar to "qemu-img convert" but using the output of > "qemu-img map". You can test its result against "qemu-img convert". > > I suggest testing the following cases: > > (1) raw image > > (2) qcow2 image > > (3) qcow2 image with raw backing file > > (4) qcow2 image with qcow2 backing file > > (5) qcow2 image with raw backing file, after doing block_resize of the image > > (6) qcow2 image with qcow2 backing file, after doing block_resize of the > image Hi Paolo, it looks tool in attachment doesn't for qemu-img-0.12.1.2-2.403.el6.x86_64 package; [root@localhost qemu-to-raw]# ./qemu-to-raw.py RHEL-Server-6.4-64-virtio.qcow2 cvt_6.4.raw info: invalid option -- '-' check source code found that "qemu-img info --output=json --backing-chain RHEL-Server-6.4-64-virtio.qcow2" doesn't work because options '--output' and '--backing-chain' not support by qemu-img-0.12.1.2-2.403.el6.x86_64; would you like to update the test tool, Thanks very much; Xu Hi Paolo,
Verfiy this feature on qemu-img-0.12.1.2-2.409.el6.x86_64 with your tool in attachment, always hang at get qemu-img map results, would you help to update the tool.
yajl version 2.0.
[root@localhost qemu-to-raw]# ps aux |grep qemu-to-raw.py
root 6868 0.0 0.0 148344 6372 pts/0 S 21:33 0:00 python qemu-to-raw.py RHEL-Server-6.4-64-virtio.qcow2 target.raw
[root@localhost qemu-to-raw]# strace -p 6868
Process 6868 attached - interrupt to quit
wait4(6873,
[root@localhost qemu-to-raw]# ps aux |grep 6873
root 6873 0.0 0.0 51976 2368 pts/0 S 21:33 0:00 qemu-img map --output=json RHEL-Server-6.4-64-virtio.qcow2
execute "qemu-img map --output=json RHEL-Server-6.4-64-virtio.qcow2" I can get json strings like:
[{ "start": 0, "length": 720896, "depth": 0, "zero": false, "data": true, "offset": 327680},
{ "start": 720896, "length": 1048576, "depth": 0, "zero": false, "data": true, "offset": 2162688},
{ "start": 1769472, "length": 196608, "depth": 0, "zero": false, "data": true, "offset": 4063232},
....
{ "start": 21464350720, "length": 9437184, "depth": 0, "zero": true, "data": false},
{ "start": 21473787904, "length": 1048576, "depth": 0, "zero": false, "data": true, "offset": 1114112}]
thanks,
Xu
(In reply to xu from comment #29) > Hi Paolo, > > Verfiy this feature on qemu-img-0.12.1.2-2.409.el6.x86_64 with your tool in > attachment, always hang at get qemu-img map results, would you help to > update the tool. > > yajl version 2.0. yajl version 2.0.3 > > [root@localhost qemu-to-raw]# ps aux |grep qemu-to-raw.py > root 6868 0.0 0.0 148344 6372 pts/0 S 21:33 0:00 python > qemu-to-raw.py RHEL-Server-6.4-64-virtio.qcow2 target.raw > > [root@localhost qemu-to-raw]# strace -p 6868 > Process 6868 attached - interrupt to quit > wait4(6873, > > [root@localhost qemu-to-raw]# ps aux |grep 6873 > root 6873 0.0 0.0 51976 2368 pts/0 S 21:33 0:00 qemu-img > map --output=json RHEL-Server-6.4-64-virtio.qcow2 > > execute "qemu-img map --output=json RHEL-Server-6.4-64-virtio.qcow2" I can > get json strings like: > [{ "start": 0, "length": 720896, "depth": 0, "zero": false, "data": true, > "offset": 327680}, > { "start": 720896, "length": 1048576, "depth": 0, "zero": false, "data": > true, "offset": 2162688}, > { "start": 1769472, "length": 196608, "depth": 0, "zero": false, "data": > true, "offset": 4063232}, > .... > { "start": 21464350720, "length": 9437184, "depth": 0, "zero": true, "data": > false}, > { "start": 21473787904, "length": 1048576, "depth": 0, "zero": false, > "data": true, "offset": 1114112}] > > thanks, > Xu Created attachment 810122 [details]
testing tool v2
Testing tool, now working with RHEL6's older Python. Also yajl is not required anymore.
(In reply to Paolo Bonzini from comment #31) > Created attachment 810122 [details] > testing tool v2 > > Testing tool, now working with RHEL6's older Python. Also yajl is not > required anymore. Hi Paolo, thanks for your qucik fix, I will verify this feature today; Thanks, Xu Test below scenarios both qcow2 and raw image file
scenarios 1:
test pass when image format both qcow2 and raw:
1. boot guest with raw/qcow2 image, then create 400M file in "/root" folder;
/usr/libexec/qemu-kvm \
-drive file=./rhel7.0_x86_64.qcow2,if=none,cache=none,format=qcow2,media=disk,id=d1\
-device virtio-blk-pci,drive=d1,id=hd1 \
-smp 2 -m 1024 -vnc :1 \
-enable-kvm \
-qmp tcp:0:1234,server,nowait \
-monitor stdio
login guest, create big file
dd if=/dev/urandom of=/root/test.img bs=4M count=100; sync;
recording md5sum of the file
cd /root/ && md5sum test.img > test.md5
2. convert image to raw
python qemu-to-raw/qemu-to-raw.py ./rhel7.0_x86_64.qcow2 target.raw
3. map image target.raw to logcial volume
losetup `losetup -f` target.raw
losetup -j target.raw (get loop device is /dev/loop0)
kpartx -av /dev/loop0
pvscan; vgscan; lvscan
4. active the logical volume
lvchange -ay /dev/rhel/root (lv name)
5. check md5sum not changed
mount /dev/rhel/root /mnt
cd /mnt/root && md5sum -c test.md5
md5sum check OK
scenarios 2:
test pass when image has qcow2/raw backingfile;
1. create snapshot for rhel7.0_x86_64.qcow2
qemu-img create -f qcow2 -b rhel7.0_x86_64.qcow2 sn1.qcow2
2. boot guest with sn1.qcow2
/usr/libexec/qemu-kvm \
-drive file=./sn1.qcow2,if=none,cache=none,format=qcow2,media=disk,id=d1\
-device virtio-blk-pci,drive=d1,id=hd1 \
-smp 2 -m 1024 -vnc :1 \
-enable-kvm \
-qmp tcp:0:1234,server,nowait \
-monitor stdio
3. create big file in guest
dd if=/dev/urandom of=/root/test2.img bs=4M count=100; sync;
recording md5sum of the file
cd /root/ && md5sum test2.img > test2.md5
4. convert image to raw
python qemu-to-raw/qemu-to-raw.py ./sn1.qcow2 target.raw
5. map image target.raw to logcial volume
losetup `losetup -f` target.raw
losetup -j target.raw (get loop device is /dev/loop0)
kpartx -av /dev/loop0
pvscan; vgscan; lvscan
6. active the logical volume
lvchange -ay /dev/rhel/root (lv name)
7. check md5sum not changed
mount /dev/rhel/root /mnt
cd /mnt/root && md5sum -c test2.md5
md5sum check OK
scenarios 3:
base on scenarios2 steps 1 - 3,
add step, do block_resize in monitor, before covert to raw
block_reszie d1 40G
then do qemu-img info sn1.qcow2 in another terminal, show virtual disk size changed to 40G
then, do step4 - step 7 in scenarios 2:
md5sum check OK too
Base on above test results, this bug has fixed;
Thanks,
Xu
(In reply to xu from comment #33) > Test below scenarios both qcow2 and raw image file > scenarios 1: > > test pass when image format both qcow2 and raw: > > 1. boot guest with raw/qcow2 image, then create 400M file in "/root" folder; > > /usr/libexec/qemu-kvm \ > -drive > file=./rhel7.0_x86_64.qcow2,if=none,cache=none,format=qcow2,media=disk,id=d1\ > -device virtio-blk-pci,drive=d1,id=hd1 \ > -smp 2 -m 1024 -vnc :1 \ > -enable-kvm \ > -qmp tcp:0:1234,server,nowait \ > -monitor stdio > > login guest, create big file > dd if=/dev/urandom of=/root/test.img bs=4M count=100; sync; > > recording md5sum of the file > > cd /root/ && md5sum test.img > test.md5 > > 2. convert image to raw > python qemu-to-raw/qemu-to-raw.py ./rhel7.0_x86_64.qcow2 target.raw > 3. map image target.raw to logcial volume > losetup `losetup -f` target.raw > losetup -j target.raw (get loop device is /dev/loop0) > kpartx -av /dev/loop0 > pvscan; vgscan; lvscan > 4. active the logical volume > lvchange -ay /dev/rhel/root (lv name) > 5. check md5sum not changed > mount /dev/rhel/root /mnt > cd /mnt/root && md5sum -c test.md5 > md5sum check OK > > scenarios 2: > test pass when image has qcow2/raw backingfile; > > 1. create snapshot for rhel7.0_x86_64.qcow2 > qemu-img create -f qcow2 -b rhel7.0_x86_64.qcow2 sn1.qcow2 > 2. boot guest with sn1.qcow2 > /usr/libexec/qemu-kvm \ > -drive file=./sn1.qcow2,if=none,cache=none,format=qcow2,media=disk,id=d1\ > -device virtio-blk-pci,drive=d1,id=hd1 \ > -smp 2 -m 1024 -vnc :1 \ > -enable-kvm \ > -qmp tcp:0:1234,server,nowait \ > -monitor stdio > 3. create big file in guest > dd if=/dev/urandom of=/root/test2.img bs=4M count=100; sync; > > recording md5sum of the file > > cd /root/ && md5sum test2.img > test2.md5 > > 4. convert image to raw > python qemu-to-raw/qemu-to-raw.py ./sn1.qcow2 target.raw > 5. map image target.raw to logcial volume > losetup `losetup -f` target.raw > losetup -j target.raw (get loop device is /dev/loop0) > kpartx -av /dev/loop0 > pvscan; vgscan; lvscan > 6. active the logical volume > lvchange -ay /dev/rhel/root (lv name) > 7. check md5sum not changed > mount /dev/rhel/root /mnt > cd /mnt/root && md5sum -c test2.md5 > md5sum check OK > > > scenarios 3: > base on scenarios2 steps 1 - 3, > > add step, do block_resize in monitor, before covert to raw > > block_reszie d1 40G > > then do qemu-img info sn1.qcow2 in another terminal, show virtual disk size > changed to 40G > > then, do step4 - step 7 in scenarios 2: > > md5sum check OK too > > Base on above test results, this bug has fixed; > > Thanks, > Xu verification pass on packages qemu-img-0.12.1.2-2.410.el6.x86_64 Hi, Paolo Could you help have a look at comment 33? We tested with qemu-img-0.12.1.2-2.410.el6.x86_64. Is this enough to call the bug verified pass? Any other test need to implement please let us know. Thanks, Qunfang Yes, it should be enough. 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. http://rhn.redhat.com/errata/RHSA-2013-1553.html |