在 Compute Engine 客户端上装载文件共享

本页面介绍如何在 Compute Engine 虚拟机 (VM) 实例上装载 Filestore 文件共享。如果您希望改为从 Google Kubernetes Engine 集群访问 Filestore 实例,请参阅从 Google Kubernetes Engine 集群访问文件共享

客户端虚拟机必须与 Filestore 实例位于同一 Google Cloud 项目和 VPC 网络中。要了解如何在远程客户端(例如本地终端或虚拟机)上装载文件共享,请参阅在远程网络中的客户端上装载文件共享

准备工作

确保已正确配置网络防火墙,以便与 Filestore 搭配使用。如需了解详情,请参阅配置防火墙规则

在 Compute Engine 虚拟机实例上装载文件共享

使用以下一种过程在 Compute Engine 虚拟机上装载 Filestore 文件共享:

Linux:装载

要将文件共享手动装载到 Linux 客户端虚拟机:

  1. 在 Cloud Console 中,转到“虚拟机实例”页面。

    转到“虚拟机实例”页面

  2. 找到您要用作客户端的 Linux 虚拟机,然后点击 SSH 打开该虚拟机上的终端。

  3. 可选:通过次要网络在具有多个网络接口的客户端虚拟机上装载文件共享。

    详细信息

    如果客户端虚拟机有多个网络接口,并且您希望通过次要网络(即 nic0 以外的接口)装载文件共享,则必须配置客户端虚拟机的路由政策,以确保文件共享通过正确的网络接口装载。为此,请在客户端虚拟机上运行以下命令:

    sudo ip route \
        add filestore-reserved-address-range \
        via default-gateway-of-nic-to-filestore
    

    其中:

    • filestore-reserved-address-range 是 Filestore 实例使用的预留地址范围。
    • default-gateway-of-nic-to-filestore 是连接到与 Filestore 实例共享的 VPC 网络的 NIC 的默认网关 IP 地址。

    如需详细了解如何将 Compute Engine 实例与多个 NIC 配合使用,请参阅配置策略路由

  4. 安装 NFS:

    Debian/Ubuntu

    使用以下命令在 Debian 或 Ubuntu 上安装 NFS。

    sudo apt-get -y update &&
    sudo apt-get install nfs-common

    RHEL/CentOS

    使用以下命令在 Red Hat Enterprise Linux 或 CentOS 上安装 NFS。

    sudo yum update &&
    sudo yum install nfs-utils

    SUSE

    使用以下命令在 SUSE 上安装 NFS。

    sudo zypper update &&
    sudo zypper -n install nfs-client
  5. 使本地目录映射到 Filestore 文件共享:

    sudo mkdir -p mount-point-directory
    

    其中 mount-point-directory 是要创建的目录(例如 /mnt/filedir)。

  6. 通过运行 mount 命令从 Filestore 实例装载文件共享。您可以使用任何 NFS 装载选项。为了获得最佳性能,我们建议使用默认 NFS mount 选项。

    默认 NFSmount 选项

    默认选项 说明
    hard NFS 客户端无限期地重试 NFS 请求。
    timeo=600 NFS 客户端会等待 600 分秒(60 秒)后再重试 NFS 请求。
    retrans=3 NFS 客户端会尝试 NFS 请求三次,再执行进一步的恢复操作。
    rsize=1048576 对于每个 READ 请求,NFS 客户端最多可从 NFS 服务器接收 1048576 个字节。
    wsize=1048576 对于每个 WRITE 请求,NFS 客户端最多可以从 NFS 服务器接收 1048576 个字节。
    resvport 与 NFS 服务器就此装载装点进行通信时,NFS 客户端会使用特权源端口。
    async NFS 客户端延迟向 NFS 服务器发送应用程序写入,直到满足某些条件。
    注意:使用 sync 选项会大大降低性能。

    为了降低装载延迟时间,您应指定 -o tcp 选项。

    运行 mount 命令:

    sudo mount ip-address:/file-share mount-point-directory
    

    其中:

    • ip-address 是 Filestore 实例的 IP 地址。
    • file-share 是实例上的文件共享的名称。
    • mount-point-directory 是您要将 Filestore 文件共享映射到的路径。

    您可以从以下任何来源获取实例的 IP 地址和文件共享名称:

    例如,假定 Filestore 实例的 IP 地址为 10.0.1.2 且文件共享名为 share1,则以下命令会将文件共享装载到本地装载点目录 /mnt/render

    sudo mount 10.0.1.2:/share1 /mnt/render
    
  7. 可选:运行 chmod 来设置对装载目录的权限,使 root 用户以外的其他用户可向其写入数据。运行以下命令来设置目录权限:

    sudo chmod permissions mount-point-directory
    

    其中:

    • permissions 是要授予的一组权限。例如,chmod go+rw 将使得拥有目录的群组中的用户和所有其他用户可读写目录。如需详细了解如何设置权限,请参阅配置文件共享的访问权限
    • mount-point-directory 是 Filestore 文件共享所在目录的路径。
  8. 可选:确认已装载 Filestore 文件共享:

    df -h --type=nfs
    

    输出应包含如下所示的条目:

    Filesystem        Size    Used  Avail  Use%  Mounted on
    10.0.1.2:/share1  1018G   76M   966G   1%    /mnt/render
    10.0.2.2:/vol3    1018G   76M   966G   1%    /mnt/filestore3
  9. 如果您计划与装载的 Filestore 文件共享结合使用的应用需要 NFS 文件锁定,并且此客户端虚拟机实例使用的不是设置不变的默认 VPC 网络,则可能需要在实例上设置两个端口,以便防火墙配置更简单。如需详细了解如何确定您是否需要为 VPC 网络配置防火墙规则,请参阅配置防火墙规则。如需详细了解如何设置端口,请参阅设置 NFS 端口

