Hello, I've tried to use guestfish to lively mount virtual machine image. Here are some problems I met. 1. The name parameter in below command must be org.libguestfs.channel.0. or else the guest would produce error 'failed to connect to virtio-serial' and '/dev/virtio-ports/org.libguestfs.channel.0: No such file or directory' even though there did exists a file 'com.test.my' in 'dev/virtio-ports' directory. sudo kvm -drive file=ubuntu-1204-vm.img -m 512 -vga std -k en-us -vnc :1 -net nic -net tap,ifname=tap1,script=./qemu-ifup,downscript=no -daemonize -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/test.agent,server,nowait -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.test.my 2. I leaved the first problem by altering the device name to default org.libguestfs.channel.0, now I can visit the live guest by guestfish. However, any write or edit operation like vi or write don't work even I set --rw option with guestfish. It seems like guestfish just write the results to a tmp file in /tmp/guestfish**/ directory rather than the guest image file. I don't know if it needs a writeback operation to make the changes happen. Besides, read operation like cat can only read files produced before the mount operation, any real time modification by the guest can't be found with guestfish --live. Any answers will be appreciated.
Richard W.M. Jones
2014-May-30 18:50 UTC
Re: [Libguestfs] use guestfish to mount live virtual machines
On Sat, May 31, 2014 at 12:38:15AM +0800, sjy wrote:> > Hello, I've tried to use guestfish to lively mount virtual machine image. Here are some problems I met.> 1. The name parameter in below command must be > org.libguestfs.channel.0. or else the guest would produce error > 'failed to connect to virtio-serial' and > '/dev/virtio-ports/org.libguestfs.channel.0: No such file or > directory' even though there did exists a file 'com.test.my' in > 'dev/virtio-ports' directory.> sudo kvm -drive file=ubuntu-1204-vm.img -m 512 -vga std -k en-us > -vnc :1 -net nic -net > tap,ifname=tap1,script=./qemu-ifup,downscript=no -daemonize -device > virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 -chardev > socket,id=charchannel0,path=/var/lib/libvirt/qemu/test.agent,server,nowait > -device > virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.test.myThe daemon (running inside the virtual machine) expects that the virtio-serial port has the exact name "org.libguestfs.channel.0". If you give the virtio-serial port any other name then it just won't work.> 2. I leaved the first problem by altering the device name to default > org.libguestfs.channel.0, now I can visit the live guest by > guestfish. However, any write or edit operation like vi or write > don't work even I set --rw option with guestfish. It seems like > guestfish just write the results to a tmp file in /tmp/guestfish**/ > directory rather than the guest image file. I don't know if it needs > a writeback operation to make the changes happen. Besides, read > operation like cat can only read files produced before the mount > operation, any real time modification by the guest can't be found > with guestfish --live.That's pretty odd. What exact guestfish command are you running? Note that guestfish --live will only work correctly when the guest is managed by libvirt. So if you're starting the guest using qemu commands directly, I don't see how it can work. You can see the API calls that guestfish makes by adding the '-x' option. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-builder quickly builds VMs from scratch http://libguestfs.org/virt-builder.1.html