问题排查

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

本页面介绍在使用 Filestore 时遇到问题的情况下可能会有帮助的问题排查步骤。

性能下降

  1. 确保您的客户端虚拟机使用的是推荐的机器类型
  2. 如果您的客户端虚拟机运行的是 Linux,请确认您使用的是默认装载选项

  3. 确保客户端虚拟机与 Filestore 实例位于同一地区。跨地区装载不仅会降低性能,还会导致产生网络费用

  4. 请确保您的 Filestore 实例没有达到或接近容量上限。当容量接近上限时,任何剩余的空间都会被高度碎片化,导致读取和写入操作的速度变慢。避免此状况所需要的可用空间量取决于实际情况。我们建议您设置“磁盘空间不足”提醒

  5. 使用 fio 工具测试 Filestore 实例的性能

    如果测试结果显示异常的性能下降,请联系您的客户代表。如果测试结果显示性能等于或高于预期,请继续查看下一部分。

导致性能下降的用例

以下是一些导致性能不佳的用例和场景:

涉及大量小文件的工作负载

Filestore 文件共享使用 sync 导出选项来确保数据安全和 NFS 协议合规性。对于大多数数据修改操作,Filestore 实例会等待数据提交到存储,然后再回复来自客户端虚拟机的请求。如果操作中涉及许多文件,客户端会执行一长串同步操作,从而导致累计延迟时间增加。

此场景的一个示例是,解压缩文件共享上的归档文件(如 tar 文件)。在解压缩包含多个文件的归档文件时,TAR 会连续执行多个同步操作。因此,性能会降低。

如果您要将许多小文件复制到一个文件共享,请尝试使用 gsutil 等工具并行创建文件:

mkdir -p /mnt/nfs/many_files_rsync/
time gsutil -m -q rsync -rp many_files /mnt/nfs/many_files_rsync/

在 Cloud Storage 和 Filestore 之间复制数据

装载和卸载文件共享的延迟时间

使用默认装载选项装载文件共享时,装载命令会尝试发现 Filestore 实例支持的传输方法,从而造成三秒的延迟。

mountd 守护程序会首先尝试使用 Filestore 不支持的 UDP。一旦初始尝试超时,就会回退到 TCP。要绕过此发现过程并消除增加的延迟时间,您可以指定 tcp 装载选项,例如:

sudo mount -o tcp 10.0.0.2:/vol1 /mnt/nfs

如果您使用 autofs 自动装载,则此装载选项尤为重要。

Filestore 无响应

Filestore 实例不响应 pingtraceroute 请求

Filestore 实例不响应 pingtraceroute 请求,因为 Filestore 不允许使用 ICMP。

如需测试与 Filestore 实例的连接,您可以通过客户端运行 showmount

sudo showmount -e filestore-ip

Filestore 实例使用其导出的文件系统进行响应,例如:

Export list for 10.139.19.98:
/vol1 192.168.0.0/16,172.16.0.0/12,10.0.0.0/8

您还可以通过运行以下命令来检查客户端是否可以访问 Filestore 的 RPC 信息:

sudo rpcinfo -p <filestore-ip>

响应如下所示:

program vers proto   port  service
 100000    4   tcp    111  portmapper
 100000    3   tcp    111  portmapper
 100000    2   tcp    111  portmapper
 100000    4   udp    111  portmapper
 100000    3   udp    111  portmapper
 100000    2   udp    111  portmapper
 100024    1   udp   2046  status
 100024    1   tcp   2046  status
 100003    3   tcp   2049  nfs
 100227    3   tcp   2049
 100021    1   udp   4045  nlockmgr
 100021    3   udp   4045  nlockmgr
 100021    4   udp   4045  nlockmgr
 100021    1   tcp   4045  nlockmgr
 100021    3   tcp   4045  nlockmgr
 100021    4   tcp   4045  nlockmgr
 100005    3   udp   2050  mountd
 100005    3   tcp   2050  mountd

计划性维护

一段时间后,Filestore 会在几分钟内无响应,然后由于计划性维护事件而再次做出响应。如需了解 Filestore 的服务等级协议 (SLA),请参阅服务等级协议 (SLA) 页面。