Linux:/etc/fstab

您可以通过修改客户端的 /etc/fstab 文件,在启动时自动将文件共享装载到客户端虚拟机:

  1. 在 Cloud Console 中,转到“虚拟机实例”页面。

    转到“虚拟机实例”页面

  2. 找到您要用作客户端的 Linux 虚拟机,然后点击 SSH 打开该虚拟机上的终端。

  3. 可选:通过次要网络在具有多个网络接口的客户端虚拟机上装载文件共享。

    详细信息

    如果客户端虚拟机有多个网络接口,并且您希望通过次要网络(即 nic0 以外的接口)装载文件共享,则必须配置客户端虚拟机的路由政策,以确保文件共享通过正确的网络接口装载。为此,请修改以下文件:

    • /etc/default/instance_configs.cfg 中,将 NetworkInterfacessetup 标志设置为 false
      [NetworkInterfaces]
      dhclient_script = /sbin/google-dhclient-script
      dhcp_command =
      ip_forwarding = true
         setup = false
      
    • /etc/network/interfaces 中,添加以下行:

      auto eth1
      iface eth1 inet dhcp
          up ip route add filestore-reserved-address-range via default-gateway-of-nic-to-filestore
      

    其中:

    • filestore-reserved-address-range 是 Filestore 实例使用的预留地址范围。
    • default-gateway-of-nic-to-filestore 是连接到与 Filestore 实例共享的 VPC 网络的 NIC 的默认网关 IP 地址。

    如需详细了解如何将 Compute Engine 实例与多个 NIC 配合使用,请参阅配置策略路由

  4. 安装 NFS:

    Debian/Ubuntu

    使用以下命令在 Debian 或 Ubuntu 上安装 NFS。

    sudo apt-get -y update &&
    sudo apt-get install nfs-common

    RHEL/CentOS

    使用以下命令在 Red Hat Enterprise Linux 或 CentOS 上安装 NFS。

    sudo yum update &&
    sudo yum install nfs-utils

    SUSE

    使用以下命令在 SUSE 上安装 NFS。

    sudo zypper update &&
    sudo zypper -n install nfs-client
  5. 使本地目录映射到 Filestore 文件共享:

    sudo mkdir -p mount-point-directory
    

    其中 mount-point-directory 是要创建的目录(例如 /mnt/filedir)。

  6. 打开 /etc/fstab 文件:

    sudo vim /etc/fstab
    
  7. /etc/fstab 文件中添加以下行:

    ip-address:/file-share mount-point-directory nfs defaults,_netdev 0 0
    

    其中:

    • ip-address 是 Filestore 实例的 IP 地址。
    • file-share 是实例上的文件共享的名称。
    • mount-point-directory 是要将 Filestore 文件共享映射到的路径。

    示例/etc/fstab 中的以下行使用默认装载选项,将 IP 地址为 10.0.0.2 的 Filestore 实例的文件共享 vol1 装载到装载点目录 /mnt 中:

    10.0.0.2:/vol1 /mnt nfs defaults,_netdev 0 0
    
  8. /etc/fstab 中装载所有内容:

    sudo mount -a
    

    每当客户端虚拟机启动时,系统现在都会自动装载文件共享。

