Red Hat Training

A Red Hat training course is available for RHEL 8

第 14 章 在主机及其虚拟机间共享文件

您可能需要在主机系统和其运行的虚拟机(VM)之间共享数据。要快速高效地完成此操作,您可以在系统上设置 NFS 文件共享。

14.1. 使用 NFS 在主机及其虚拟机间共享文件

为了在 RHEL 8 主机系统和连接到的虚拟机(VM)间有效文件共享,您可以导出虚拟机可以挂载和访问的 NFS 共享。

先决条件

  • nfs-utils 软件包已安装在主机上。

    # yum install nfs-utils -y
  • 要与虚拟机共享的目录。如果您不想共享任何现有目录,请创建一个新目录,例如: shared-files

    # mkdir shared-files
  • 当连接到虚拟机时,主机通过网络可见并可访问。如果虚拟机使用虚拟网络的 NATbridge 类型,则通常是这种情况。
  • 可选: 为了提高安全性,请确保您的虚拟机与 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)> [...]

      例如,以下命令在 testguest1testguest2 主机上共享了 /usr/local/shared-files 目录,使虚拟机能够编辑该目录的内容:

      /usr/local/shared-files/ 192.168.124.220(rw,sync) 192.168.124.17(rw,sync)
      注意

      如果要与 Windows 虚拟机共享目录,您必须确保 Windows NFS 客户端在共享目录中具有写入权限。执行此操作的一种简单方法是,使用 /etc/exports 文件中的 all_squash、sonuidanongid 选项。

      例如:

      /usr/local/shared-files/ 192.168.124.220(rw,sync,all_squash,anonuid=<directory-owner-UID>,anongid=<directory-owner-GID>)

      & lt;directory-owner-UID & gt; 和 <directory-owner-GID > 是拥有主机上共享目录的本地用户的 UID 和 GID。

      要探索用于管理 NFS 客户端权限的其他选项,请按照 确保 NFS 安全 指南操作。

    3. 导出更新的文件系统。

      # exportfs -a
    4. 确保 nfs-server 服务正在运行。

      # 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 文件中指定的 Linux 虚拟机上。

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

    在本例中:

    • 192.168.124.1 是主机的 IP 地址。
    • /usr/local/shared-files 是主机上导出的目录的文件系统路径。
    • /mnt/host-share 是虚拟机的挂载点。挂载点必须是空目录。
  3. 要在 /etc/exports 文件中指定的 Windows 虚拟机上挂载共享目录:

    1. 以管理员身份打开 PowerShell shell 提示符。
    2. 安装 NFS-Client 软件包。对于 Windows 的服务器和桌面版本,安装命令会有所不同。

      在 Windows 的服务器中:

      # Install-WindowsFeature NFS-Client

      在 Windows 的桌面版本中:

      # Enable-WindowsOptionalFeature -FeatureName ServicesForNFS-ClientOnly, ClientForNFS-Infrastructure -Online -NoRestart
    3. 将主机导出的目录挂载到 Windows 虚拟机上。

      # C:\Windows\system32\mount.exe -o anon \\192.168.124.1\usr\local\shared-files Z:

      在本例中:

      • 192.168.124.1 是主机的 IP 地址。
      • /usr/local/shared-files 是主机上导出的目录的文件系统路径。
      • z: 是将用作挂载点的驱动器符。您必须选择一个没有在系统中使用的驱动器符。

验证

  • 要验证您可以在主机和虚拟机间共享文件,请列出虚拟机上共享目录的内容。在以下示例中,将 &lt ;mount_point > 替换为挂载的共享目录的文件系统路径。

    $ ls <mount_point>
    shared-file1  shared-file2  shared-file3