Please find attach a proposed debdiff for fixing the issue in Ubuntu Trusty by backporting the fix which is now in Wily.
** Description changed: + [Impact] + A race condition in the VDI block driver of Qemu leads to image (and thus file system) corruption under certain circumstances. + This makes Qemu tools usage for VDI formatted images particularly dangerous (qemu-img, qemu-nbd). + The bug fix introduces locks to prevent such race condition. + + + [Test Case] + A simple test case was provided in comment #5 (https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/1422307/comments/5): + + $ ./qemu-img create -f vdi test.vdi 2G + Formatting 'test.vdi', fmt=vdi size=2147483648 static=off + $ ./qemu-img create -f raw test.raw 2G + Formatting 'test.raw', fmt=raw size=2147483648 + $ x86_64-softmmu/qemu-system-x86_64 -enable-kvm -drive if=virtio,file=blkverify:test.raw:test.vdi,format=raw -drive if=virtio,file=data.img,format=raw,format=raw -cdrom ~/tmp/arch.iso -m 512 -boot d + blkverify: read sector_num=810976 nb_sectors=256 contents mismatch in sector 811008 + + Operations in the guest: + $ dd if=/dev/vdb of=/dev/vda + $ dd if=/dev/vda of=/dev/null + + [Regression Potential] + In case of bugs affecting the way locks are used, deadlocks could be a regression, but they would only affect VDI images. + + + Original bug report: Dear all, On Trusty, in certain situations, try to copy files over a qemu-nbd mounted file system leads to write errors (and thus, file corruption). Here is the last example I tried: -> virtual disk is a VDI disk -> It has only one partition, in FAT Here is my mount process: # modprobe nbd max_part=63 # qemu-nbd -c /dev/nbd0 "virtual_disk.vdi" # partprobe /dev/nbd0 # mount /dev/nbd0p1 /tmp/mnt/ Partition is properly mounted at that point: /dev/nbd0p1 on /tmp/mnt type vfat (rw) Now, when I copy a file (rather big, ~28MB): # cp file_to_copy /tmp/mnt/ ; sync # md5sum /tmp/mnt/file_to_copy 2efc9f32e4267782b11d63d2f128a363 /tmp/mnt/file_to_copy - # umount /tmp/mnt + # umount /tmp/mnt # mount /dev/nbd0p1 /tmp/mnt/ # md5sum /tmp/mnt/file_to_copy 42b0a3bf73f704d03ce301716d7654de /tmp/mnt/file_to_copy The first hash was obviously the right one. On a previous attempt I did, I spotted thanks to vbindiff that parts of the file were just filed with 0s instead of actual data. It will randomly work after several attempts to write. Version information: # qemu-nbd --version qemu-nbd version 0.0.1 Written by Anthony Liguori. Cheers, ** Patch added: "qemu_2.0.0+dfsg-2ubuntu1.17.diff" https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/1422307/+attachment/4448189/+files/qemu_2.0.0%2Bdfsg-2ubuntu1.17.diff -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1422307 Title: qemu-nbd corrupts files To manage notifications about this bug go to: https://bugs.launchpad.net/qemu/+bug/1422307/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs