

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 排查与限额有关的文件操作错误
<a name="troubleshooting-efs-fileop-errors"></a>

当您访问 EFS 文件系统时，对文件系统中文件的某些限制将适用。超出这些限制会导致文件操作错误。有关 Amazon EFS 中基于文件的限制的更多信息，请参阅[Amazon EFS 限额](limits.md)。

您可以在下文中查找一些常见文件操作错误及与每个错误相关的限制。

**Topics**
+ [检查打开的文件和文件锁](#check-open-files-locks)
+ [命令失败，并显示“超出磁盘配额”错误](#diskquotaerror)
+ [命令失败，并显示“I/O 错误”](#ioerror)
+ [命令失败，并显示“文件名太长”错误](#filenametoolong)
+ [命令失败，并显示“未找到文件”错误](#filenotfound)
+ [命令失败，并显示“链接太多”错误](#hardlinkerror)
+ [命令失败，并显示“文件太大”错误](#filesizeerror)

## 检查打开的文件和文件锁
<a name="check-open-files-locks"></a>

要排查文件操作错误，您可以通过检查 EFS 挂载点上打开的文件和文件锁来检查您的客户端系统是否已达到限制：
+ **检查打开的文件** - 使用操作系统的工具列出 EFS 挂载路径下打开的文件。这有助于确定是否已接近打开文件的上限。例如，在 Linux 上，您可以使用：

  ```
  lsof <efs-mount-path>
  ```
+ **检查文件锁** - 使用系统的锁监控工具，列出 EFS 挂载路径下存在锁的文件。这有助于确定是否已达到锁限制。例如，在 Linux 上，您可以使用：

  ```
  lslocks | grep <efs-mount-path>
  ```

这些命令会显示当前用量相对于 EFS 限制的占比情况，帮助您确定文件操作错误是否与达到系统或服务限制有关。

## 命令失败，并显示“超出磁盘配额”错误
<a name="diskquotaerror"></a>

 Amazon EFS 当前不支持用户磁盘配额。如果超出了以下任何限制，则可能会出现该错误：
+ 最多 65536 个活动用户可以同时打开文件。多次登录的一个用户账户计为一个活动用户。
+ 一个实例同一时刻最多可打开 65536 个文件。列出目录内容不会视为打开文件。
+ 客户端上的每个唯一挂载每次连接最多可以获得总计 65536 个锁。

**要采取的操作**  
如果遇到该问题，可通过确定超出了上述哪个限制，然后进行更改以满足该限制，加以解决。有关更多信息，请参阅 [NFS 客户端的配额](limits.md#limits-client-specific)。要查看您的当前用量，请参阅[检查打开的文件和文件锁](#check-open-files-locks)。

## 命令失败，并显示“I/O 错误”
<a name="ioerror"></a>

遇到下列问题之一时会发生此错误：
+ 每个实例同一时刻有超过 65536 个活动用户账户打开文件。

**要采取的操作**  
如果遇到该问题，您可以满足在实例上支持的打开文件数限制以解决该问题。为此，请减少在实例上同时打开 Amazon EFS 文件系统中的文件的活动用户数。要查看您的当前用量，请参阅[检查打开的文件和文件锁](#check-open-files-locks)。
+ 加密您的文件系统的 AWS KMS 密钥已删除。

**要采取的操作**  
如果遇到此问题，则您不能再解密用该密钥加密的数据，这意味着该数据将无法恢复。

## 命令失败，并显示“文件名太长”错误
<a name="filenametoolong"></a>

当文件名或其符号链接 (symlink) 太长时，会出现该错误。文件名具有以下限制：
+ 名称的长度最多为 255 个字节。
+ 符号链接的大小最多为 4080 个字节。

**要采取的操作**  
如果遇到该问题，可通过减小您的文件名或符号链接的长度以满足支持的限制，加以解决。

## 命令失败，并显示“未找到文件”错误
<a name="filenotfound"></a>

之所以出现此错误，是因为某些较早的 32 位版本的 Oracle 电子商务套件使用 32 位文件 I/O 接口，而 EFS 使用 64 位索引节点编号。可能失败的系统调用包括 `stat ()` 和 `readdir ()`。

**要采取的操作**  
如果遇到此错误，可以使用 **nfs.enable\$1ino64=0 kernel** 启动选项解决问题。此选项将 64 位 EFS inode 数压缩为 32 位。对于不同的 Linux 发行版，内核启动选项的处理方式不同。在 Amazon Linux 上，向 `/etc/default/grub` 中的 `GRUB_CMDLINE_LINUX_DEFAULT` 变量添加 `nfs.enable_ino64=0 kernel` 即可启用该选项。有关如何启用内核启动选项的信息，请参阅特定于您的发行版的具体文档。

## 命令失败，并显示“链接太多”错误
<a name="hardlinkerror"></a>

当文件的硬链接太多时，会出现该错误。一个文件中最多可有 177 个硬链接。

**要采取的操作**  
如果遇到该问题，可通过减少文件硬链接的数量以满足支持的限制，加以解决。

## 命令失败，并显示“文件太大”错误
<a name="filesizeerror"></a>

当文件太大时，会出现该错误。单个文件的大小最多为 52,673,613,135,872 个字节 (47.9 TiB)。

**要采取的操作**  
如果遇到该问题，可通过减小文件的大小以满足支持的限制，加以解决。