[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