Filestore 不支持客户定义的维护期。客户也无法使用 Filestore 的维护期安排功能。

实例在仍装载到客户端的情况下被删除

如果文件操作或 unix 命令(如 dfls 或任何读/写操作)停止响应,则 Filestore 实例可能在仍装载到客户端的情况下被删除。

检查实例是否仍然存在:

    gcloud filestore instances list

如果该实例不再列出,您可以使用与被删除实例相同的 IP 地址和文件共享名称创建新实例,从而恢复控制。创建实例后,无响应的操作会退出并报错。如果您不需要 Filestore 实例,则可以卸载文件共享并将其删除。

为防止将来再发生类似情况,在删除 Filestore 实例之前,请务必先将其卸载。

实例显示 REPAIRING 状态

Filestore 实例因用户无法控制的内部原因而处于运行状况不佳的状态,并且正在自动修复自身。在此期间,实例不可用,您无需执行任何进一步操作。

容量问题

“设备上已没有剩余空间”

通过在客户端虚拟机上运行以下命令来检查 Filestore 实例是否有足够的 inode:

df -i

该命令会返回类似于以下的内容:

Filesystem           Inodes        IUsed      IFree         IUse%  Mounted on
10.0.0.2:/vol1    134217728        13         134217715     1%     /mnt/test

存储在文件共享上的每个文件都消耗一个 inode。如果 IUse% 达到 100%,则即使您尚未达到最大分配容量,也无法在文件共享上存储更多文件。inode 的数量会随容量扩缩。如果您想添加更多 inode,则必须增加更多容量。

“df”和“du”命令报告的不同可用磁盘空间量

当由正在运行的进程打开的文件被删除时,关闭该文件之后,它占用的磁盘空间才会释放。df 命令会计入已删除的打开文件占用的空间,而 du 命令则不会。计算上的差异是 du 命令所显示的可用空间通常多于 df 的原因。

如需显示由仍在运行进程打开的已删除文件,请运行以下命令:

lsof | grep deleted

无法创建实例

创建 Filestore 实例时提示 PERMISSION DENIED

  1. 检查 Filestore API 是否已启用:

    gcloud services enable file.googleapis.com
    
  2. 检查您是否具有 roles/file.editor 角色。如需了解详情,请参阅 IAM 角色和权限

  3. 如果仍然遇到该错误,则可能是 Filestore 服务帐号移除了 file.serviceAgent 角色。要检查是否存在这种情况,请运行以下命令:

    gcloud projects get-iam-policy project-id-or-number  \
        --flatten="bindings[].members" \
        --format='table(bindings.role)' \
        --filter="bindings.members:service-project-number@cloud-filer.iam.gserviceaccount.com"
    

    其中:

    • project-id-or-number 是您的 Google Cloud 项目的 ID 或编号。
    • project-number 是您的 Google Cloud 项目的编号。

    该命令应返回如下所示的内容:

    ROLE
    roles/file.serviceAgent
    

    如果未列出 roles/file.serviceAgent,您可以通过运行以下命令将其恢复:

    gcloud projects add-iam-policy-binding project-id-or-number  \
        --member serviceAccount:service-project-number@cloud-filer.iam.gserviceaccount.com  \
        --role roles/file.serviceAgent
    

创建实例时的 System limit for internal resources has been reached 错误

此错误是 Filestore 达到内部网络配额引起的。对于您在其中创建 Filestore 实例的每个 VPC 网络,Filestore 必须创建一个与该网络建立对等互连的内部网络。即使 Filestore 实例和与其关联的 VPC 网络被删除,这些内部网络也会保留。

当一个项目的内部网络数量达到 49 后,Filestore 将无法再创建新的内部网络,从而导致无法在新 VPC 网络中创建 Filestore 实例。如果您尝试创建,则会导致以下错误之一:

System limit for internal resources has been reached. Please request to adjust limit here: https://forms.gle/PFPJ2QD4KnCHzYEx9

您可以通过停用然后重新启用 Filestore API 来清除内部网络:

gcloud services disable file.googleapis.com

gcloud services enable file.googleapis.com

