In this guide, you will learn how to share a folder between Windows guest, running under a Linux host – such as Fedora, Ubuntu or Linux Mint using KVM.
The virt-manager application (with libvirt) and packages provide a flexible set of tools to manage virtual machines in Linux. It is free and open-source and used for KVM virtual machines and other hypervisors.
In the prior article, I explained how to share folders between a Linux guest and a Linux host. However, when you are trying to create a shared folder using Windows Guest and Linux host, it’s a little difficult and complex process. Because both the operating system works differently and a lot of configuration is needed.
Follow the below instructions as mentioned to share the folder between Windows guest and Linux host.
Table of Contents
A note about virtiofs
The sharing files and folders are powered by the libvirt shared file system called virtiofs. It provides all the features and parameters to access the directory tree on the host machine. Since most of the virt-manager virtual machine configurations are translated to XML, the share files/folders can also be specified by the XML file.
Note: If you are looking for file sharing using KVM between two Linux machines (guest and host), read this article.
Share folder between Windows guest and Linux host using KVM
The following instructions assume that you have installed Windows in virt-manager in any Linux host. If not, you can read this complete guide on how to install Windows in Linux.
Set up a mount tag in virt-manager
- First, make sure your guest virtual machine is powered off. From the virt-manager GUI, select the virtual machine and click on Open to pull up the console settings.
- Click on the icon which says show virtual hardware details in the toolbar. And then click on Memory on the left panel.
- Select the option “Enable shared memory“. Click Apply.
- Make sure the XML shows “access mode=shared” as below in the XML tab.
<memoryBacking> <source type="memfd"/> <access mode="shared"/> </memoryBacking>
- Click “Add hardware” at the bottom.
- Select File system from the left panel in the add new hardware window.
- Then select Driver=virtiofs in the details tab. Click on
browse > browse local
and select the host path from your Linux system. - In the target path, mention any name you want. It’s just a file tag which will be used during mount. This name in the target path will be mounted as Drive in Windows – My PC in Explorer.
- I have added “linux_pictures” as the target mount tag.
- So, if I want to access the Pictures folder (
/home/debugpoint/Pictures
), sample settings could be the following: - Click Finish.
The XML settings are below for the above configuration. You can find it in the XML tab.
<filesystem type="mount" accessmode="passthrough"> <driver type="virtiofs"/> <source dir="/home/debugpoint/Pictures"/> <target dir="linux_pictures"/> <address type="pci" domain="0x0000" bus="0x05" slot="0x00" function="0x0"/> </filesystem>
In the main virt-manager window, right-click on the Windows virtual machine and click Run to start the virtual machine. Make sure to click on the “show the graphical console” (monitor icon in the toolbar) – if the VM is not showing.
Set up WinFSP – FUSE for Windows
Make sure Windows virtual machine (guest) is running.
- First, we need to set up the WinFSP or Windows File System Proxy – FUSE for Windows. This enables you to mount any UNIX-like filesystem without any difficulties.
- Open the below page in the WinFSP GitHub from the guest Windows machine.
- Download the WinFSP .msi installer.
- Install the package on Windows virtual machine. Make sure to select “Core” while installing the package. Finish the installation.
Create VirtIO-FS as a service
- Download the virtio-win-guest-tools.exe from the below path by going inside stable-virtio folder.
- Install the package on Windows virtual machine.
- After installation is complete, reboot Windows virtual machine.
- After reboot, open the “Device Manager” by searching in the start menu.
- Navigate to System devices and look for “VirtIO FS Device”. It should be recognized and driver should be signed by Red Hat.
- Note: (optional) If you see an exclamation mark i.e. driver is not detected, then follow the instructions here on how to download ISO file, mount it and manually detect the driver.
- Open the start menu and search for “Services”.
- Scroll down to find out the “VirtIO-FS Service”. Right-click and hit Start to start the service.
- Alternatively, you can run the below command from PowerShell/command prompt as admin to start the service.
sc create VirtioFsSvc binpath="C:\Program Files\Virtio-Win\VioFS\virtiofs.exe" start=auto depend="WinFsp.Launcher/VirtioFsDrv" DisplayName="Virtio FS Service"
sc start VirtioFsSvc
- After the service start, open Explorer, and you should see the mount tag which you have created in the first step above, which should be mapped as Z drive. See below.
- You can now access the entire Linux folder with modified permission as per your need.
Here is a side-by-side comparison of the same folder accessed in Linux Mint and Windows guest.
Conclusion
I hope you can now able to share a folder between Windows guest and Linux host system. The above method is tested in Linux Mint for this article. It should work for Ubuntu, Fedora as well.
If the above method works, drop a comment below for the benefit of others.
References