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

本页面介绍如何在同一 Google Cloud 项目和 VPC 网络中的 Compute Engine 虚拟机 (VM) 实例上装载 Filestore 文件共享。要了解如何在远程网络中的客户端上装载文件共享,请参阅在远程客户端上装载文件共享。如果您希望改为从 Google Kubernetes Engine 集群访问 Filestore 实例,请参阅使用 Filestore CSI 驱动程序访问 Filestore 实例

准备工作

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

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

使用以下一种过程在 Compute Engine 虚拟机上装载 Filestore 文件共享。我们建议装载到 n1-standard-8 虚拟机或具有更高配置的虚拟机,以获得最佳性能。

Linux:装载

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

  1. 在 Google Cloud 控制台中,前往“虚拟机实例”页面。

    转到“虚拟机实例”页面

  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 选项:

    选项 说明
    hard NFS 客户端会无限期地重试 NFS 请求。为了降低 Filestore 实例重新启动时 I/O 中断的可能性,我们建议为 Linux 和 Windows 客户端使用 hard 挂载选项。
    timeo=600 NFS 客户端会等待 600 分秒(60 秒)后再重试 NFS 请求。
    retrans=3 NFS 客户端会尝试 NFS 请求三次,再执行进一步的恢复操作。
    rsize=262144 对于每个 READ 请求,NFS 客户端最多可以从 NFS 服务器接收 262,144 个字节。
    注意:对于基础层级实例,请将 rsize 值设置为 1048576
    wsize=1048576 对于每个 WRITE 请求,NFS 客户端最多可以从 NFS 服务器接收 1048576 个字节。
    resvport 与 NFS 服务器就此装载装点进行通信时,NFS 客户端会使用特权源端口。
    async NFS 客户端延迟向 NFS 服务器发送应用程序写入,直到满足某些条件。
    注意:使用 sync 选项会大大降低性能。

    • 为了缩短挂载延迟时间,请指定 -o tcp 选项。
    • 如果您要将企业版或区域级(以前称为“大规模 SSD”)实例装载到运行 Linux 内核版本 5.3 及更高版本的客户端虚拟机上,请考虑指定 nconnect 装载选项来提高 NFS 性能。对于区域级层级,建议最多指定 7 个连接;对于地区级和企业级层级,建议最多指定 2 个连接。一般来说,文件共享容量越大,连接的客户端虚拟机越少,通过使用 nconnect 指定额外连接即可提升性能。

    使用您的首选选项运行 mount 命令,类似于以下内容:

    sudo mount -o rw 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 来设置对装载目录的权限,使根用户以外的其他用户可向其写入数据。如需设置目录权限,请运行以下命令:

    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. 如果您需要使用 NFS 文件锁定,则可能需要设置 statdnlockmgr 守护程序使用的端口,并配置防火墙规则以打开这些端口。

Linux:/etc/fstab

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

  1. 在 Google Cloud 控制台中,前往“虚拟机实例”页面。

    转到“虚拟机实例”页面

  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 options,_netdev 0 0
    

    其中:

    • ip-address 是 Filestore 实例的 IP 地址。
    • file-share 是实例上的文件共享的名称。
    • mount-point-directory 是要将 Filestore 文件共享映射到的路径。
    • options 是 NFS 装载选项。建议保留默认的 NFS 装载选项,但存在以下例外情况:
      • 对于自动装载,我们建议指定 -o tcp 以降低装载和卸载的延迟时间。
      • 如果您要将地区(以前称为“大规模 SSD”)实例装载到运行 Linux 内核版本 5.3 及更高版本的客户端虚拟机,请考虑指定 nconnect 装载选项来提高 NFS 性能。对于可用区级,建议最多指定 7 个连接;对于区域级和企业级,建议最多指定 2 个连接。一般来说,文件共享容量越大,连接的客户端虚拟机越少,通过使用 nconnect 指定额外连接即可提升性能。

    示例/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. 在 Google Cloud 控制台中,前往“虚拟机实例”页面。

    转到“虚拟机实例”页面

  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 装载选项。建议保留默认的 NFS 装载选项,但存在以下例外情况:
      • 对于自动装载,我们建议指定 -o tcp 以降低装载和卸载的延迟时间。
      • 如果您要将地区(以前称为“大规模 SSD”)实例装载到运行 Linux 内核版本 5.3 及更高版本的客户端虚拟机,请考虑指定 nconnect 装载选项来提高 NFS 性能。对于可用区级,建议最多指定 7 个连接;对于区域级和企业级,建议最多指定 2 个连接。一般来说,文件共享容量越大,连接的客户端虚拟机越少,通过使用 nconnect 指定额外连接即可提升性能。
      • 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. 在 Google Cloud 控制台中,前往“虚拟机实例”页面。

    转到“虚拟机实例”页面

  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. 可选:通过次要网络在具有多个网络接口的客户端虚拟机上装载文件共享。

    详细信息(点击可展开)

    如果要通过次要网络(即 nic0 以外的接口)装载文件共享,则必须修改客户端虚拟机的路由政策。运行:

    route -p ^
        add filestore-reserved-address-range ^
        mask address-range-subnet-mask ^
        default-gateway-of-nic-to-filestore
    

    其中:

    • filestore-reserved-address-range 是 Filestore 实例使用的预留地址范围。
    • address-range-subnet-maskfilestore-reserved-address-range 的子网掩码。例如,/29 预留地址范围会使用 255.255.255.248 子网掩码。
    • default-gateway-of-nic-to-filestore 是连接到与 Filestore 实例共享的 VPC 网络的 NIC 的默认网关 IP 地址。

    示例

    route -p add 10.65.21.176 mask 255.255.255.248 10.128.0.1
    

    如需详细了解如何将 Compute Engine 实例与多个 NIC 配合使用,请参阅为额外的网络接口配置路由

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

    net use drive-letter: \\filestore-ip\file-share-name
    

    其中:

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

    示例

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

    net use Z: \\10.0.0.2\vol1
    
  4. 可选:如需使用 NFS 文件锁定功能,请验证以下内容:

    1. 确保为所有必需的 NFS 端口(包括 statdnlockmgr配置了防火墙规则

    2. 确保在 PowerShell 中使用类似于以下命令配置 Windows NFS 客户端,以使用预留端口:

      nfsadmin client config protocol=tcp UseReservedPorts=yes
      nfsadmin client stop
      nfsadmin client start
      

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

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

  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 映射到的客户端虚拟机上的目录。

后续步骤