如果由于无法删除 Filestore 实例或者您不希望丢失通过配额增加请求授予的配额,而无法停用 API,则可以填写以下表格,调整网络限制:

https://forms.gle/PFPJ2QD4KnCHzYEx9

如果您需要定期删除和创建 VPC 网络和 Filestore 实例,您可以通过以下两种方式避免用尽网络配额:

  • 创建 VPC 网络时,使用与您之前创建 Filestore 实例所用网络相同的名称。

  • 在一个不超过 49 个 VPC 网络的池中进行循环切换,而不是删除然后重新创建 VPC 网络。

无法装载文件共享

我的虚拟机或 GKE pod 无法访问 Filestore

运行以下命令,确认 Filestore 实例是否可访问(不支持 pingtraceroute):

sudo showmount -e <filestore-ip>

该命令应该会以含有已导出文件系统的列表响应。然后通过运行以下命令来检查客户端是否可以访问 Filestore 的 RPC 信息:

sudo rpcinfo -p <filestore-ip>

如果无法访问 Filestore 实例,则常见原因包括未正确配置的网络设置或 ACL 设置,或者您正在尝试装载错误的实例。

  1. 检查是否启用了基于 IP 的访问权限控制,并检查客户端的 IP 地址是否受到限制。如需了解详情,请点击此处
  2. 检查您的防火墙设置以确保所需的端口已打开。如需了解详情,请参阅配置防火墙规则
  3. 如果您尝试通过 GKE 集群访问 Filestore,并且收到错误 mount.nfs: access denied by server while mounting ...,请参阅无法从 GKE 集群访问文件共享

尝试装载文件共享时权限遭拒

确认是否列出了该实例的任何 NFS 导出选项

gcloud filestore instances describe instance-id \
    --zone=zone

其中:

  • instance-id 是 Filestore 的实例 ID。
  • zone 是 Filestore 实例所在的区域。

该命令会返回类似如下的内容:

createTime: '2019-10-11T17:28:23.340943077Z'
fileShares:
- capacityGb: '1024'
  name: vol1
  nfsExportOptions:
  - accessMode: READ_WRITE
    ipRanges:
    - 128.0.0.0/29
    squashMode: NO_ROOT_SQUASH
name: projects/yourproject/locations/us-central1-c/instances/nfs-server
networks:
- ipAddresses:
  - 10.0.0.2
  modes:
  - MODE_IPV4
  network: default
  reservedIpRange: 10.0.0.0/29
state: READY
tier: BASIC_HDD

如果您发现列出了 nfsExportOptions,请检查客户端的 IP 地址是否在预期的 accessModeipRanges 下列出的范围内。如果不是,您必须修改 NFS 导出选项

无法将文件共享装载到 App Engine

Filestore 不支持 App Engine。

无法从 GKE 集群装载文件共享

您无法直接将 Filestore 文件共享装载到 GKE 集群。您必须配置 PV 和 PVC

无法从 GKE 集群访问文件共享

如需详细了解与 Kubernetes 或 Google Kubernetes Engine 相关的问题排查信息,您还可以参阅官方的 Kubernetes 问题排查指南GKE 问题排查指南

错误:输出:mount.nfs:装载 x.x.x.x:/file-share-name 时服务器拒绝访问

确保 PV spec.nfs.pathspec.nfs.server 的值分别与文件共享的名称和 Filestore 实例的 IP 地址匹配。

示例

如果您的文件共享名为 vol1 且 Filestore 实例的 IP 地址为 10.0.0.2,则 PV spec.nfs.pathspec.nfs.server 必须与这些值匹配:

apiVersion: v1
kind: PersistentVolume
metadata:
 name: fileserver
spec:
 capacity:
   storage: 2T
 accessModes:
 - ReadWriteMany
 nfs:
   path: /vol1
   server: 10.0.0.2

无法停用 Filestore API

删除所有 Filestore 相关资源,例如 Filestore 实例和备份。在部署 Filestore 实例时,不能停用 Filestore API。

错误:Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges.

如果给定的专用连接用尽了您分配的 IP 地址空间,则 Google Cloud 会返回以下错误:Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges.

如需详细了解如何解决此问题,请参阅 IP 地址范围用尽