Linux:autofs

您可以将 autofs 配置为仅在有人访问时才自动装载文件共享,并在未使用时将其卸载。与在 /etc/fstab 中静态装载文件共享相比,此方法有助于在客户端需要映射到多个装载点时节省客户端虚拟机资源。

在客户端虚拟机上安装 NFSautofs

  1. 在 Cloud Console 中,转到“虚拟机实例”页面。

    转到“虚拟机实例”页面

  2. 找到您要用作客户端的 Linux 虚拟机,然后点击 SSH 打开该虚拟机上的终端。

  3. 可选:通过次要网络在具有多个网络接口的客户端虚拟机上装载文件共享。

    详细信息

    如果客户端虚拟机有多个网络接口,并且您希望通过次要网络(即 nic0 以外的接口)装载文件共享,则必须配置客户端虚拟机的路由政策,以确保文件共享通过正确的网络接口装载。为此,请修改以下文件:

    • /etc/default/instance_configs.cfg 中,将 NetworkInterfacessetup 标志设置为 false
      [NetworkInterfaces]
      dhclient_script = /sbin/google-dhclient-script
      dhcp_command =
      ip_forwarding = true
         setup = false
      
    • /etc/network/interfaces 中,添加以下行:

      auto eth1
      iface eth1 inet dhcp
          up ip route add filestore-reserved-address-range via default-gateway-of-nic-to-filestore
      

    其中:

    • filestore-reserved-address-range 是 Filestore 实例使用的预留地址范围。
    • default-gateway-of-nic-to-filestore 是连接到与 Filestore 实例共享的 VPC 网络的 NIC 的默认网关 IP 地址。

    如需详细了解如何将 Compute Engine 实例与多个 NIC 配合使用,请参阅配置策略路由

  4. 运行以下命令安装 NFS:

    Debian/Ubuntu

    使用以下命令在 Debian 或 Ubuntu 上安装 NFS。

    sudo apt-get -y update &&
    sudo apt-get install nfs-common

    RHEL/CentOS

    使用以下命令在 Red Hat Enterprise Linux 或 CentOS 上安装 NFS。

    sudo yum update &&
    sudo yum install nfs-utils

    SUSE

    使用以下命令在 SUSE 上安装 NFS。

    sudo zypper update &&
    sudo zypper -n install nfs-client
  5. 在客户端虚拟机的终端窗口中,安装 autofs

    Debian/Ubuntu

    sudo apt-get install autofs
    

    RHEL/CentOS

    sudo yum install autofs
    

    SUSE

    sudo zypper -n install autofs
    

配置 autofs 以将文件共享动态装载到客户端虚拟机

  1. 启用 autofs

    sudo systemctl enable --now autofs
    
  2. 使本地目录映射到 Filestore 文件共享:

    sudo mkdir -p mount-point-directory
    

    其中 mount-point-directory 是要创建的目录。它不得包含任何子目录。在本指南中,我们使用 /nfs 作为装载点目录。

  3. 打开 /etc/auto.master 文件:

    sudo vim /etc/auto.master
    
  4. /etc/auto.master 文件中添加以下行:

    /nfs /etc/auto.nfs --timeout seconds
    

    其中 seconds 是装载超时之前的秒数。 默认值为 300。如果将此值设置为 0,则会停用 autofs 卸载。

  5. 创建名为 /etc/auto.nfs 的文件:

    sudo vim /etc/auto.nfs
    
  6. /etc/auto.nfs 文件中添加以下行:

    mount-point-subdir options ip-address:/file-share
    

    其中:

    • mount-point-subdir 是要将 Filestore 文件共享映射到的 /nfs 中的子目录。此子目录是动态生成的,不会存在于客户端虚拟机中。
    • options是 NFS 装载选项。对于自动装载,我们建议指定 -o tcp 以降低装载和卸载的延迟时间。
    • ip-address 是 Filestore 实例的 IP 地址。
    • file-share 是实例上的文件共享的名称。

    示例/etc/auto.nfs 中的以下行使用授予的 read/write 访问权限,将 IP 地址为 10.0.0.2 的 Filestore 的文件共享 vol1 装载到动态生成的子目录 file-shares 中:

    file-shares -rw 10.0.0.2:/vol1
    

