第 20 章 在主机及其虚拟机间共享文件
您可能需要在主机系统和其运行的虚拟机(VM)之间共享数据。要快速高效地完成此操作,您可以在系统上建立 NFS 文件共享。或者,您也可以使用 virtiofs
与 Linux 和 Windows 虚拟机共享数据。
20.1. 使用 NFS 在主机和其虚拟机之间共享文件
为了 RHEL 9 主机系统和虚拟机(VM)之间高效的文件共享,您可以导出虚拟机可以挂载和访问的 NFS 共享。
但是,对于 Linux 虚拟机,使用 virtiofs
特性通常更为方便。
先决条件
nfs-utils
软件包已安装在主机上。# dnf install nfs-utils -y
-
NAT
的虚拟网络或网桥
类型被配置为将主机连接到虚拟机。 - 可选:为了提高安全性,请确保您的虚拟机与 NFS 版本 4 或更高版本兼容。
流程
在主机上,将一个带有文件的目录导出为网络文件系统(NFS):
与虚拟机共享一个现有目录。如果您不想共享任何现有目录,请创建一个新目录:
# mkdir shared-files
获取每个虚拟机的 IP 地址,以便从主机(如 testguest1 和 testguest2)共享文件:
# virsh domifaddr testguest1 Name MAC address Protocol Address ---------------------------------------------------------------- vnet0 52:53:00:84:57:90 ipv4 192.0.2.2/24 # virsh domifaddr testguest2 Name MAC address Protocol Address ---------------------------------------------------------------- vnet1 52:53:00:65:29:21 ipv4 192.0.2.3/24
编辑主机上的
/etc/exports
文件,并添加一行,其中包含您要共享的目录、要共享的虚拟机的 IP 以及其它选项:/home/<username>/Downloads/<shared_directory>/ <VM1-IP(options)> <VM2-IP(options)> ...
以下示例将主机上的
/usr/local/shared-files
目录与 testguest1 和 testguest2 共享,并允许虚拟机编辑目录的内容:/usr/local/shared-files/ 192.0.2.2(rw,sync) 192.0.2.3(rw,sync)
注意要与 Windows 虚拟机共享目录,您需要确保 Windows NFS 客户端在共享目录中有写权限。您可以在
/etc/exports
文件中使用all_squash
、anonuid
和anongid
选项。/usr/local/shared-files/ 192.0.2.2(rw,sync,all_squash,anonuid=<directory-owner-UID>,anongid=<directory-owner-GID>)
<directory-owner-UID> 和 <directory-owner-GID> 是拥有主机上共享目录的本地用户的 UID 和 GID。
对于管理 NFS 客户端权限的其他选项,请按照 确保 NFS 服务安全 指南进行操作。
导出更新的文件系统:
# exportfs -a
启动
nfs-server
服务:# systemctl start nfs-server
获取主机系统的 IP 地址,来在虚拟机上挂载共享目录:
# ip addr ... 5: virbr0: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 52:54:00:32:ff:a5 brd ff:ff:ff:ff:ff:ff inet 192.0.2.1/24 brd 192.0.2.255 scope global virbr0 valid_lft forever preferred_lft forever ...
请注意,相关网络将主机与虚拟机连接,以共享文件。通常,这是
virbr0
。
在 Linux 虚拟机上挂载共享目录在
/etc/exports
文件中指定:# mount 192.0.2.1:/usr/local/shared-files /mnt/host-share
-
192.0.2.1
:主机的 IP 地址。 -
/usr/local/shared-files
:主机上导出的目录的文件系统路径。 /mnt/host-share
:虚拟机上的挂载点注意挂载点必须是一个空目录。
-
在 Windows 虚拟机上挂载共享目录,如
/etc/exports
文件中所述:- 以管理员身份打开 PowerShell shell 提示符。
在 Windows 上安装
NFS-Client
软件包。要在服务器版本上安装,请输入:
# Install-WindowsFeature NFS-Client
要在桌面版本上安装,请输入:
# Enable-WindowsOptionalFeature -FeatureName ServicesForNFS-ClientOnly, ClientForNFS-Infrastructure -Online -NoRestart
在 Windows 虚拟机上挂载主机导出的目录:
# C:\Windows\system32\mount.exe -o anon \\192.0.2.1\usr\local\shared-files Z:
在本例中:
-
192.0.2.1
:主机的 IP 地址。 -
/usr/local/shared-files
:主机上导出的目录的文件系统路径。 Z:
: 挂载点的盘符。注意您必须选择一个系统上不使用的驱动器符。
-
验证
列出虚拟机上共享目录的内容,以便您可以在主机和虚拟机之间共享文件:
$ ls <mount_point> shared-file1 shared-file2 shared-file3
在这个示例中,将 <mount_point> 替换为挂载的共享目录的文件系统路径。
其它资源