Chapter 20. Sharing files between the host and its virtual machines
You might frequently require to share data between your host system and the virtual machines (VMs) it runs. To do so quickly and efficiently, you can use the virtio
file system (virtiofs
).
20.1. Sharing files between the host and its virtual machines by using virtiofs
By using the virtio
file system (virtiofs
), you can share files between your host and your virtual machines (VM) as a directory tree that works the same as the local file system structure.
20.1.1. Sharing files between the host and Windows virtual machines by using the command line
When using RHEL 10 as your hypervisor, you can efficiently share files between your host system and Windows virtual machines (VM) using the virtiofs
feature along with the virtio-win
package.
You can run the virtiofs
service in case-insensitive mode on a Windows VM using the virtiofs.exe
command and the -i
parameter.
Prerequisites
A directory that you want to share with your VMs. If you do not want to share any of your existing directories, create a new one, for example named shared-files.
mkdir /root/shared-files
# mkdir /root/shared-files
Copy to Clipboard Copied! -
You have attached the
virtio
driver installation media to the VM.
-
You have installed the
virtio-win
package on your Windows VM.
Procedure
For each directory on the host that you want to share with your VM, set it as a virtiofs file system in the VM’s XML configuration.
Open the XML configuration of the intended VM.
virsh edit vm-name
# virsh edit vm-name
Copy to Clipboard Copied! Add an entry similar to the following to the
<devices>
section of the VM’s XML configuration.<filesystem type='mount' accessmode='passthrough'> <driver type='virtiofs'/> <binary path='/usr/libexec/virtiofsd' xattr='on'/> <source dir='/root/shared-files'/> <target dir='host-file-share'/> </filesystem>
<filesystem type='mount' accessmode='passthrough'> <driver type='virtiofs'/> <binary path='/usr/libexec/virtiofsd' xattr='on'/> <source dir='/root/shared-files'/> <target dir='host-file-share'/> </filesystem>
Copy to Clipboard Copied! This example sets the
/root/shared-files
directory on the host to be visible ashost-file-share
to the VM.
Set up shared memory for the VM. To do so, add shared memory backing to the
<domain>
section of the XML configuration:<domain> [...] <memoryBacking> <access mode='shared'/> </memoryBacking> [...] </domain>
<domain> [...] <memoryBacking> <access mode='shared'/> </memoryBacking> [...] </domain>
Copy to Clipboard Copied! Boot up the VM.
virsh start vm-name
# virsh start vm-name
Copy to Clipboard Copied! On your Windows VM, install WinFsp. To do so, mount the
virtio-win
ISO image, start thewinfsp
MSI installer, and follow the prompts.In the Custom Setup window of the installation wizard, select the features you want to install on the VM.
Start the virtiofs service:
sc start VirtioFsSvc
# sc start VirtioFsSvc
Copy to Clipboard Copied! Navigate to This PC:
File Explorer
This PC If configured correctly,
virtiofs
is available on the Windows VM as the first available drive letter starting withZ:
and going backwards. For example,my_viofs (Z:)
.ImportantYou must restart the
virtiofs
service after each VM reboot to access the shared directory.Optional: To set up additional
virtiofs
instances:Stop the
virtiofs
service:sc stop VirtioFsSvc sc config VirtioFsSvc start=demand
# sc stop VirtioFsSvc # sc config VirtioFsSvc start=demand
Copy to Clipboard Copied! Configure the WinFSP.Launcher service to set up multiple virtiofs instances:
"C:\Program Files (x86)\WinFsp\bin\fsreg.bat" virtiofs "<path to the binary>\virtiofs.exe" "-t %1 -m %2"
# "C:\Program Files (x86)\WinFsp\bin\fsreg.bat" virtiofs "<path to the binary>\virtiofs.exe" "-t %1 -m %2"
Copy to Clipboard Copied! Mount
virtiofs
instances to drives.For example, to mount
virtiofs
with the tagmount_tag0
to theY:
drive:"C:\Program Files (x86)\WinFsp\bin\launchctl-x64.exe" start virtiofs viofsY mount_tag0 Y:
"C:\Program Files (x86)\WinFsp\bin\launchctl-x64.exe" start virtiofs viofsY mount_tag0 Y:
Copy to Clipboard Copied! -
Repeat the previous step to mount all of your
virtiofs
instances. To unmount the
virtiofs
instance:"C:\Program Files (x86)\WinFsp\bin\launchctl-x64.exe" stop virtiofs viofsY
"C:\Program Files (x86)\WinFsp\bin\launchctl-x64.exe" stop virtiofs viofsY
Copy to Clipboard Copied!
Verification
On your Windows VM, navigate to This PC:
File Explorer
This PC -
If you did not specify a mount point when setting up the
virtiofs
service, it will use the first available drive letter starting withz:
and going backwards. -
If you have multiple
virtiofs
instances set up, they will appear as drives with the letters you had assigned to the instances.
-
If you did not specify a mount point when setting up the