Menu Close
Settings Close

Language and Page Formatting Options

19.4. 使用 NFS 在主机和 Linux 虚拟机间共享文件

为了在您的 RHEL 9 主机系统和连接到的 Linux 虚拟机间有效文件共享,请使用 virtiofs 功能。但是,如果 virtiofs 不适用于您的用例,也可以导出虚拟机可以挂载和访问的 NFS 共享。

先决条件

  • nfs-utils 软件包已安装在主机上。
  • 要与虚拟机共享的目录。如果您不想共享任何现有目录,请创建一个新目录,例如: shared-files

    # mkdir shared-files
  • 主机可以通过虚拟机的网络可见并可访问。通常情况下,如果虚拟机使用 NAT网桥类型虚拟网络进行连接,则会出现这种情况。然而,对于 macvtap 连接,您必须首先在主机上设置 macvlan 功能。要做到这一点:

    1. 在主机的 /etc/systemd/network/ 目录中创建一个网络设备文件,如 vm-macvlan.netdev

      # vim /etc/systemd/network/vm-macvlan.netdev
    2. 编辑网络设备文件,使其包含以下内容。您可以将 vm-macvlan 替换为您为网络设备选择的名称。

      [NetDev]
      Name=vm-macvlan
      Kind=macvlan
      
      [MACVLAN]
      Mode=bridge
    3. 为 macvlan 网络设备创建网络配置文件,如 vm-macvlan.network

      # vim /etc/systemd/network/vm-macvlan.network
    4. 编辑网络配置文件使其包含以下内容。您可以将 vm-macvlan 替换为您为网络设备选择的名称。

      [Match]
      Name=_vm-macvlan_
      
      [Network]
      IPForward=yes
      Address=192.168.250.33/24
      Gateway=192.168.250.1
      DNS=192.168.250.1
    5. 为您的物理网络接口创建网络配置文件。例如,如果您的接口是 enp4s0

      # vim /etc/systemd/network/enp4s0.network

      如果您不确定要使用的接口名称,您可以使用主机上的 ifconfig 命令获取活跃网络接口列表。

    6. 编辑物理网络配置文件,使物理网络成为 macvlan 接口的一部分,在本例中为 vm-macvlan

      [Match]
      Name=enp4s0
      
      [Network]
      MACVLAN=vm-macvlan
    7. 重启您的主机。
  • 可选:为了提高安全性,请确保您的虚拟机与 NFS 版本 4 或更高版本兼容。

步骤

  1. 在主机上,导出包含您要作为网络文件系统(NFS)共享的文件的目录。

    1. 获取您要共享文件的每个虚拟机的 IP 地址。以下示例获取 testguest1testguest2 的 IP 地址。

      # virsh domifaddr testguest1
      Name       MAC address          Protocol     Address
      ----------------------------------------------------------------
      vnet0      52:53:00:84:57:90    ipv4         192.168.124.220/24
      
      # virsh domifaddr testguest2
      Name       MAC address          Protocol     Address
      ----------------------------------------------------------------
      vnet1      52:53:00:65:29:21    ipv4         192.168.124.17/24
    2. 编辑主机上的 /etc/exports 文件,再添加一个行,其中包含您要共享的目录、您想要共享的虚拟机 IP 和共享选项。

      Shared directory VM1-IP(options) VM2-IP(options) [...]

      例如,以下将主机上的 /usr/local/shared-files 目录与 testguest1testguest2 共享,并允许虚拟机编辑目录的内容:

      /usr/local/shared-files/ 192.168.124.220(rw,sync) 192.168.124.17(rw,sync)
    3. 导出更新的文件系统。

      # exportfs -a
    4. 确定启动 NFS 进程:

      # systemctl start nfs-server
    5. 获取主机系统的 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.168.124.1/24 brd 192.168.124.255 scope global virbr0
             valid_lft forever preferred_lft forever
      [...]

      请注意,相关的网络是您要共享文件的虚拟机用来连接到主机所使用的网络。通常,这是 virbr0

  2. /etc/exports 文件中指定的虚拟机的客户机操作系统中挂载导出的文件系统。

    1. 创建您要用作共享文件系统挂载点的目录,例如 /mnt/host-share

      # mkdir /mnt/host-share
    2. 在挂载点挂载主机导出的目录。这个示例在客户机的 /mnt/host-share 上挂载 /usr/local/shared-files 目录,它由 192.168.124.1 主机导出:

      # mount 192.168.124.1:/usr/local/shared-files /mnt/host-share

验证

  • 要验证挂载是否成功,请访问和浏览挂载点的共享目录:

    # cd /mnt/host-share
    # ls
    shared-file1  shared-file2  shared-file3