问题排查

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

性能下降

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

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

  4. 使用 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 之间复制数据

目前,使用 gsutil 将数据从 Cloud Storage 复制到 Filestore 实例的速度较为缓慢。没有已知的缓解措施。

Filestore 无响应

计划性维护

如果 Filestore 几分钟没有响应,然后重新有响应,则无响应时间段可能是由计划性维护事件引起。如需了解 Filestore 的服务等级协议 (SLA),请参阅服务等级协议 (SLA) 页面。

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

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

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

检查实例是否仍然存在:

    gcloud filestore instances list

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

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

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

  1. 通过在客户端虚拟机上运行以下命令来检查 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 的数量会随容量扩缩。如果您想添加更多 inode,则必须增加更多容量。

  2. 如果仍有剩余的 inode,则可能是达到了目录的条目(文件或子目录)数量上限。一个目录可以包含的最大条目数取决于这些条目的名称长度。但是,达到此上限是一个概率,而非硬性限制。要解决此问题,您需要将条目分布到子目录中,从而创建更深的文件层次结构。

无法创建实例

创建 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-name  \
        --flatten="bindings[].members" \
        --format='table(bindings.role)' \
        --filter="bindings.members:service-project-id@cloud-filer.iam.gserviceaccount.com"
    

    其中:

    • project-name 是您的 Google Cloud 项目的名称。
    • project-id 是您的 Google Cloud 项目的 ID 编号。

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

    ROLE
    roles/file.serviceAgent
    

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

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

    其中 project-id 是您的 Google Cloud 项目的 ID 编号。

创建实例时收到错误代码 13

有多个原因可能导致实例创建期间出现错误代码 13 错误,但最常见的原因是 Filestore 已用尽内部网络配额。

对于您在其中创建 Filestore 实例的每个 VPC 网络,Filestore 必须创建与该网络对等互连的内部网络。即使 Filestore 实例和与其关联的 VPC 网络被删除,这些内部网络也会保留。

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

Error code 13, message: an internal error has occurred

清除内部网络的唯一方法是停用然后重新启用 Filestore API:

gcloud services disable file.googleapis.com

gcloud services enable file.googleapis.com

如果您因为需要并且不能删除 Filestore 实例而无法这样做,则必须联系您的客户代表手动清除对等互连的网络。

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

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

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

无法装载文件共享

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

确认是否列出了该实例的任何 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。