[libvirt] [PATCH 2/2] util: storage: add JSON backing volume parser 'raw' block driver
Richard W.M. Jones
rjones at redhat.com
Wed Feb 15 12:01:08 UTC 2017
On Wed, Feb 15, 2017 at 12:53:39PM +0100, Tomáš Golembiovský wrote:
> On Wed, 15 Feb 2017 10:55:24 +0000
> "Richard W.M. Jones" <rjones at redhat.com> wrote:
>
> > On Tue, Feb 14, 2017 at 10:03:54PM +0100, Tomáš Golembiovský wrote:
> > > Hi,
> > >
> > > On Tue, 14 Feb 2017 15:58:45 +0000
> > > "Richard W.M. Jones" <rjones at redhat.com> wrote:
> > >
> > > > The patches compile.
> > > >
> > > > I looked at both commits and they at least superficially seem
> > > > sensible. I'm not intimately familiar enough with the original code
> > > > to review this fully.
> > > >
> > > > However I want to try to test this using libguestfs. I believe the
> > > > following test case should be sufficient:
> > > >
> > > > $ cd /var/tmp
> > > > $ truncate -s 1M backing.img
> > > > $ qemu-img create \
> > > > -b 'json:{"driver":"raw", "file":{"filename":"/var/tmp/backing.img"}}' \
> > >
> > > The problem lies in the JSON here. Libvirt lacks the driver probing
> > > mechanism QEMU has (which makes sense). That means one has to be
> > > explicit about the drivers. Try with the following backing definition:
> > >
> > > json:{"driver":"raw", "file":{ "driver":"file", "filename":"/var/tmp/backing.img"}}
> >
> > OK, that works. However it also works with the unpatched version of
> > libvirt, so it's not proof that these patches fix any problem.
>
> Ah, sorry. I didn't notice your JSON was bad from the start and I just
> blindly extended it. The correct JSON should look like this:
>
> json: {
> "file": {
> "driver":"raw",
> "file": {
> "driver":"file",
> "filename":"/var/tmp/backing.img"
> }
> }
> }
Ok that does now demonstrate the fix.
For reference, here is the full test:
$ cd /var/tmp
$ rm -f backing.img
$ truncate -s 10M backing.img
$ qemu-img create -b 'json:{"file":{"driver":"raw", "file":{"driver":"file", "filename":"/var/tmp/backing.img"}}}' -f qcow2 overlay.qcow2
With old libvirt:
$ guestfish -a /var/tmp/overlay.qcow2 run
libguestfs: error: could not create appliance through libvirt.
Try running qemu directly without libvirt using this environment variable:
export LIBGUESTFS_BACKEND=direct
Original error from libvirt: internal error: missing parser implementation for JSON backing volume driver 'raw' [code=1 int1=-1]
With patched libvirt:
$ killall libvirtd
$ ~/d/libvirt/run guestfish -a /var/tmp/overlay.qcow2 run
[no errors printed]
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW
More information about the libvir-list
mailing list