<div dir="ltr">I am using the latest version of qemu (tag v1.7.0). I compiled myself today to be sure. What version of sheepdog were you using? I think I compiled the tag v0.7.5.<div><br><div>Did you use the same parameters to start the virtual machine? I'm suspecting virtio to be a problem. </div>

<div>I will make some more test tomorrow.</div><div><br></div><div>Thank you for your help.</div><div><br></div><div>Hadrien Kohl</div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/12/12 Liu Yuan <span dir="ltr"><<a href="mailto:namei.unix@gmail.com" target="_blank">namei.unix@gmail.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Thu, Dec 12, 2013 at 01:47:25PM +0100, Hadrien KOHL wrote:<br>
> 2013/12/12 Liu Yuan <<a href="mailto:namei.unix@gmail.com">namei.unix@gmail.com</a>><br>
><br>
> > On Thu, Dec 12, 2013 at 12:25:52PM +0100, Hadrien KOHL wrote:<br>
> > > I just sent the question to the qemu developer mailing list. But as I<br>
> > did,<br>
> > > I remembered this sd_truncate is also called<br>
> > > from  sd_co_writev(BlockDriverState *bs, int64_t sector_num, int<br>
> > > nb_sectors, QEMUIOVector *qiov):<br>
> > ><br>
> > > static coroutine_fn int sd_co_writev(BlockDriverState *bs, int64_t<br>
> > > sector_num,<br>
> > >                         int nb_sectors, QEMUIOVector *qiov)<br>
> > > {<br>
> > >     SheepdogAIOCB *acb;<br>
> > >      int ret;<br>
> > ><br>
> > >     if (bs->growable && sector_num + nb_sectors > bs->total_sectors) {<br>
> > >         ret = sd_truncate(bs, (sector_num + nb_sectors) *<br>
> > BDRV_SECTOR_SIZE);<br>
> > >         if (ret < 0) {<br>
> > >             return ret;<br>
> > >         }<br>
> ><br>
> > From the code, so if growable is true, seems that sheepdog support<br>
> > automatic<br>
> > grow of volume. So my last email about 'can't resize live VM' is wrong.<br>
> ><br>
> > By a simply glance of the code, seems that bs->growable is set by qcow2.c,<br>
> > which<br>
> > indicate that this might be a feature from qcow2 format.<br>
> ><br>
> > >         bs->total_sectors = sector_num + nb_sectors;<br>
> > >     }<br>
> > ><br>
> > >     acb = sd_aio_setup(bs, qiov, sector_num, nb_sectors);<br>
> > >     acb->aio_done_func = sd_write_done;<br>
> > >     acb->aiocb_type = AIOCB_WRITE_UDATA;<br>
> > ><br>
> > >     ret = sd_co_rw_vector(acb);<br>
> > > ...<br>
> > > }<br>
> > ><br>
> > > This function is mapped to bdrv_co_writev in the qemu driver.<br>
> > > Looking at the test in this function, the only way a shrink could happen<br>
> > -<br>
> > > I guess - is if the units in sector_num and nb_sectors are inconsistent<br>
> > > (esp since there's a conversion to "BDRV_SECTOR_SIZE") in relation to<br>
> > > bs->total_sectors.<br>
> > > I am using qcow2 file format and created the image with qemu-img -t qcow2<br>
> > > create sheepdog:name. Could it be related?<br>
> ><br>
> > I think this might be a bug about running qcow2 in sheepdog, but I can't<br>
> > figure<br>
> > out what is the problem by statically reviewing the code. Is there a<br>
> > reliable<br>
> > way to reproduce it?<br>
> ><br>
><br>
> Here is a way to reproduce:<br>
><br>
> First I create a test image. Then I boot (here using gentoo live cd).<br>
><br>
> # qemu-img create -f qcow2 sheepdog:test 10G<br>
> Formatting 'sheepdog:test', fmt=qcow2 size=10737418240 encryption=off<br>
> cluster_size=65536 lazy_refcounts=off<br>
> # qemu-system-x86_64 -drive<br>
> file=sheepdog:127.0.0.1:7000:test,if=none,id=virtio-disk0,format=qcow2,cache=writeback<br>
> -cdrom /vm/iso/install-amd64-minimal-20131010.iso -boot cd -m 256 -name<br>
> test -vnc <a href="http://172.16.0.11:0" target="_blank">172.16.0.11:0</a><br>
><br>
> Then once logged in the machine via vnc:<br>
> # mkfs.ext4 /dev/vda<br>
> # mkdir /mnt/vda<br>
><br>
> Then I start receiving:<br>
><br>
> qemu-system-x86_64: shrinking is not supported<br>
> qemu-system-x86_64: shrinking is not supported<br>
> qemu-system-x86_64: shrinking is not supported<br>
> qemu-system-x86_64: shrinking is not supported<br>
> qemu-system-x86_64: shrinking is not supported<br>
> qemu-system-x86_64: shrinking is not supported<br>
> qemu-system-x86_64: shrinking is not supported<br>
> qemu-system-x86_64: shrinking is not supported<br>
><br>
> And IO buffer errors on the guest:<br>
><br>
> Buffer I/O error on device vda, logical block XXXXXXX<br>
><br>
> Hadrien<br>
><br>
<br>
</div></div>Just had a test with ubuntu 12.04 live CD following your steps and no problem at<br>
all. I am running latest QEMU, so can you try latest QEMU such as v1.7?<br>
<br>
yliu@ubuntu-precise:~/sheepdog$ qemu-img info sheepdog:test<br>
image: sheepdog:test<br>
file format: qcow2<br>
virtual size: 10G (10737418240 bytes)<br>
disk size: 136M<br>
cluster_size: 65536<br>
Format specific information:<br>
    compat: 1.1<br>
    lazy refcounts: false<br>
<br>
Thanks<br>
<span class="HOEnZb"><font color="#888888">Yuan<br>
</font></span></blockquote></div><br></div>