lost and found ( for me ? )

KVM : share files between KVM host and VM with virtio-9p


KVM host info

[ root@f18 ~]# qemu-kvm --version
QEMU emulator version 1.4.1, Copyright (c) 2003-2008 Fabrice Bellard
[root@f18 ~]# libvirtd --version
libvirtd (libvirt) 1.0.4

[root@f18 ~]# uname -ri
3.9.0-1.vanilla.mainline.knurd.1.fc18.x86_64 x86_64

[root@f18 ~]# cat /etc/fedora-release
Fedora release 18 (Spherical Cow)

I have disabled SElinux on both the KVM host and the VM.

on the KVM host , make a directory to share files between KVM host and VM.
[root@f18 ~]# mkdir /tmp/share

edit VM’s xml file.
add red lines
virsh # dumpxml f18-vm1
<domain type='kvm' id='16'>
 <name>f18-vm1</name>
 <uuid>533a5533-ec0c-e327-4ca6-8d25c1a1e610</uuid>
 <memory unit='KiB'>1048576</memory>
 <currentMemory unit='KiB'>1048576</currentMemory>
 <vcpu placement='static'>1</vcpu>
 <os>
   <type arch='x86_64' machine='pc-i440fx-1.4'>hvm</type>
   <boot dev='hd'/>
 </os>
 <features>
   <acpi/>
   <apic/>
   <pae/>
 </features>
 <clock offset='utc'/>
 <on_poweroff>destroy</on_poweroff>
 <on_reboot>restart</on_reboot>
 <on_crash>restart</on_crash>
 <devices>
   <emulator>/usr/bin/qemu-kvm</emulator>
   <disk type='file' device='disk'>
     <driver name='qemu' type='qcow2'/>
     <source file='/var/run/media/hattori/fedora-HDD/KVM_images/f18-vm1.qcow2'/>
     <target dev='vda' bus='virtio'/>
     <alias name='virtio-disk0'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
   </disk>
   <disk type='block' device='cdrom'>
     <driver name='qemu' type='raw'/>
     <target dev='hdc' bus='ide'/>
     <readonly/>
     <alias name='ide0-1-0'/>
     <address type='drive' controller='0' bus='1' target='0' unit='0'/>
   </disk>
   <controller type='usb' index='0'>
     <alias name='usb0'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
   </controller>
   <controller type='ide' index='0'>
     <alias name='ide0'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
   </controller>
   <controller type='virtio-serial' index='0'>
     <alias name='virtio-serial0'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
   </controller>
   <filesystem type='mount' accessmode='squash'>
     <source dir='/tmp/share'/>
     <target dir='/hostshare'/>
     <alias name='fs0'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
   </filesystem>
   <interface type='bridge'>
     <mac address='52:54:00:22:d0:b9'/>
     <source bridge='br0'/>
     <target dev='vnet0'/>
     <model type='virtio'/>
     <alias name='net0'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
   </interface>
   <serial type='pty'>
     <source path='/dev/pts/1'/>
     <target port='0'/>
     <alias name='serial0'/>
   </serial>
   <console type='pty' tty='/dev/pts/1'>
     <source path='/dev/pts/1'/>
     <target type='serial' port='0'/>
     <alias name='serial0'/>
   </console>
   <channel type='spicevmc'>
     <target type='virtio' name='com.redhat.spice.0'/>
     <alias name='channel0'/>
     <address type='virtio-serial' controller='0' bus='0' port='1'/>
   </channel>
   <input type='tablet' bus='usb'>
     <alias name='input0'/>
   </input>
   <input type='mouse' bus='ps2'/>
   <graphics type='spice' port='5900' autoport='yes' listen='127.0.0.1'>
     <listen type='address' address='127.0.0.1'/>
   </graphics>
   <video>
     <model type='qxl' ram='65536' vram='65536' heads='1'/>
     <alias name='video0'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
   </video>
   <memballoon model='virtio'>
     <alias name='balloon0'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
   </memballoon>
 </devices>
 <seclabel type='none'/>
</domain>

virsh #



You can add filesystem via virt-manager


start the VM

virsh # start f18-vm1

on the KVM host

[root@f18 ~]# ps aux | grep qemu | grep -v grep
qemu     25013  6.2  3.9 3713064 310872 ?      Sl   01:20   0:31 /usr/bin/qemu-system-x86_64 -machine accel=kvm -name f18-vm1 -S -M pc-i440fx-1.4 -m 1024 -smp 1,sockets=1,cores=1,threads=1 -uuid 533a5533-ec0c-e327-4ca6-8d25c1a1e610 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/f18-vm1.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x4 -drive file=/var/run/media/hattori/fedora-HDD/KVM_images/f18-vm1.qcow2,if=none,id=drive-virtio-disk0,format=qcow2 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive if=none,id=drive-ide0-1-0,readonly=on,format=raw -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -fsdev local,security_model=none,id=fsdev-fs0,path=/tmp/share -device virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,mount_tag=/hostshare,bus=pci.0,addr=0x7 -netdev tap,fd=23,id=hostnet0,vhost=on,vhostfd=24 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:22:d0:b9,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev spicevmc,id=charchannel0,name=vdagent -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0 -device usb-tablet,id=input0 -spice port=5900,addr=127.0.0.1,disable-ticketing,seamless-migration=on -vga qxl -global qxl-vga.ram_size=67108864 -global qxl-vga.vram_size=67108864 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6

in the VM , mount the 9p filesystem from the KVM host using the virtio transport
To use file share between KVM host and the VM ,9p module is required.

tag /hostshare points to KVM host’s /tmp/share directory and that has been mounted on VM’s /root/tmp

on the VM
virsh # console f18-vm1
Connected to domain f18-vm1
Escape character is ^]

[root@localhost ~]#


[root@localhost ~]# mkdir /root/tmp
[root@localhost ~]# mount -t 9p -o trans=virtio,version=9p2000.L /hostshare /root/tmp

[root@localhost ~]# mount | grep 9p
/hostshare on /root/tmp type 9p (rw,relatime,sync,dirsync,trans=virtio,version=9p2000.L)

[root@localhost ~]# lsmod | grep 9p
9p                     53725  1
fscache                60427  1 9p
9pnet_virtio           13466  1
9pnet                  73543  2 9p,9pnet_virtio

on the KVM host , make a file
[root@f18 ~]# cd /tmp/share/
[root@f18 share]# echo hello > hello.txt


on the VM
hello.txt which was created on the KVM host has been shared under the VM’s /root/tmp directory.
[root@localhost tmp]# pwd
/root/tmp

[root@localhost tmp]# ls
hello.txt

[root@localhost tmp]# cat hello.txt
hello

unmount.
on the KVM host
[root@localhost ~]# umount /hostshare

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.