[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] Some problem with the save function

Hi everyone. This is my first post to this list, so excuse me if it's
not the right place to poste info like this.

I've found some problems in qemu_driver.c in the latest versions of

- the first problem was also present in 0.7.0. If we run qemu guests
unprivileged, we cannot use the save function (virsh save
guestname /path/to/file). The reason seems to be that libvirt first
create the destination file to write the header and the XML definition.
The file is owned by root with 600 permission. Then, we ask qemu to
append the dump of the memory (via the migrate exec: call) to this file.
This part doesn't work because the qemu user cannot write to this file.
So we endup with a file which only contains the header and the XML, and
the guest is stoped :/

- the second problem is present since libvirt 0.7.1. Now that the saved
file can be compressed, it seems we cannot save in a raw format any
more. This is due to this part in the code (qemu_driver.c):

if (STREQ (prog, "raw"))
        prog = "cat";
    internalret = virAsprintf(&command, "migrate \"exec:"
                              "%s -c >> '%s' 2>/dev/null\"", prog,

which result in "migrate \"exec cat -c >> safe_path 2>/dev/null\""

But cat doesn't support the -c argument, so once again, the save fails,
as we end up with a save file which only contains the header and the XML

Unfortunately, my C knowledge is near 0, so I cannot correct this

- the third problem, is that restore doesn't work any more. I haven't
dig it yet, but when I try to restore a guest using a saved file
(uncompressed produced under libvirt 0.7.0), I've this error:

virsh restore /tmp/guest.state
error: Failed to restore domain from /tmp/guest.state
error: internal error unable to start guest: 

Nothing interesting in /var/log/libvirt/qemu/guest.log:

LC_ALL=C PATH=/sbin:/usr/sbin:/bin:/usr/bin HOME=/root USER=root
LOGNAME=root /usr/bin/qemu-kvm -S -M pc -m 2048 -smp 4 -name guest -uuid
37b5937b-eacf-fda6-f4d0-33537d61b414 -monitor
unix:/var/lib/libvirt/qemu/guest.monitor,server,nowait -localtime
-no-reboot -boot c -drive file=/dev/data/guest,if=ide,index=0,boot=on
-drive file=/var/lib/libvirt/iso/boot.iso,if=ide,media=cdrom,index=2
-net nic,macaddr=52:54:00:48:c4:ca,vlan=0,name=nic.0 -net
tap,fd=25,vlan=0,name=tap.0 -serial pty -parallel none -usb -usbdevice
tablet -vnc -k fr -vga cirrus -incoming exec:cat

The qemu process eats 100% of CPU during a few seconds, then stops (if I
strace it during this time, I see a lot of error like bad file
descriptor). Anyone have save/restore functions working with 0.7.1 ?

Cheers, Daniel

Daniel Berteaud
Société de Services en Logiciels Libres
Technopôle Montesquieu
Tel : 05 56 64 15 32
Fax : 05 56 64 15 32
Mail: daniel firewall-services com
Web : http://www.firewall-services.com

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]