测试配置

  1. 如果当前已装载文件共享,则需要将其卸载:

    sudo umount mount-point-directory
    

    其中 mount-point-directory 是将 Filestore 文件共享映射到的路径。

    如果存在在系统启动时装载文件共享的 /etc/fstab 条目,请务必将其移除。

  2. 重新加载 autofs

    sudo service autofs reload
    
  3. 确认您的配置有效:

    ls mount-point-directory/mount-point-subdir
    

    其中:

    • mount-point-directory/etc/auto.master 文件中指明的装载点目录。
    • mount-point-subdir/etc/auto.nfs文件中指明的装载点子目录。

    在本示例中,命令将是:

    ls /nfs/file-shares
    

    如果自动装载配置正确,系统将先装载文件共享,然后返回 ls 命令的结果。系统会在一段闲置期间(由 /etc/auto.master 文件中指定的 timeout 值定义)后自动卸载文件共享。

Windows

连接到 Windows 虚拟机

  1. 在 Cloud Console 中,转到“虚拟机实例”页面。

    转到“虚拟机实例”页面

  2. 找到要用作客户端的 Windows 虚拟机,然后点击 RDP 以打开连接到该虚拟机的远程桌面连接。如需了解详情,请参阅连接到 Windows 实例

在 Windows 虚拟机上安装 NFS

  1. 在 Windows 虚拟机上,以管理员身份打开 PowerShell。
  2. 在 PowerShell 中,安装 NFS 客户端:

    Install-WindowsFeature -Name NFS-Client
    
  3. 根据提示重启 Windows 虚拟机实例,然后打开一个新的远程桌面连接。

配置 NFS 客户端使用的用户 ID

  1. PowerShell 中,运行以下命令以创建两个新的注册表项:AnonymousUidAnonymousGid

    New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default" `
        -Name "AnonymousUid" -Value "0" -PropertyType DWORD
    
    New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default" `
        -Name "AnonymousGid" -Value "0" -PropertyType DWORD
    
  2. 重启 NFS 客户端服务:

    nfsadmin client stop
    
    nfsadmin client start
    

将文件共享映射到 Windows 虚拟机

  1. 退出 PowerShell

    exit
    
  2. Command Prompt 中,将文件共享映射到驱动器盘符:

    mount filestore-ip:/file-share-name drive-letter:
    

    其中:

    • filestore-ip 是 Filestore 实例的 IP 地址。
    • file-share-name 是 Filestore 实例上的文件共享的名称。
    • drive-letter 是您要为映射分配的云端硬盘的字母。

    示例

    以下命令会将 IP 地址为 10.0.0.2 的 Filestore 实例上的文件共享 vol1 映射到客户端 Windows 虚拟机上的驱动器 z:

    mount 10.0.0.2:/vol1 z:
    

在文件共享上创建和装载子目录

将文件共享装载到客户端虚拟机上后,您可以在文件共享上创建子目录,然后客户端便可直接装载这些目录,而无需装载整个文件共享:

  1. 要在装载的文件共享上创建子目录,请运行以下命令:

    sudo mkdir -p mount-point-directory/file-share-sub-dir
    

    其中:

    • mount-point-directory 是文件共享映射到的路径。
    • file-share-sub-dir 是您要在文件共享中创建的子目录的路径。

    此命令会同时在客户端虚拟机和文件共享上创建子目录。例如,如果您已将文件共享 10.0.0.2:/vol1 装载到客户端虚拟机上的目录 /mnt,则 sudo mkdir -p /mnt/nfs 命令会在文件共享上创建 10.0.0.2:/vol1/nfs 并在客户端虚拟机上创建 /mnt/nfs

  2. 可选:如果要将文件共享子目录装载到当前装载文件共享的客户端虚拟机上的目录,则必须先卸载文件共享:

    sudo umount mount-point-directory
    

    其中,mount-point-directory 是文件共享当前映射到的目录。

  3. 装载子目录:

    sudo mount ip-address:/file-share/file-share-sub-dir mount-point-directory
    

    其中:

    • ip-address 是 Filestore 实例的 IP 地址。
    • file-share 是实例上的文件共享的名称。
    • file-share-sub-dir 是要装载的文件共享中的子目录路径。
    • mount-point-directory 是您要将 Filestore 文件共享映射到的路径。

    示例:在以下命令中:

    sudo mount 10.0.0.2:/vol1/nfs /mnt/nfs
    
    • 10.0.0.2 是 Filestore 实例的 IP 地址。
    • vol1 是文件共享的名称。
    • nfs 是文件共享子目录。
    • /mnt/nfs 是文件共享子目录 nfs 映射到的客户端虚拟机上的目录。

后续步骤