

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

# 挂载 EFS 文件系统
<a name="mounting-fs"></a>

我们建议使用 EFS 挂载帮助程序挂载 EFS 文件系统。EFS 挂载帮助程序可帮助您在运行受支持发行版的 EC2 Linux 和 Mac 实例上挂载 EFS 文件系统。挂载帮助程序是您在安装 Amazon EFS 客户端（`amazon-efs-utils`）时安装的开源工具集的一部分。有关 Amazon EFS 客户端和受支持发行版的更多信息，请参阅[安装 Amazon EFS 客户端](using-amazon-efs-utils.md)。

或者，您也可以使用标准 Linux NFS 客户端手动挂载 EFS 文件系统。在 Amazon EC2 实例上挂载文件系统时，Amazon EFS 支持网络文件系统版本 4.0 和 4.1（NFSv4）协议。

此外，您可以使用 EFS 挂载帮助程序或 NFS 将 EC2 实例配置为在实例启动时自动挂载 EFS 文件系统。

**Topics**
+ [Linux 的挂载注意事项](mounting-fs-mount-cmd-general.md)
+ [使用 EFS 挂载帮助程序挂载 EFS 文件系统](efs-mount-helper.md)
+ [使用网络文件系统挂载 EFS 文件系统](mounting-fs-old.md)
+ [自动挂载 EFS 文件系统](mount-fs-auto-mount-onreboot.md)
+ [卸载文件系统](unmounting-fs.md)
+ [教程：创建 EFS 文件系统并将其挂载到 EC2 实例上 AWS CLI](wt1-getting-started.md)
+ [教程：使用本地 Linux 客户端挂载](mounting-fs-mount-helper-direct.md)
+ [教程：挂载来自其它 VPC 的文件系统](efs-different-vpc.md)
+ [解决挂载问题](troubleshooting-efs-mounting.md)

# Linux 的挂载注意事项
<a name="mounting-fs-mount-cmd-general"></a>

我们建议在 Linux 上使用以下挂载选项值：
+ `rsize=1048576` – 设置 NFS 客户端对每个网络 READ 请求可以接收的最大数据字节数。在从 EFS 文件系统上的文件读取数据时应用此值。我们建议您尽可能使用最大的大小（最多 `1048576`），以避免性能下降。
+ `wsize=1048576` – 设置 NFS 客户端对每个网络 WRITE 请求可以发送的最大数据字节数。在将数据写入到 EFS 文件系统上的文件时应用此值。我们建议您尽可能使用最大的大小（最多 `1048576`），以避免性能下降。
+ `hard` – 设置 NFS 客户端在 NFS 请求超时之后的恢复行为，以便 NFS 请求在服务器回复之前无限次重试。建议您使用硬挂载选项 (`hard`) 以确保数据完整性。如果您使用 `soft` 挂载，请将 `timeo` 参数至少设置为 `150` 分秒（15 秒）。这样做可尽量减少源自软挂载的数据损坏风险。
+ `timeo=600` – 将超时值设置为 600 分秒（60 秒），这是 NFS 客户端在重试 NFS 请求之前等待响应的时间。如果您必须更改超时参数 (`timeo`)，我们建议您使用至少为 `150` 的值，这相当于 15 秒。这样做有助于避免性能下降。
+ `retrans=2` – 将 NFS 客户端重试请求的次数设置为 2，超过此次数之后将尝试进一步的恢复操作。
+ `noresvport` – 告知 NFS 客户端在重新建立网络连接时，使用新的非特权传输控制协议（TCP）源端口。这样做有助于确保 EFS 文件系统在网络恢复事件后具有不间断的可用性。
+ `_netdev` – `/etc/fstab` 中存在此选项时，将阻止客户端尝试挂载 EFS 文件系统，直到启用了网络。

一般而言，避免设置任何其他不同于默认值的挂载选项，这会导致性能降低和其他问题。如果您不使用前面的默认值，请注意以下事项：
+ 更改读或写缓冲区大小或禁用属性缓存会导致性能下降。
+ Amazon EFS 会忽略源端口。如果您更改 Amazon EFS 源端口，则不会有任何影响。
+ Amazon EFS 不支持任何 Kerberos 安全变体。例如，下面的挂载命令将失败。

  ```
   $ mount -t nfs4 -o krb5p <DNS_NAME>:/ /efs/ 
  ```
+ 我们建议您使用其 DNS 名称挂载文件系统。Amazon EFS 将此名称解析为与您的 Amazon EC2 实例位于同一可用区的 EFS 挂载目标的 IP 地址，而无需调用外部资源。如果您在与 EC2 实例不同的可用区中使用挂载目标，则会导致跨可用区发送数据的标准 EC2 费用。可能还会面临更高的文件系统操作延迟。
+ 有关更多挂载选项和默认设置的详细说明，请参阅 Linux 文档。

**注意**  
如果需要启动您的 EC2 实例而不考虑挂载的 EFS 文件系统状态，请将 `nofail` 选项添加到 `/etc/fstab` 文件的文件系统条目中。

# 使用 EFS 挂载帮助程序挂载 EFS 文件系统
<a name="efs-mount-helper"></a>

安装 Amazon EFS 客户端（`amazon-efs-utils`）后，您可以使用 EFS 挂载帮助程序，在运行[受支持发行版](using-amazon-efs-utils.md#efs-utils-supported-distros)的 EC2 Linux 和 Mac 实例上挂载 EFS 文件系统。Amazon EFS 不支持从 EC2 Windows 实例进行挂载。

**重要**  
我们建议您始终使用最新版本的 `amazon-efs-utils`，以确保挂载成功。例如，2.3 `amazon-efs-utils` 之前的版本不支持使用 IPv6地址进行装载。

在挂载文件系统时，挂载帮助程序定义了新的网络文件系统类型（称为 `efs`），它与 Linux 中的标准 `mount` 命令完全兼容。挂载帮助程序还支持在 EC2 Linux 实例上使用 `/etc/fstab` 配置文件中的条目，在实例启动时自动挂载 EFS 文件系统。

**警告**  
请在自动挂载文件系统时使用 `_netdev` 选项，它用于指定网络文件系统。如果缺少 `_netdev`，您的 EC2 实例可能会停止响应。出现该结果是因为，需要在计算实例启动其网络后初始化网络文件系统。有关更多信息，请参阅 [自动挂载失败，并且实例没有响应](troubleshooting-efs-mounting.md#automount-fails)。

可以通过指定下列属性之一挂载文件系统：
+ **文件系统 DNS 名称** – 如果使用文件系统 DNS 名称，但挂载帮助程序无法解析它，例如，在不同 VPC 中挂载文件系统时，它将回退为使用挂载目标 IP 地址。有关更多信息，请参阅 [从其他 AWS 账户 或 VPC 挂载 EFS 文件系统](manage-fs-access-vpc-peering.md)。
+ **文件系统 ID** – 如果使用文件系统 ID，挂载帮助程序无需调用外部资源即可将其解析为挂载目标弹性网络接口（ENI）的本地 IP 地址。
+ **挂载目标 IP 地址** – 可以使用其中一个文件系统挂载目标的 IP 地址。

可以在 Amazon EFS 控制台中找到所有这些属性的值。文件系统 DNS 名称可在**附加**屏幕中找到。

将传输中数据加密声明为 EFS 文件系统的挂载选项时，挂载帮助程序将初始化客户端 `stunnel` 进程和名为 `amazon-efs-mount-watchdog` 的监管进程。`amazon-efs-mount-watchdog` 进程监控 TLS 挂载的运行状况，并在首次通过 TLS 挂载 EFS 文件系统时自动启动。如果您的客户端在 Linux 上运行，则此过程由 `upstart` 或 `systemd` 管理，具体取决于您的 Linux 发行版。对于在支持的 macOS 上运行的客户端，它由管理 `launchd`。

`Stunnel` 是一种开源多用途网络中继。客户端 `stunnel` 进程侦听本地端口的入站流量，挂载帮助程序将 NFS 客户端流量重定向到该本地端口。

挂载帮助程序使用 TLS 1.2 版与您的文件系统进行通信。使用 TLS 需要具有证书，并且这些证书需要由受信任的 Amazon 证书颁发机构进行签名。有关加密的工作方式的更多信息，请参阅[Amazon EFS 中的数据加密](encryption.md)。

**Topics**
+ [EFS 挂载帮助程序使用的挂载设置](mount-helper-setting.md)
+ [获取支持日志](mount-helper-logs.md)
+ [使用 EFS 挂载帮助程序的先决条件](mount-helper-prerequisites.md)
+ [使用 EFS 挂载帮助程序在 EC2 Linux 实例上挂载](mounting-fs-mount-helper-ec2-linux.md)
+ [使用 EFS 挂载帮助程序在 EC2 Mac 实例上挂载](mounting-fs-mount-helper-ec2-mac.md)
+ [从其他服务器装载 EFS 文件系统 AWS 区域](mount-different-region.md)
+ [挂载单区文件系统](mounting-one-zone.md)
+ [使用 IAM 授权挂载](mounting-IAM-option.md)
+ [使用 EFS 接入点进行挂载](mounting-access-points.md)
+ [将 EFS 挂载到多个 EC2 实例](mount-multiple-ec2-instances.md)
+ [从其他 AWS 账户 或 VPC 挂载 EFS 文件系统](manage-fs-access-vpc-peering.md)

# EFS 挂载帮助程序使用的挂载设置
<a name="mount-helper-setting"></a>

Amazon EFS 挂载帮助程序客户端使用以下针对 Amazon EFS 进行了优化的挂载选项：
+ `nfsvers=4.1` – 在 EC2 Linux 实例上安装时使用

  `nfsvers=4.0` – 在运行 macOS Big Sur、Monterey 和 Ventura 的支持的 EC2 Mac 实例上挂载时使用
+ `rsize=1048576` – 将 NFS 客户端可以为每个网络 READ 请求接收的最大数据字节数设置为 1048576（最大可用字节数），以避免性能下降。
+ `wsize=1048576` – 将 NFS 客户端可以为每个网络 WRITE 请求发送的最大数据字节数设置为 `1048576`（最大可用字节数），以避免性能下降。
+ `hard` – 设置 NFS 客户端在 NFS 请求超时之后的恢复行为，以便 NFS 请求在服务器回复之前无限次重试，从而确保数据完整。
+ `timeo=600` – 将 NFS 客户端在重试 NFS 请求之前用于等待响应的超时值设置为 600 分秒（60 秒），以避免性能下降。
+ `retrans=2` – 将 NFS 客户端重试请求的次数设置为 2，超过此次数之后将尝试进一步的恢复操作。
+ `noresvport` – 告知 NFS 客户端在重新建立网络连接时，使用新的非特权传输控制协议（TCP）源端口。使用 `noresvport` 选项来帮助确保 EFS 文件系统在重新连接或网络恢复事件后保持不间断的可用性。
+ `mountport=2049` – 仅在运行 macOS Big Sur、Monterey 和 Ventura 的 EC2 Mac 实例上挂载时使用。

# 获取支持日志
<a name="mount-helper-logs"></a>

EFS 挂载帮助程序具有 EFS 文件系统的内置日志记录。您可以与 Su AWS pport 共享这些日志以进行故障排除。可以使用 EFS 挂载帮助程序查找存储在客户端上的 `/var/log/amazon/efs` 中的日志。这些日志适用于 EFS 挂载帮助程序、stunnel 进程（默认禁用），以及监控 stunnel 进程的 `amazon-efs-mount-watchdog` 进程。

**注意**  
`amazon-efs-mount-watchdog` 进程确保每个挂载的 stunnel 进程正在运行，并在卸载 EFS 文件系统后停止 stunnel 进程。如果 stunnel 进程由于某种原因意外终止，watchdog 进程将重新启动该进程。

可以在 `/etc/amazon/efs/efs-utils.conf` 中更改日志配置。要使任何日志更改生效，需要使用 EFS 挂载帮助程序卸载并重新挂载文件系统。挂载帮助程序和 watchdog 日志的日志容量限制为 20 MiB。默认情况下，将禁用 stunnel 进程的日志。

**重要**  
您可以为 stunnel 进程日志启用日志记录。但是，启用 stunnel 日志可能会用完您的文件系统上的宝贵空间量。

# 使用 EFS 挂载帮助程序的先决条件
<a name="mount-helper-prerequisites"></a>

可以使用 Amazon EFS 挂载帮助程序在 Amazon EC2 实例上挂载 EFS 文件系统。要使用挂载帮助程序，您需要具有：
+ **要挂载的文件系统的文件系统 ID** – EFS 挂载帮助程序将文件系统 ID 解析为挂载目标弹性网络接口（ENI）的本地 IP 地址，无需调用外部资源。
+ **EFS 挂载目标** - 在虚拟私有云（VPC）中创建挂载目标。如果您使用服务推荐设置在控制台中创建文件系统，则会在文件系统所在的每个可用区 AWS 区域 中创建一个挂载目标。有关创建挂载目标的说明，请参阅[管理挂载目标](accessing-fs.md)。
**注意**  
我们建议您在新创建的挂载目标的生命周期状态变为**可用**后等待 60 秒，然后再通过 DNS 挂载文件系统。这种等待可以让 DNS 记录在文件系统 AWS 区域 所在的位置完全传播。

  如果您在与 EC2 实例不同的可用区中使用挂载目标，则会导致跨可用区发送数据的标准 EC2 费用。可能还会面临更高的文件系统操作延迟。
+ 从不同的可用区挂载单区文件系统：
  + **文件系统可用区的名称** – 如果您挂载的 EFS 单区文件系统位于与 EC2 实例不同的可用区中。
  + **挂载目标 DNS 名称** – 或者，也可以指定挂载目标的 DNS 名称，而不是可用区。
+ **运行受支持的 Linux 或 macOS 发行版之一的 EC2 实例** - 支持使用挂载帮助程序来挂载文件系统的发行版如下：
  + Amazon Linux 2
  + Amazon Linux 2023
  + Amazon Linux 2017.09 及更高版本
  + macOS Big Sur
  + Red Hat Enterprise Linux（和衍生产品，如 CentOS）7 和更新版本
  + Ubuntu 16.04 LTS 和更新版本
**注意**  
运行 macOS Big Sur 的 EC2 Mac 实例仅支持 NFS 4.0。
+ **EFS 挂载帮助程序安装在 EC2 实例上** - 挂载帮助程序是实用程序 `amazon-efs-utils` 程序包中的一个工具。有关安装 `amazon-efs-utils` 的信息，请参阅[安装 Amazon EFS 客户端](using-amazon-efs-utils.md)。
+ **EC2 实例在 VPC 中** – 连接的 EC2 实例必须位于基于 Amazon VPC 服务的虚拟私有云（VPC）中。还必须将其配置为使用提供的 DNS 服务器 AWS。有关 Amazon DNS 服务器的信息，请参阅《Amazon VPC 用户指南》**中的 [Amazon VPC 中的 DHCP 选项集](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)。
+ **VPC 已启用 DNS 主机名** – 连接的 EC2 实例的 VPC 必须启用了 DNS 主机名。有关更多信息，请参阅《Amazon VPC 用户指南》**中的 [VPC 的 DNS 属性](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-viewing)。
+ **对于不同的 EC2 实例和文件系统 AWS 区域** — 如果 EC2 实例和您要挂载的文件系统位于不同的位置 AWS 区域，则需要编辑`efs-utils.conf`文件中的`region`属性。有关更多信息，请参阅 [从其他服务器装载 EFS 文件系统 AWS 区域](mount-different-region.md)。

# 使用 EFS 挂载帮助程序在 EC2 Linux 实例上挂载
<a name="mounting-fs-mount-helper-ec2-linux"></a>

此过程需要满足以下条件：
+ 已在 Amazon EC2 实例上安装 `amazon-efs-utils` 软件包。有关更多信息，请参阅 [手动安装 Amazon EFS 客户端](installing-amazon-efs-utils.md)。
+ 已为文件系统创建挂载目标。有关更多信息，请参阅 [管理挂载目标](accessing-fs.md)。

**使用挂载帮助程序在 EC2 Linux 实例上挂载 EFS 文件系统**

1. 通过 Secure Shell（SSH）打开 EC2 实例上的终端窗口，然后使用正确的用户名登录。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[连接到您的 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html)。

1. 使用以下命令创建要用作文件系统装载点的目录 `efs`：

   ```
   sudo mkdir efs
   ```

1. 运行以下命令之一来挂载文件系统。
**注意**  
如果 EC2 实例和您要挂载的文件系统位于不同 AWS 区域，请参阅[从其他服务器装载 EFS 文件系统 AWS 区域](mount-different-region.md) 以编辑 `efs-utils.conf` 文件中的 `region` 属性。
   + 使用文件系统 ID 装载：

     ```
     sudo mount -t efs file-system-id efs-mount-point/
     ```

     使用您要安装的文件系统的 ID `file-system-id` 来`efs`代替*efs-mount-point*。

     ```
     sudo mount -t efs fs-abcd123456789ef0 efs/
     ```

     或者，如果要使用传输中的数据加密，您可以使用以下命令挂载文件系统。

     ```
     sudo mount -t efs -o tls fs-abcd123456789ef0:/ efs/
     ```
   + 使用文件系统 DNS 名称挂载：

     ```
     sudo mount -t efs -o tls file-system-dns-name efs-mount-point/
     ```

     ```
     sudo mount -t efs -o tls fs-abcd123456789ef0.efs.us-east-2.amazonaws.com efs/
     ```
   + 使用挂载目标 IP 地址挂载：

     ```
     sudo mount -t efs -o tls,mounttargetip=mount-target-ip file-system-id efs-mount-point/
     ```

     ```
     sudo mount -t efs -o tls,mounttargetip=192.0.2.0 fs-abcd123456789ef0 efs/
     ```

   可以在**附加**对话框中查看和复制用于挂载文件系统的确切命令。

   1. 在 Amazon EFS 控制台中，选择要挂载的文件系统以显示其详细信息页面。

   1. 要显示用于此文件系统的挂载命令，请选择右上角的**附加**。

      **附加**屏幕显示用于通过以下方式挂载文件系统的确切命令：
      + （**通过 DNS 挂载**）将文件系统的 DNS 名称与 EFS 挂载帮助程序或 NFS 客户端一起使用。
      + （**通过 IP 挂载**）使用 NFS 客户端的选定可用区中的挂载目标 IP 地址。

# 使用 EFS 挂载帮助程序在 EC2 Mac 实例上挂载
<a name="mounting-fs-mount-helper-ec2-mac"></a>

此过程需要满足以下条件：
+ 已在 Amazon EC2 Mac 实例上安装 `amazon-efs-utils` 软件包。有关更多信息，请参阅 [在运行 macOS Big Sur、macOS Monterey 或 macOS Ventura 的 EC2 Mac 实例上安装 Amazon EFS 客户端](installing-amazon-efs-utils.md#install-efs-utils-macOS)。
+ 已为文件系统创建挂载目标。可以在创建文件系统时创建挂载目标，并将其添加到现有文件系统中。有关更多信息，请参阅 [管理挂载目标](accessing-fs.md)。
+ 您正在运行 macOS Big Sur、Monterey 或 Ventura 的 EC2 Mac 实例上挂载文件系统。不支持其他 macOS 版本。

**注意**  
仅支持运行 macOS Big Sur、Monterey 和 Ventura 的 EC2 Mac 实例。不支持将其他 macOS 版本与 Amazon EFS 结合使用。

**在运行 macOS Big Sur、Monterey 或 Ventura 的 EC2 Mac 实例上使用 EFS 挂载帮助程序挂载 EFS 文件系统**

1. 通过 Secure Shell（SSH）打开 EC2 Mac 实例上的终端窗口，然后使用正确的用户名登录。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[连接到您的 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html)。

1. 使用以下命令创建要用作文件系统装载点的目录 ：

   ```
   sudo mkdir efs
   ```

1. 运行以下命令以挂载文件系统。
**注意**  
默认情况下，无论您是否在挂载命令中使用 `tls` 选项，EFS 挂载帮助程序在 EC2 Mac 实例上挂载时都使用传输中加密。

   ```
   sudo mount -t efs file-system-id efs-mount-point/
   ```

   ```
   sudo mount -t efs fs-abcd123456789ef0 efs/
   ```

   挂载时还可以使用 `tls` 选项。

   ```
   sudo mount -t efs -o tls fs-abcd123456789ef0:/ efs
   ```

   要在 EC2 Mac 实例上挂载文件系统而不使用传输中加密，请使用 `notls` 选项，如以下命令所示。

   ```
   sudo mount -t efs -o notls file-system-id efs-mount-point/
   ```

   可以按照如下所述，在管理控制台的**附加**对话框中查看和复制挂载文件系统的确切命令。

   1. 在 Amazon EFS 控制台中，选择要挂载的文件系统以显示其详细信息页面。

   1. 要显示用于此文件系统的挂载命令，请选择右上角的**附加**。

      **附加**屏幕显示用于通过以下方式挂载文件系统的确切命令：
      + （**通过 DNS 挂载**）将文件系统的 DNS 名称与 EFS 挂载帮助程序或 NFS 客户端一起使用。
      + （**通过 IP 挂载**）使用 NFS 客户端的选定可用区中的挂载目标 IP 地址。

# 从其他服务器装载 EFS 文件系统 AWS 区域
<a name="mount-different-region"></a>

要从与文件系统不同 AWS 区域 的 EC2 实例挂载 EFS 文件系统，必须编辑`efs-utils.conf`文件中的`region`属性值。

**在 `efs-utils.conf` 中编辑 `region` 属性**

1. 通过 Secure Shell（SSH）访问您的 EC2 实例的终端，然后使用相应的用户名登录。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[连接到您的 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html)。

1. 找到 `/etc/amazon/efs/efs-utils.conf` 文件并使用首选编辑器打开。

1. 找到以下行：

   ```
   #region = us-east-1
   ```

   1. 取消注释此行。

   1. 如果文件系统不在 `us-east-1` 区域中，请将 `us-east-1` 替换为文件系统所在的区域 ID。

   1. 保存更改。

1. 为跨区域挂载添加主机条目。有关此操作的更多信息，请参阅[步骤 3：为挂载目标添加主机条目](efs-different-vpc.md#wt6-efs-utils-step3)。

1. 使用适用于 [Linux](mounting-fs-mount-helper-ec2-linux.md) 或 [Mac](mounting-fs-mount-helper-ec2-mac.md) 实例的 EFS 挂载帮助程序挂载文件系统。

# 挂载单区文件系统
<a name="mounting-one-zone"></a>

EFS 单区文件系统仅支持与文件系统位于同一可用区的单个挂载目标。无法添加其他挂载目标。本节介绍挂载单区文件系统时需要考虑的事项。

使用与文件系统挂载目标位于同一可用区的 Amazon EC2 计算实例访问 EFS 文件系统，可以避免在可用区之间产生数据传输费用并获得更好的性能。

本节中的过程需要满足以下条件：
+ 已在 EC2 实例上安装 `amazon-efs-utils package`。有关更多信息，请参阅 [安装 Amazon EFS 客户端](using-amazon-efs-utils.md)。
+ 已为文件系统创建挂载目标。有关更多信息，请参阅 [管理挂载目标](accessing-fs.md)。

## 在不同可用区的 EC2 上挂载单区文件系统
<a name="mounting-one-zone-efs-util"></a>

如果要在位于不同可用区的 Amazon EC2 实例上挂载单区文件系统，必须在挂载帮助程序挂载命令中指定文件系统的可用区名称或文件系统挂载目标的 DNS 名称。

使用以下命令创建要用作文件系统挂载点的名为 `efs` 的目录 ：

```
sudo mkdir efs
```

使用以下命令，通过 EFS 挂载帮助程序挂载文件系统。此命令指定文件系统的可用区名称。

```
sudo mount -t efs -o az=availability-zone-name,tls file-system-id mount-point/
```

以下是使用示例值的此命令：

```
sudo mount -t efs -o az=us-east-1a,tls fs-abcd1234567890ef efs/
```

以下命令挂载文件系统，指定文件系统挂载目标的 DNS 名称。

```
sudo mount -t efs -o tls mount-target-dns-name mount-point/
```

以下是使用示例挂载目标 DNS 名称的此命令。

```
sudo mount -t efs -o tls us-east-1a.fs-abcd1234567890ef9.efs.us-east-1.amazonaws.com efs/
```

### 使用 EFS 挂载帮助程序在不同可用区中自动装载单区文件系统
<a name="automount-one-zone-efs-utils"></a>

如果要使用 `/etc/fstab` 在位于不同可用区的 EC2 实例上挂载 EFS 单区文件系统，必须在 `/etc/fstab` 条目中指定文件系统的可用区名称或文件系统挂载目标的 DNS 名称。

```
availability-zone-name.file-system-id.efs.aws-region.amazonaws.com:/ efs-mount-point efs defaults,_netdev,noresvport,tls 0 0
```

```
us-east-1a.fs-abc123def456a7890.efs.us-east-1.amazonaws.com:/ efs-one-zone efs defaults,_netdev,noresvport,tls 0 0
```

### 使用 NFS 自动挂载单区文件系统
<a name="automnt-one-zone-nfs"></a>

如果要使用 `/etc/fstab` 在位于不同可用区的 EC2 实例上挂载使用单区存储的 EFS 文件系统，必须在 `/etc/fstab` 条目中使用文件系统的 DNS 名称指定文件系统的可用区名称。

```
availability-zone-name.file-system-id.efs.aws-region.amazonaws.com:/ efs-mount-point nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0
```

```
us-east-1a.fs-abc123def456a7890.efs.us-east-1.amazonaws.com:/ efs-one-zone nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0
```

有关如何编辑 `/etc/fstab` 文件，以及此命令中使用的值的更多信息，请参阅[自动挂载 EFS 文件系统使用 NFS 在 EC2 Linux 或 Mac 实例上启用自动挂载](nfs-automount-efs.md)。

## 在其他 AWS 计算实例上安装带有 One Zone 文件系统的文件系统
<a name="mounting-one-zone-other-compute-instances"></a>

当您将单区域文件系统与亚马逊弹性容器服务、Amazon Elastic Kubernetes Service AWS Lambda或 Amazon Elastic Kubernetes Service 一起使用时，您需要将该服务配置为使用与 EFS 文件系统相同的可用区，如下所示，并在以下各节中进行介绍。

![\[AWS 连接到 EFS One Zone 文件系统的计算实例。\]](http://docs.aws.amazon.com/zh_cn/efs/latest/ug/images/efs-mount-onezone.png)


### 从 Amazon Elastic Container Service 连接
<a name="mount-one-zone-ecs"></a>

可以将 EFS 文件系统与 Amazon ECS 配合使用，以跨容器实例集共享文件系统数据，从而使您的任务无论位于哪个实例上，都可以访问相同的永久存储。要将 EFS 单区文件系统与 Amazon ECS 一起使用，应在启动任务时仅选择与文件系统位于同一可用区的子网。有关更多信息，请参阅《Amazon Elastic Container Service 开发人员指南》**中的 [Amazon EFS 卷](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/efs-volumes.html)。

### 从 Amazon Elastic Kubernetes Service 连接
<a name="mount-one-zone-eks"></a>

在从 Amazon EKS 挂载单区文件系统时，可以使用支持 EFS 接入点的 Amazon EFS [容器存储接口](https://docs.aws.amazon.com/eks/latest/userguide/efs-csi.html)（CSI）驱动程序，以在 Amazon EKS 或自行管理的 Kubernetes 集群中的多个容器组（pod）之间共享文件系统。Amazon EFS CSI 驱动程序安装在 Fargate 堆栈中。将 Amazon EFS CSI 驱动程序与 EFS 单区文件系统配合使用时，可以在启动容器组（pod）时使用 `nodeSelector` 选项来确保它与您的文件系统在同一个可用区内进行调度。

### 连接自 AWS Lambda
<a name="mount-one-zone-lambda"></a>

您可以将 Amazon EFS 与配合 AWS Lambda 使用，在函数调用之间共享数据，读取大型参考数据文件，并将函数输出写入永久存储和共享存储。Lambda 将函数实例安全地连接到位于同一可用区和子网中的 EFS 挂载目标。将 Lambda 与单区文件系统一起使用时，应将函数配置为只将调用启动到与您的文件系统位于同一可用区的子网中。

# 使用 IAM 授权挂载
<a name="mounting-IAM-option"></a>

要使用 AWS Identity and Access Management (IAM) 授权在 Linux 实例上挂载 EFS 文件系统，请使用 EFS 挂载帮助程序。有关 NFS 客户端的 IAM 授权的更多信息，请参阅[使用 IAM 控制文件系统访问](iam-access-control-nfs-efs.md)。

在以下几部分中，您需要创建一个目录作为文件系统挂载点。可使用以下命令创建挂载点目录 `efs`：

```
sudo mkdir efs
```

然后，可以将 `efs-mount-point` 的实例替换为 `efs`。

## 使用 EC2 实例配置文件通过 IAM 进行挂载
<a name="mount-iam-ec2-profile"></a>

如果要通过 IAM 授权挂载到具有实例配置文件的 Amazon EC2 实例，请使用 `tls` 和 `iam` 挂载选项，如下所示。

```
$ sudo mount -t efs -o tls,iam file-system-id efs-mount-point/
```

要使用 IAM 授权自动挂载到具有实例配置文件的 EC2 实例，请将以下行添加到 EC2 实例上的 `/etc/fstab` 文件中。

```
file-system-id:/ efs-mount-point efs _netdev,tls,iam 0 0
```

## 使用命名配置文件通过 IAM 进行挂载
<a name="mount-iam-creds-file"></a>

您可以使用证书文件或 AWS CLI 配置文件`~/.aws/credentials`中的 IAM 凭证通过 IAM 授权进行装载`~/.aws/config`。 AWS CLI 如果未指定 `"awsprofile"`，则使用“默认”配置文件。

要使用凭证文件通过 IAM 授权挂载到 Linux 实例，请使用 `tls`、`awsprofile` 和 `iam` 挂载选项，如下所示。

```
$ sudo mount -t efs -o tls,iam,awsprofile=namedprofile file-system-id efs-mount-point/
```

要使用凭证文件通过 IAM 授权自动挂载到 Linux 实例，请将以下行添加到 EC2 实例上的 `/etc/fstab` 文件中。

```
file-system-id:/ efs-mount-point efs _netdev,tls,iam,awsprofile=namedprofile 0 0
```

# 使用 EFS 接入点进行挂载
<a name="mounting-access-points"></a>

只有使用 EFS 挂载帮助程序，才能使用 EFS 接入点挂载 EFS 文件系统。

**注意**  
使用 EFS 接入点挂载文件系统时，必须为文件系统配置一个或多个挂载目标。

在使用访问点挂载文件系统时，除常规挂载选项外，挂载命令还包括 `access-point-id` 和 `tls` 挂载选项。下面显示了一个示例。

```
$ sudo mount -t efs -o tls,accesspoint=access-point-id file-system-id efs-mount-point
```

要使用访问点自动挂载文件系统，请将以下行添加到 EC2 实例上的 `/etc/fstab` 文件中。

```
file-system-id efs-mount-point efs _netdev,tls,accesspoint=access-point-id 0 0
```

有关 EFS 访问点的更多信息，请参阅[使用接入点工作](efs-access-points.md)。

# 将 EFS 挂载到多个 EC2 实例
<a name="mount-multiple-ec2-instances"></a>

使用 AWS Systems Manager Run Command，可以远程安全地将 EFS 文件系统挂载到多个 Amazon EC2 实例，而无需登录这些实例。有关 AWS Systems Manager Run Command 的更多信息，请参阅《*AWS Systems Manager 用户指南》*中的 [AWS Systems Manager Run Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html)。使用此方法挂载 EFS 文件系统之前，需要满足以下先决条件：

1. 已使用包含 `AmazonElasticFileSystemsUtils` 权限策略的实例配置文件启动 EC2 实例。有关更多信息，请参阅 [步骤 1：使用所需权限配置 IAM 实例配置文件](setting-up-aws-sys-mgr.md#configure-sys-mgr-iam-instance-profile)。

1. 在 EC2 实例上安装了 Amazon EFS 客户端（amazon-efs-utils 软件包）的 1.28.1 或更高版本。您可以使用 S AWS ystems Manager 在您的实例上自动安装软件包。有关更多信息，请参阅 [步骤 2：配置 State Manager 使用的关联](setting-up-aws-sys-mgr.md#config-sys-mgr-association)。

**使用控制台将多个 EFS 文件系统挂载到多个 EC2 实例**

1. 打开 AWS Systems Manager 控制台，网址为[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)。

1. 在导航窗格中，选择 **Run Command**。

1. 选择 **Run a command（运行一个命令）**。

1. 在**命令**搜索字段中输入 **AWS-RunShellScript**。

1. 选择 **AWS-RunShellScript**。

1. 在**命令参数**中，输入用于要挂载的每个 EFS 文件系统的装载命令。例如：

   ```
   sudo mount -t efs -o tls fs-12345678:/ /mnt/efs
   sudo mount -t efs -o tls,accesspoint=fsap-12345678 fs-01233210 /mnt/efs
   ```

   有关使用 Amazon EFS 客户端的 EFS 挂载命令的更多信息，请参阅[使用 EFS 挂载帮助程序在 EC2 Linux 实例上挂载](mounting-fs-mount-helper-ec2-linux.md)或[使用 EFS 挂载帮助程序在 EC2 Mac 实例上挂载](mounting-fs-mount-helper-ec2-mac.md)。

1. 选择要在其上运行命令的目标 AWS Systems Manager 托管 EC2 实例。

1. 根据需要进行任何其他设置。然后选择**运行**以运行此命令，并挂载命令中指定的 EFS 文件系统。

   运行命令后，可以在命令历史记录中查看其状态。

# 从其他 AWS 账户 或 VPC 挂载 EFS 文件系统
<a name="manage-fs-access-vpc-peering"></a>

可以使用 EFS 挂载帮助程序，通过 NFS 客户端和 EFS 接入点的 IAM 授权来挂载您的 EFS 文件系统。默认情况下，EFS 挂载帮助程序使用域名服务 (DNS) 来解析您的 EFS 挂载目标的 IP 地址。如果要从其他账户或 Virtual Private Cloud (VPC) 挂载文件系统，必须手动解析 EFS 挂载目标。

下面，您可以找到确定要用于您的 NFS 客户端的正确 EFS 挂载目标 IP 地址的说明。您还可以找到有关配置客户端以使用该 IP 地址挂载 EFS 文件系统的说明。

**Topics**
+ [从另一个挂载 EFS 文件系统 AWS 账户](mount-fs-diff-account-same-vpc.md)
+ [从另一个 VPC 挂载 EFS 文件系统](mount-fs-different-vpc.md)

# 从另一个挂载 EFS 文件系统 AWS 账户
<a name="mount-fs-diff-account-same-vpc"></a>

使用共享 VPCs，您可以 AWS 账户 从另一个 Amazon EC2 实例中挂载一个人拥有的 EFS 文件系统 AWS 账户。有关设置共享 VPC 的更多信息，请参阅《Amazon VPC 对等连接指南》**中的[与其它账户共享 VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html)。

设置 VPC 共享之后，EC2 实例可以使用域名系统 (DNS) 名称解析或者 EFS 挂载帮助程序来挂载 EFS 文件系统。我们建议使用 EFS 挂载帮助程序挂载 EFS 文件系统。

# 从另一个 VPC 挂载 EFS 文件系统
<a name="mount-fs-different-vpc"></a>

当您使用 VPC 对等连接或传输网关连接 VPC 时，一个 VPC 中的 Amazon EC2 实例可以访问另一个 VPC 中的 EFS 文件系统，即使 VPCs 它们属于不同的账户。

您不能对其他 VPC 中的 EFS 挂载点使用 DNS 名称解析。要挂载您的 EFS 文件系统，请使用对应可用区中挂载点的 IP 地址。

或者，您可以使用 Amazon Route 53 作为您的 DNS 服务。在 Route 53 中，您可以通过创建私有托管区和资源记录集来解析其他 VPC 中的 EFS 挂载目标 IP 地址。有关如何执行此操作的更多信息，请参阅《Amazon Route 53 开发人员指南》**中的[私有托管区的使用](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html)。

## 先决条件
<a name="mount-fs-different-vpc-prerequisites"></a>

在使用下面的过程之前，请执行以下步骤：
+ 在要挂载 EFS 文件系统的计算实例上安装 Amazon EFS 客户端，这是实用程序 `amazon-efs-utils` 集的一部分。可以使用 `amazon-efs-utils` 中包含的 EFS 挂载帮助程序来挂载文件系统。有关安装 `amazon-efs-utils` 的说明，请参阅[安装 Amazon EFS 客户端](using-amazon-efs-utils.md)。
+ 允许在 IAM 策略中对附加到实例的 IAM 角色执行 `ec2:DescribeAvailabilityZones` 操作。我们建议您将 AWS 托管策略附加`AmazonElasticFileSystemsUtils`到 IAM 实体，以便为该实体提供必要的权限。
+ 从另一个文件系统挂载时 AWS 账户，请更新文件系统资源策略以允许对其他主体 ARN `elasticfilesystem:DescribeMountTarget` 执行操作。 AWS 账户例如：

  ```
  {
      "Id": "access-point-example03",
      "Statement": [
          {
              "Sid": "access-point-statement-example03",
              "Effect": "Allow",
              "Principal": {"AWS": "arn:aws:iam::555555555555:root"},
              "Action": "elasticfilesystem:DescribeMountTargets",
              "Resource": "arn:aws:elasticfilesystem:us-east-2:111122223333:file-system/fs-12345678"
          }
      ]
  }
  ```

  有关 EFS 文件系统资源策略的更多信息，请参阅[Amazon EFS 基于资源的策略](security_iam_service-with-iam.md#security_iam_service-with-iam-resource-based-policies)。
+ 安装 botocore。在另一个 VPC 中挂载文件系统时，如果无法解析文件系统 DNS 名称，则 EFS 客户端会使用 botocore 检索挂载目标 IP 地址。有关更多信息，请参阅 `amazon-efs-utils` 自述文件中的[安装 botocore](https://github.com/aws/efs-utils#Install-botocore)。
+ 设置 VPC 对等连接或 VPC 传输网关。

  可以使用 VPC 对等连接或 VPC 传输网关连接，连接客户端的 VPC 和您的 EFS 文件系统的 VPC。当您使用 VPC 对等连接或传输网关连接 VPC 时，一个 VPC 中的 Amazon EC2 实例可以访问另一个 VPC 中的 EFS 文件系统，即使 VPCs 它们属于不同的账户。

  *传输网关*是一个网络中转枢纽，可用于将您的网络 VPCs 和本地网络互连。有关使用 VPC 中转网关的信息，请参阅《Amazon VPC 中转网关指南》**中的[中转网关入门](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-getting-started.html)。

  *VPC 对等连接*是两 VPCs者之间的网络连接。这种类型的连接使您能够使用私有 Internet 协议版本 4 (IPv4) 或 Internet 协议版本 6 (IPv6) 地址在它们之间路由流量。您可以使用 VPC 对等互连 VPCs 在同一个 AWS 区域 或两者之间 AWS 区域进行连接。有关 VPC 对等的更多信息，请参阅《Amazon VPC 对等指南》**中的[什么是 VPC 对等？](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)。

为了确保您的文件系统的高可用性，我们建议您始终使用与 NFS 客户端位于相同可用区的 EFS 挂载目标 IP 地址。如果要挂载其它账户中的 EFS 文件系统，请确保 NFS 客户端和 EFS 挂载目标位于相同的可用区 ID 中。此要求适用，因为可用区名称在账户之间可能会有所不同。

**使用 IAM 或访问点在其他 VPC 中挂载 EFS 文件系统**

1. 连接到您的 EC2 实例。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[连接到您的 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html)。

1. 使用以下命令创建用于挂载文件系统的目录。

   ```
   $ sudo mkdir /mnt/efs
   ```

1. 要使用 IAM 授权来挂载文件系统，请使用以下命令：

   ```
   $ sudo mount -t efs -o tls,iam file-system-dns-name /mnt/efs/
   ```

   有关将 IAM 授权与 EFS 结合使用的更多信息，请参阅 [使用 IAM 控制文件系统访问](iam-access-control-nfs-efs.md)。

   要使用 EFS 访问点挂载文件系统，请使用以下命令：

   ```
   $ sudo mount -t efs -o tls,accesspoint=access-point-id file-system-dns-name /mnt/efs/
   ```

   有关 EFS 访问点的更多信息，请参阅[使用接入点工作](efs-access-points.md)。

## 从其他服务器装载 EFS 文件系统 AWS 区域
<a name="mount-different-region-vpc"></a>

如果您要从与文件系统不同的 AWS 区域 其他 VPC 挂载 EFS 文件系统，则需要编辑该`efs-utils.conf`文件。在 `/dist/efs-utils.conf` 中找到以下行：

```
#region = us-east-1
```

取消该行的注释，如果文件系统不在 `us-east-1`，则替换文件系统所在区域的 ID 值。

# 使用网络文件系统挂载 EFS 文件系统
<a name="mounting-fs-old"></a>

在下文中了解如何安装网络文件系统（NFS）客户端，以及如何在 Amazon EC2 实例上挂载 Amazon EFS 文件系统。还可以找到用于在 `mount` 命令中指定文件系统的域名系统 (DNS) 名称的 `mount` 命令和可用选项的说明。此外，您还可以了解如何使用 `fstab` 文件在任何系统重新启动后自动重新挂载您的文件系统。

**注意**  
在本节中，您可以学习如何在没有 amazon-efs-utils软件包的情况下挂载 Amazon EFS 文件系统。要使用文件系统加密传输中的数据，您必须使用传输层安全性 (TLS) 挂载文件系统。为此，我们建议使用该 amazon-efs-utils软件包。有关更多信息，请参阅 [安装 Amazon EFS 客户端](using-amazon-efs-utils.md)。

**Topics**
+ [先决条件](#reqs-mount-nfs)
+ [NFS 支持](#mounting-fs-nfs-info)
+ [安装 NFS 客户端](mounting-fs-install-nfsclient.md)
+ [推荐的 NFS 挂载设置](mounting-fs-nfs-mount-settings.md)
+ [使用 DNS 名称在 Amazon EC2 上挂载](mounting-fs-mount-cmd-dns-name.md)
+ [使用 IP 地址挂载](mounting-fs-mount-cmd-ip-addr.md)

## 先决条件
<a name="reqs-mount-nfs"></a>

在可以挂载文件系统之前，请确保满足以下要求：
+ 创建、配置和启动相关 AWS 资源。有关说明，请参阅[开始使用 Amazon EFS](getting-started.md)。
+ 为您的 Amazon EC2 实例创建 VPC 安全组，并挂载具有所需入站和出站访问权限的目标。有关更多信息，请参阅 [使用 VPC 安全组](network-access.md)。

## NFS 支持
<a name="mounting-fs-nfs-info"></a>

在 Amazon EC2 实例上挂载文件系统时，Amazon EFS 支持网络文件系统版本 4.0 和 4.1（NFSv4）协议。虽然支持 NFSv4.0，但我们建议您使用 NFSv4.1。在 Amazon EC2 实例上挂载 Amazon EFS 文件系统时，还需要使用支持所选的 NFSv4 协议的 NFS 客户端。运行 macOS Big Sur 的 Amazon EC2 Mac 实例仅支持 NFS v4.0。

Amazon EFS 不支持 `nconnect` 挂载选项。

**注意**  
对于 Linux 内核版本 5.4.\$1，Linux NFS 客户端使用 128 KB 的默认 `read_ahead_kb` 值。我们建议将此值增加到 15 MB。有关更多信息，请参阅 [优化 NFS read\$1ahead\$1kb 的大小](performance-tips.md#efs-perf-optimize-nfs-read-ahead)。

为获得最佳性能以及避免出现各种已知的 NFS 客户端错误，我们建议您使用最新的 Linux 内核。如果使用的是企业 Linux 发行版，我们建议您使用以下版本：
+ Amazon Linux 2
+ Amazon Linux 2017.09 或更高版本
+ 红帽企业 Linux（以及诸如 CentOS 之类的衍生产品）版本 8 及更高版本
+ Ubuntu 16.04 LTS 和更新版本
+ SLES 12 Sp2 或更高版本

如果使用其他发行版或自定义内核，我们建议您使用内核 4.3 或更高版本。要解决从 EC2 实例使用 Amazon EFS 时与某些 AMI 或内核版本相关的问题，请参阅[排查 AMI 和内核问题](troubleshooting-efs-ami-kernel.md)。

**注意**  
不支持使用运行 Microsoft Windows 的 Amazon EC2 实例挂载 EFS 文件系统。

# 安装 NFS 客户端
<a name="mounting-fs-install-nfsclient"></a>

要在 Amazon EC2 实例上挂载 EFS 文件系统，首先需要安装 NFS 客户端。要连接到 EC2 实例并安装 NFS 客户端，您需要 EC2 实例的公有 DNS 名称和用户名称进行登录。实例的用户名通常为 `ec2-user`。

**连接 EC2 实例和安装 NFS 客户端**

1. 连接到 EC2 实例。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[连接到您的 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html)。

   密钥文件不能对 SSH 公开可见。您可以使用 **chmod 400 *filename*.pem** 命令设置这些权限。有关更多信息，请参阅[为您的 Amazon EC2 实例创建密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-key-pairs.html)。

1. (可选) 获取更新并重启。

   ```
   $ sudo yum -y update 
               $  sudo reboot
   ```

1. 重启后，重新连接到您的 EC2 实例。

1. 安装 NFS 客户端。

   如果您使用的是 Amazon Linux AMI 或 Red Hat Linux AMI，请使用以下命令安装 NFS 客户端。

   ```
   $ sudo yum -y install nfs-utils
   ```

   如果您使用的是 Ubuntu Amazon EC2 AMI，请使用以下命令安装 NFS 客户端。

   ```
   $ sudo apt-get -y install nfs-common
   ```

1. 使用以下命令启动 NFS 服务：

   ```
   $ sudo service nfs-server start
   ```

1. 验证 NFS 服务已启动，如下所示。

   ```
   $ sudo service nfs-server status
   Redirecting to /bin/systemctl status nfs.service
   ● nfs-server.service - NFS server and services
      Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
      Active: active (exited) since Wed 2019-10-30 16:13:44 UTC; 5s ago
     Process: 29446 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
     Process: 29441 ExecStartPre=/bin/sh -c /bin/kill -HUP `cat /run/gssproxy.pid` (code=exited, status=0/SUCCESS)
     Process: 29439 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
    Main PID: 29446 (code=exited, status=0/SUCCESS)
      CGroup: /system.slice/nfs-server.service
   ```

如果您使用自定义内核（即构建自定义 AMI），则至少需要包含 NFSv4 .1 客户端内核模块和正确的 NFS4 用户空间挂载帮助程序。

**注意**  
如果在启动 Amazon EC2 实例时选择 **Amazon Linux AMI 2016.03.0** 或 **Amazon Linux AMI 2016.09.0**，您不需要安装 `nfs-utils`，因为它已默认包含在 AMI 中。

**下一步：挂载您的文件系统**  
使用以下过程之一挂载您的文件系统。
+ [使用 DNS 名称在 Amazon EC2 上挂载](mounting-fs-mount-cmd-dns-name.md)
+ [使用 IP 地址挂载](mounting-fs-mount-cmd-ip-addr.md)
+ [自动挂载 EFS 文件系统使用 NFS 在 EC2 Linux 或 Mac 实例上启用自动挂载](nfs-automount-efs.md)

# 推荐的 NFS 挂载设置
<a name="mounting-fs-nfs-mount-settings"></a>

我们建议在 Linux 上使用以下挂载选项值：
+ `noresvport` – 告知 NFS 客户端在重新建立网络连接时，使用新的非特权传输控制协议（TCP）源端口。旧版 Linux 内核（版本 v5.4 及更低版本）中包含的 NFS 客户端软件包含一种行为，该行为会导致 NFS 客户端在断开连接时尝试在同一 TCP 源端口上重新连接。此行为不符合 TCP RFC 要求，并且可能会阻止这些客户端快速重新建立与 EFS 文件系统的连接。

  使用 `noresvport` 选项有助于确保 NFS 客户端以透明的方式重新连接到您的 EFS 文件系统，从而在网络恢复事件后重新连接时保持不间断的可用性。
**重要**  
我们强烈建议您使用 `noresvport` 挂载选项来帮助确保 EFS 文件系统在重新连接或网络恢复事件后保持不间断的可用性。  
考虑使用 [EFS 挂载帮助程序](mounting-fs.md)挂载您的文件系统。EFS 挂载帮助程序使用针对 Amazon EFS 文件系统优化了的 NFS 挂载选项。
+ `rsize=1048576` – 设置 NFS 客户端对每个网络 READ 请求可以接收的最大数据字节数。在从 EFS 文件系统上的文件读取数据时应用此值。我们建议您尽可能使用最大的大小（最多 `1048576`），以避免性能下降。
+ `wsize=1048576` – 设置 NFS 客户端对每个网络 WRITE 请求可以发送的最大数据字节数。在将数据写入到 EFS 文件系统上的文件时应用此值。我们建议您尽可能使用最大的大小（最多 `1048576`），以避免性能下降。
+ `hard` – 设置 NFS 客户端在 NFS 请求超时之后的恢复行为，以便 NFS 请求在服务器回复之前无限次重试。建议您使用硬挂载选项 (`hard`) 以确保数据完整性。如果您使用 `soft` 挂载，请将 `timeo` 参数至少设置为 `150` 分秒（15 秒）。这样做可尽量减少源自软挂载的数据损坏风险。
+ `timeo=600` – 将超时值设置为 600 分秒（60 秒），这是 NFS 客户端在重试 NFS 请求之前等待响应的时间。如果您必须更改超时参数 (`timeo`)，我们建议您使用至少为 `150` 的值，这相当于 15 秒。这样做有助于避免性能下降。
+ `retrans=2` – 将 NFS 客户端重试请求的次数设置为 2，超过此次数之后将尝试进一步的恢复操作。
+ `_netdev` – `/etc/fstab` 中存在此选项时，将阻止客户端尝试挂载 EFS 文件系统，直到启用了网络。
+ `nofail` – 如果需要启动您的 EC2 实例而不考虑挂载的 EFS 文件系统状态，请将 `nofail` 选项添加到 `/etc/fstab` 文件的文件系统条目中。

如果您不使用前面的默认值，请注意以下事项：
+ 一般而言，避免设置任何其他不同于默认值的挂载选项，这会导致性能降低和其他问题。例如，更改读或写缓冲区大小或禁用属性缓存会导致性能下降。
+ Amazon EFS 会忽略源端口。如果您更改 Amazon EFS 源端口，则不会有任何影响。
+ Amazon EFS 不支持 `nconnect` 挂载选项。
+ Amazon EFS 不支持任何 Kerberos 安全变体。例如，下面的挂载命令将失败。

  ```
   $ mount -t nfs4 -o krb5p <DNS_NAME>:/ /efs/ 
  ```
+ 我们建议您使用其 DNS 名称挂载文件系统。此名称解析为与您 Amazon EC2 实例位于相同可用区中的 Amazon EFS 挂载目标的 IP 地址。如果您在与 Amazon EC2 实例不同的可用区中使用挂载目标，则会对跨可用区发送的数据收取标准 EC2 费用。可能还会面临更高的文件系统操作延迟。
+ 有关更多挂载选项和默认设置的详细说明，请参阅 Linux 文档。

# 使用 DNS 名称在 Amazon EC2 上挂载
<a name="mounting-fs-mount-cmd-dns-name"></a>

**注意**  
在挂载文件系统之前，您需要向挂载目标安全组添加一条规则，支持通过端口 2049 从 EC2 安全组进行入站 NFS 访问。有关更多信息，请参阅 [使用 VPC 安全组](network-access.md)。
+ **文件系统 DNS 名称** – 使用文件系统的 DNS 名称是最简单的挂载方法。文件系统 DNS 名称自动解析为连接的 Amazon EC2 实例的可用区中的挂载目标 IP 地址。您可以从控制台中获取该 DNS 名称，或者，如果您具有文件系统 ID，可以使用以下约定构造该名称。

  ```
  file-system-id.efs.aws-region.amazonaws.com
  ```
**注意**  
 文件系统 DNS 名称的 DNS 解析要求 Amazon EFS 文件系统在与客户端实例相同的可用区中具有挂载目标。
  + 通过使用文件系统 DNS 名称，您可以使用以下命令在 Amazon EC2 Linux 实例上挂载文件系统。

    ```
    sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport file-system-id.efs.aws-region.amazonaws.com:/ /efs-mount-point
    ```
  + 通过文件系统 DNS 名称，您可以使用以下命令在运行支持的 macOS 版本（Big Sur、Monterey、Ventura）的 Amazon EC2 Mac 实例上挂载文件系统。

    ```
    sudo mount -t nfs -o nfsvers=4.0,rsize=65536,wsize=65536,hard,timeo=600,retrans=2,noresvport,mountport=2049 file-system-id.efs.aws-region.amazonaws.com:/ /efs
    ```
**重要**  
在运行支持的 macOS 版本的 EC2 Mac 实例上挂载时，必须使用 `mountport=2049` 才能成功连接到 EFS 文件系统。
+ **挂载目标 DNS 名称** – 2016 年 12 月，我们引入了文件系统 DNS 名称。我们继续为每个可用区挂载目标提供 DNS 名称以保持向后兼容。挂载目标 DNS 名称的通用形式如下所示。

  ```
  availability-zone.file-system-id.efs.aws-region.amazonaws.com
  ```
**注意**  
支持跨可用区的挂载目标 DNS 名称解析。

  在某些情况下，您可能会删除挂载目标，然后在同一可用区中创建新的挂载目标。在这种情况下，该可用区中的新挂载目标的 DNS 名称与旧挂载目标的 DNS 名称相同。

可以在**附加**对话框中查看和复制用于挂载文件系统的确切命令。

**查看文件系统的挂载命令**

1. 在 Amazon EFS 控制台中，选择要挂载的文件系统以显示其详细信息页面。

1. 要显示用于此文件系统的挂载命令，请选择右上角的**附加**。

   **附加**屏幕显示用于挂载文件系统的确切命令。

1. 默认的**通过 DNS 挂载**视图显示在使用 EFS 挂载帮助程序或 NFS 客户端挂载时使用文件系统的 DNS 名称挂载文件系统的命令。

有关支持 Amazon EF AWS 区域 S 的列表，请参阅中的 Amazon E [lastic File Syst](https://docs.aws.amazon.com/general/latest/gr/rande.html#elasticfilesystem-region) em AWS 一般参考。

要能够在 `mount` 命令中使用 DNS 名称，必须满足以下条件：
+ 连接的 EC2 实例必须在 VPC 内，并且必须配置为使用 Amazon 提供的 DNS 服务器。有关 Amazon DNS 服务器的信息，请参阅《Amazon VPC 用户指南》**中的 [Amazon VPC 中的 DHCP 选项集](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)。
+ 连接的 EC2 实例的 VPC 必须启用 **DNS Resolution (DNS 解析)** 和 **DNS Hostnames (DNS 主机名)**。有关更多信息，请参阅《Amazon VPC 用户指南》**中的 [VPC 的 DNS 属性](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-viewing)。
+ 连接的 EC2 实例必须位于与 EFS 文件系统相同的 VPC 内。有关从其他位置或不同的 VPC 访问和挂载文件系统的更多信息，请参阅[先决条件](mounting-fs-mount-helper-direct.md#efs-onpremises)和[教程：挂载来自其它 VPC 的文件系统](efs-different-vpc.md)。

**注意**  
在创建挂载目标后，我们建议您等待 90 秒，然后再挂载您的文件系统。这种等待可以让 DNS 记录在文件系统 AWS 区域 所在的位置完全传播。

# 使用 IP 地址挂载
<a name="mounting-fs-mount-cmd-ip-addr"></a>

作为使用 DNS 名称挂载 Amazon EFS 文件系统的替代方案，Amazon EC2 实例可使用挂载目标的 IP 地址来挂载文件系统。通过 IP 地址挂载适用于禁用 DNS 的环境，例如 VPCs 禁用 DNS 主机名的环境。

对于配置为默认使用 DNS 名称挂载文件系统的应用程序，您还可以将使用挂载目标 IP 地址挂载文件系统配置为回退选项。当连接到挂载目标 IP 地址时，EC2 实例应使用连接实例所在的同一可用区中的挂载目标 IP 地址进行挂载。

可以在**附加**对话框中查看和复制用于挂载文件系统的确切命令。

**注意**  
在挂载文件系统之前，您需要向挂载目标安全组添加一条规则，支持通过端口 2049 从 EC2 安全组进行入站 NFS 访问。有关更多信息，请参阅 [使用 VPC 安全组](network-access.md)。

**查看和复制使用挂载目标 IP 地址挂载 EFS 文件系统的确切命令**

1. 打开 Amazon Elastic File System 控制台，网址为[https://console.aws.amazon.com/efs/](https://console.aws.amazon.com/efs/)。

1. 在 Amazon EFS 控制台中，选择要挂载的文件系统以显示其详细信息页面。

1. 要显示用于此文件系统的挂载命令，请选择右上角的**附加**。

1. **附加**屏幕显示用于挂载文件系统的确切命令。

   选择**通过 IP 挂载**，以显示使用 NFS 客户端选定可用区中的挂载目标 IP 地址挂载文件系统的命令。
+ 在 `mount` 命令中使用挂载目标的 IP 地址，您可以使用以下 命令在 Amazon EC2 Linux 实例上挂载文件系统。

  ```
  sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport mount-target-IP:/   /efs 
  ```
+ 在 `mount` 命令中使用挂载目标的 IP 地址，您可以通过以下命令在运行 macOS Big Sur 的 Amazon EC2 Mac 实例上挂载文件系统。

  ```
  sudo mount -t nfs -o nfsvers=4.0,rsize=65536,wsize=65536,hard,timeo=600,retrans=2,noresvport,mountport=2049 mount-target-IP:/ /efs
  ```
**重要**  
在运行 macOS Big Sur 的 EC2 Mac 实例上挂载时，必须使用 `mountport=2049` 才能成功连接到 EFS 文件系统。

## 使用 IP 地址进行装载 AWS CloudFormation
<a name="mount-fs-ip-addr-cloudformation"></a>

您也可以使用 CloudFormation 模板中的 IP 地址挂载文件系统。有关更多信息，请参阅 **awsdocs/ elastic-beanstalk-samples** 存储库中的 [storage-efs-mountfilesystem-ip-addr.config，了解社区提供的配置](https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/community-provided/instance-configuration/storage-efs-mountfilesystem-ip-addr.config)文件。 GitHub

# 自动挂载 EFS 文件系统
<a name="mount-fs-auto-mount-onreboot"></a>

您可以使用 EFS 挂载帮助程序或 NFS 将 Amazon EC2 实例配置为在实例启动时自动挂载 EFS 文件系统。
+ 使用 EFS 挂载帮助程序：
  + 在使用 EC2 启动实例向导创建新 EC2 Linux 实例时附加 EFS 文件系统。
  + 使用 EFS 文件系统条目更新 EC2 的 `/etc/fstab` 文件。
+ 对于 EC2 Linux 和 Mac 实例，使用[没有 EFS 挂载帮助程序的 NFS](https://docs.aws.amazon.com/efs/latest/ug/nfs-automount-efs.html) 更新 EC2 `/etc/fstab` 文件。

**注意**  
EFS 挂载帮助程序不支持在运行 macOS Big Sur 或 Monterey 的 EC2 Mac 实例上自动挂载。但是，您可以使用 [NFS 在 EC2 Mac 实例上配置 /etc/fstab 文件](nfs-automount-efs.md)以自动挂载 EFS 文件系统。

**Topics**
+ [在新 EC2 Linux 实例上启用自动挂载](mount-fs-auto-mount-on-creation.md)
+ [在现有 EC2 Linux 实例上启用自动挂载](mount-fs-auto-mount-update-fstab.md)
+ [使用 NFS 在 EC2 Linux 或 Mac 实例上启用自动挂载](nfs-automount-efs.md)

# 在新 EC2 Linux 实例上启用自动挂载
<a name="mount-fs-auto-mount-on-creation"></a>

使用 Amazon EC2 启动实例向导创建新的 EC2 Linux 实例时，可以将该实例配置为自动挂载您的 Amazon EFS 文件系统。EC2 实例会在第一次启动时自动挂载文件系统，并且在重新启动时也会自动挂载文件系统。

此方法使用 EFS 挂载帮助程序挂载文件系统，以更新 EC2 实例上的 /etc/fstab 文件。挂载帮助程序是 [`amazon-efs-utils`](using-amazon-efs-utils.md) 工具集的一部分。

**注意**  
EFS 文件系统不支持在实例启动时在运行 macOS Big Sur 或 Monterey 的 EC2 Mac 实例上挂载。

**注意**  
不能将 Amazon EFS 与基于 Microsoft Windows 的 EC2 实例结合使用。

在启动并连接到 EC2 实例之前，需要创建一个密钥对。有关创建密钥对的更多信息，请参阅《Amazon EC2 用户指南》**中的 [Amazon EC2 密钥对和 Amazon EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。

**将 EC2 实例配置为在启动时自动挂载 EFS 文件系统**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 选择**启动实例**。

1. 在**步骤 1：选择一个 Amazon 系统映像（AMI）**中，在列表顶部找到一个 Amazon Linux AMI，然后选择**选择**。

1. 在**步骤 2：选择一个实例类型**中，选择**下一步：配置实例详细信息**。

1. 在 **Step 3: Configure Instance Details (步骤 3：配置实例详细信息)** 中，请提供以下信息：
   + 对于 **Network (网络)**，为您装载的 EFS 文件系统所在的同一 VPC 选择条目。
   + 对于 **Subnet (子网)**，在任何可用区中选择一个默认子网。
   + 对于 **File system (文件系统)**，选择要装载的 EFS 文件系统。文件系统 ID 旁边显示的路径是 EC2 实例将使用的装载点，您可以更改此装载点。
   + 在 **Advanced Details (高级详细信息)** 下，将自动生成 **User data (用户数据)**，并包括挂载您在 **File systems (文件系统)** 下指定的 EFS 文件系统所需的命令。

1. 选择**下一步：添加存储**。

1. 选择 **Next: Add Tags**。

1. 命名您的实例，然后选择**下一步：配置安全组**。

1. 在 **Step 6: Configure Security Group (步骤 6：配置安全组)** 中，将 **Assign a security group (分配安全组)** 设置为 **Select an existing security group (选择现有安全组)**。选择默认安全组以确保它能够访问您的 EFS 文件系统。

   您不能使用该安全组通过安全外壳 (SSH) 访问您的 EC2 实例。对于通过 SSH 进行访问，您稍后可以编辑默认安全性并添加一个允许 SSH 的规则/新安全组。您可以使用以下设置：
   + **类型：**SSH
   + **协议**：TCP
   + **端口范围：**22
   + **源：**任何位置 0.0.0.0/0

1. 选择**审核并启动**。

1. 选择**启动**。

1. 选中您创建的密钥对的复选框，然后选择**启动实例**。

您的 EC2 实例现已配置为在启动或重新启动时装载 EFS 文件系统。

# 在现有 EC2 Linux 实例上启用自动挂载
<a name="mount-fs-auto-mount-update-fstab"></a>

`/etc/fstab` 文件包含有关文件系统的信息。命令 `mount -a` 在实例启动期间运行，用于挂载 `/etc/fstab` 中列出的所有文件系统。在此过程中，您将在 Amazon EC2 Linux 实例上手动更新 `/etc/fstab`，以便该实例在实例重启时使用 EFS 挂载帮助程序自动重新挂载 EFS 文件系统。

**注意**  
EFS 文件系统不支持在运行 macOS Big Sur 或 Monterey 的 EC2 Mac 实例上使用 `/etc/fstab` 和 EFS 挂载帮助程序自动挂载。相反，可以[将 NFS 与 `/etc/fstab` 结合使用](nfs-automount-efs.md)，在运行 macOS Big Sur 和 Monterey 的 EC2 Mac 实例上自动挂载文件系统。

此方法使用 EFS 挂载帮助程序来挂载文件系统。挂载帮助程序是 `amazon-efs-utils` 工具集的一部分。

这些`amazon-efs-utils`工具可在亚马逊 Linux 和亚马逊 Linux 2 亚马逊机器映像 (AMIs) 上安装。有关 `amazon-efs-utils`的更多信息，请参阅[安装 Amazon EFS 客户端](using-amazon-efs-utils.md)。如果您正在使用其他 Linux 发行版，例如 Red Hat Enterprise Linux (RHEL)，请手动构建并安装 `amazon-efs-utils`。有关更多信息，请参阅 [在其他 Linux 发行版上安装 Amazon EFS 客户端](installing-amazon-efs-utils.md#installing-other-distro)。

## 先决条件
<a name="mount-helper-fstab-prereqs"></a>

在成功实施此过程之前，需要满足以下要求：
+ 已经创建了想要自动重新挂载的 EFS 文件系统。有关更多信息，请参阅 [使用控制台快速创建](creating-using-create-fs.md#gs-step-two-create-efs-resources)。
+ 已经创建了要配置为自动重新挂载 EFS 文件系统的 EC2 Linux 实例。
+ EFS 挂载帮助程序已安装在 EC2 Linux 实例上。有关更多信息，请参阅 [安装 Amazon EFS 客户端](using-amazon-efs-utils.md)。

## 更新 /etc/fstab 文件
<a name="update-fstab-file"></a>

执行以下步骤，更新 EC2 Linux 实例上的 /etc/fstab，以便该实例在实例重启时使用 EFS 挂载帮助程序自动重新挂载 EFS 文件系统。

**更新 EC2 实例上的 /etc/fstab 文件**

1. 连接到您的 EC2 实例。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[连接到您的 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html)。

1. 在编辑器中打开 `/etc/fstab` 文件。

1. 对于使用 IAM 授权或 EFS 接入点的自动挂载：
   + 要使用 IAM 授权自动挂载到具有实例配置文件的 EC2 实例，请将以下行添加到 `/etc/fstab` 文件中。

     ```
     file-system-id:/ efs-mount-point efs _netdev,noresvport,tls,iam 0 0
     ```
   + 要使用凭证文件通过 IAM 授权自动挂载到 Linux 实例，请将以下行添加到 `/etc/fstab` 文件中。

     ```
     file-system-id:/ efs-mount-point efs _netdev,noresvport,tls,iam,awsprofile=namedprofile 0 0
     ```
   + 要使用 EFS 访问点自动挂载文件系统，请将以下行添加到 `/etc/fstab` 文件中。

     ```
     file-system-id:/ efs-mount-point efs _netdev,noresvport,tls,accesspoint=access-point-id 0 0
     ```
**警告**  
请在自动挂载文件系统时使用 `_netdev` 选项，它用于指定网络文件系统。如果缺少 `_netdev`，您的 EC2 实例可能会停止响应。出现该结果是因为，需要在计算实例启动其网络后初始化网络文件系统。有关更多信息，请参阅 [自动挂载失败，并且实例没有响应](troubleshooting-efs-mounting.md#automount-fails)。

   有关更多信息，请参阅[使用 IAM 授权挂载](mounting-IAM-option.md)和[使用 EFS 接入点进行挂载](mounting-access-points.md)。

1. 保存对文件所做的更改。

**注意**  
在某些情况下，无论挂载的 EFS 文件系统的状态如何，都可能需要启动您的 EC2 实例。在这些情况下，将 `nofail` 选项添加到 `/etc/fstab` 文件中的文件系统条目中。

您添加到 `/etc/fstab` 文件的代码行将执行以下操作。


| 字段 | 说明 | 
| --- | --- | 
|  `file-system-id:/`  |  您的 EFS 文件系统的 ID。您可以从控制台获取此 ID，也可以通过编程方式从 CLI 或 AWS SDK 中获取此 ID。  | 
|  `efs-mount-point`  |  EFS 文件系统在 EC2 实例上的挂载点。  | 
|  `efs`  |  文件系统的类型。在使用挂载帮助程序时，该类型始终为 `efs`。  | 
|  `mount options`  |  文件系统的挂载选项。这是一个逗号分隔列表，包含以下选项： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/efs/latest/ug/mount-fs-auto-mount-update-fstab.html)  | 
|  `0`  |  非零值表示应由 `dump` 备份文件系统。对于 EFS，该值应为 `0`。  | 
|  `0`  |  `fsck` 在启动时检查文件系统的顺序。对于 EFS 文件系统，该值应为 `0`，表示 `fsck` 不应在启动时运行。  | 

# 使用 NFS 在 EC2 Linux 或 Mac 实例上启用自动挂载
<a name="nfs-automount-efs"></a>

对于 EC2 Linux 和 Mac 实例，使用没有 EFS 挂载帮助程序的 NFS 更新 Amazon EC2 `/etc/fstab` 文件。

**更新 EC2 实例上的 `/etc/fstab` 文件**

1. 连接到您的 EC2 实例。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[连接到您的 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html)。

1. 在编辑器中打开 `/etc/fstab` 文件。

1. 要使用 NFS 而不是 EFS 挂载帮助程序自动挂载文件系统，请在 `/etc/fstab` 文件中添加以下行。
   + *file\$1system\$1id*替换为要挂载的文件系统的 ID。
   + *aws-region*替换 AWS 区域 为文件系统所在的，例如`us-east-1`。
   + 将 *mount\$1point* 替换为文件系统的挂载点。

   ```
   file_system_id.efs.aws-region.amazonaws.com:/ mount_point nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0
   ```

您添加到 `/etc/fstab` 文件的代码行将执行以下操作。


| 字段 | 说明 | 
| --- | --- | 
|  `file-system-id:/`  |  您的 EFS 文件系统的 ID。您可以从控制台获取此 ID，也可以通过编程方式从 CLI 或 AWS SDK 中获取此 ID。  | 
|  `efs-mount-point`  |  EFS 文件系统在 EC2 实例上的挂载点。  | 
|  `nfs4`  |  指定文件系统类型。  | 
|  `mount options`  |  逗号分隔的文件系统的挂载选项列表： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/efs/latest/ug/nfs-automount-efs.html)  | 
|  `0`  |  指定 `dump` 值；`0` 告诉 `dump` 实用程序不备份文件系统。  | 
|  `0`  |  告诉 `fsck` 实用程序不在启动时运行。  | 

# 卸载文件系统
<a name="unmounting-fs"></a>

在删除文件系统之前，建议您从该文件系统连接到的每个 Amazon EC2 实例卸载文件系统。可以通过在 Amazon EC2 实例上运行 `umount` 命令来从该实例上卸载文件系统。您无法通过 AWS CLI、或通过任何 AWS 软件开发工具包卸载 EFS 文件系统。 AWS 管理控制台要卸载连接到运行 Linux 的 EC2 实例的 EFS 文件系统，请使用 `umount` 命令，如下所示：

```
umount /mnt/efs 
```

建议您不要指定任何其他 `umount` 选项。避免设置不同于默认值的任何其他 `umount` 选项。

可以通过运行 `df` 命令，验证 EFS 文件系统是否已卸载。此命令显示当前挂载在基于 Linux 的 Amazon EC2 实例上的文件系统的磁盘使用统计信息。如果在 `df` 命令输出中没有列出要卸载的 EFS 文件系统，这意味着已卸载该文件系统。

**Example - 标识 EFS 文件系统的挂载状态并卸载该文件系统**  

```
$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on 
/dev/sda1 ext4 8123812 1138920 6884644 15% / 
availability-zone.file-system-id.efs.aws-region.amazonaws.com :/ nfs4 9007199254740992 0 9007199254740992 0% /mnt/efs
```

```
$ umount /mnt/efs
```

```
$ df -T 
```

```
Filesystem Type 1K-blocks Used Available Use% Mounted on 
/dev/sda1 ext4 8123812 1138920 6884644 15% /
```

# 教程：创建 EFS 文件系统并将其挂载到 EC2 实例上 AWS CLI
<a name="wt1-getting-started"></a>

创建加密的 EFS 文件系统，将其挂载到 VPC 中的 EC2 实例上，然后使用 AWS CLI测试设置。

**注意**  
在[开始使用](getting-started.md)教程中，您使用控制台创建 Amazon EC2 和 EFS 资源。在本教程中，您将使用 AWS CLI 来做同样的事情，主要是为了熟悉 Amazon EFS API。

在本教程中，你将在自己的账户中创建以下 AWS 资源：
+ Amazon EC2 资源：
  + 两个安全组（一个用于 EC2 实例，一个用于 EFS 文件系统）。

    您可以将规则添加到这些安全组中，以授权适当的入站/出站访问。这样您 EC2instance 就可以使用标准的 NFSv4 .1 TCP 端口通过装载目标连接到文件系统。
  + 您的 VPC 中的 EC2 实例。
+ Amazon EFS 资源：
  + 文件系统。
  + 文件系统的挂载目标。

    为了将文件系统挂载到 EC2 实例上，需要在您的 VPC 中创建一个挂载目标。您可以在 VPC 中的每个可用区分别创建一个挂载目标。有关更多信息，请参阅 [Amazon EFS 的工作原理](how-it-works.md)。

然后，在 EC2 实例上测试文件系统。教程结束时的清理步骤提供了删除这些资源的信息。

本教程在美国西部（俄勒冈州）区域（`us-west-2`）创建所有这些资源。无论 AWS 区域 您使用哪种方式，请务必始终如一地使用它。您的所有资源（您的 VPC、EC2 资源和 EFS 资源）必须位于同一 AWS 区域中。

**Topics**
+ [先决条件](#wt1-prepare)
+ [设置 AWS CLI](#wt1-setup-awscli)
+ [步骤 1：创建 EC2 资源](#wt1-create-ec2-resources)
+ [步骤 2：创建 EFS 资源](#wt1-create-efs-resources)
+ [步骤 3：将文件系统挂载到 EC2 实例上并测试](#wt1-test)
+ [步骤 4：清除](#wt1-clean-up)

## 先决条件
<a name="wt1-prepare"></a>
+ 您可以使用您的根凭证 AWS 账户 登录控制台并尝试入门练习。但是， AWS Identity and Access Management (IAM) 建议您不要使用您的根证书 AWS 账户。而是在您的账户中创建一个管理员用户，并使用这些凭证来管理您的账户中的资源。有关更多信息，请参阅[用户*指南中的为 IAM Identity Cent AWS IAM Identity Center er 用户*分配 AWS 账户 访问权限](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-assign-account-access-user.html)。
+ 您可以使用默认 VPC，也可以使用在您的账户中创建的自定义 VPC。对于本演练，可以使用默认的 VPC 配置。但是，如果您使用自定义 VPC，请验证以下情况：
  + 已启用 DNS 主机名。有关更多信息，请参阅《Amazon VPC 用户指南》**中的 [VPC 中的 DNS 属性](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support)。
  + Internet 网关已连接到您的 VPC。有关更多信息，请参阅 *Amazon VPC 用户指南*中的[使用互联网网关连接到互联网](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)。
  + 已配置 VPC 子网来为 VPC 子网中启动的实例请求公有 IP 地址。有关更多信息，请参阅 *Amazon VPC 用户指南*中的[您的 VPCs 和子网的 IP 地址](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html)。
  + VPC 路由表包含一个规则，以将 Internet 范围的所有流量发送到 Internet 网关。
+ 您需要设置 AWS CLI 并添加管理员用户配置文件。

## 设置 AWS CLI
<a name="wt1-setup-awscli"></a>

按照以下说明设置 AWS CLI 和用户配置文件。

**要设置 AWS CLI**

1. 下载并配置 AWS CLI。有关说明，请参阅**《AWS Command Line Interface User Guide》中的 [Get started with the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)。

1. 设置配置文件。

   您将用户凭据存储在 AWS CLI `config`文件中。本教程中的示例 CLI 命令指定 adminuser 配置文件。在 `config` 文件中创建 adminuser 配置文件。也可以在 `config` 文件中将管理员用户配置文件设置为默认配置文件，如下所示。

   ```
   [profile adminuser]
   aws_access_key_id = admin user access key ID
   aws_secret_access_key = admin user secret access key
   region = us-west-2
   
   [default]
   aws_access_key_id = admin user access key ID
   aws_secret_access_key = admin user secret access key
   region = us-west-2
   ```

   前面的配置文件也设置了默认值 AWS 区域。如果没有在 CLI 命令中指定区域，则假定为 us-west-2 区域。

1. 在命令提示符处输入以下命令来验证设置。两个命令都没有显式提供凭证，所以将使用默认配置文件的凭证。
   + 尝试 help 命令

     您也可以通过添加 `--profile` 参数来显式指定用户配置文件。

     ```
     aws help
     ```

     ```
     aws help \
     --profile adminuser
     ```

## 步骤 1：创建 EC2 资源
<a name="wt1-create-ec2-resources"></a>

在此步骤中，您将执行以下操作：
+ 创建两个安全组。
+ 在安全组中添加规则以授权额外访问。
+ 启动一个 EC2 实例。在下一步中，您将创建一个 EFS 文件系统并将其挂载到该实例上。

### 步骤 1.1：创建两个安全组
<a name="wt1-create-sg"></a>

在本部分中，您将在 VPC 中为 EC2 实例和 EFS 挂载目标创建安全组。在教程的稍后部分，您要将这些安全组分配给 EC2 实例和 EFS 挂载目标。有关安全组的信息，请参阅 [Linux 实例的 Amazon EC2 安全组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html#vpc-security-groups)。

**创建安全组**

1. 使用 `create-security-group` CLI 命令创建两个安全组：

   1. 为您的 EC2 实例创建一个安全组 (`efs-walkthrough1-ec2-sg`) 并提供您的 VPC ID。

      ```
      $ aws ec2 create-security-group \
      --region us-west-2 \
      --group-name efs-walkthrough1-ec2-sg \
      --description "Amazon EFS walkthrough 1, SG for EC2 instance" \
      --vpc-id vpc-id-in-us-west-2 \
      --profile adminuser
      ```

      记下安全组 ID。以下为响应示例。

      ```
      {
          "GroupId": "sg-aexample"
      }
      ```

      您可以使用以下命令查找 VPC ID：

      ```
      $ aws  ec2 describe-vpcs    
      ```

      

   1. 为 EFS 挂载目标创建安全组（`efs-walkthrough1-mt-sg`）。您需要提供 VPC ID。

      ```
      $ aws ec2 create-security-group \
      --region us-west-2 \
      --group-name efs-walkthrough1-mt-sg \
      --description "Amazon EFS walkthrough 1, SG for mount target" \
      --vpc-id vpc-id-in-us-west-2 \
      --profile adminuser
      ```

      记下安全组 ID。以下为响应示例。

      ```
      {
          "GroupId": "sg-aexample"
      }
      ```

1. 验证安全组。

   ```
   aws ec2 describe-security-groups \
   --group-ids list of security group IDs separated by space \
   --profile adminuser \
   --region us-west-2
   ```

   两个安全组都应当只有一条允许所有出站流量的出站规则。

   在下一节中，您将授权额外访问，以便：
   + 您能够连接到 EC2 实例。
   + 启用 EC2 实例与 EFS 挂载目标之间的流量（在本教程的稍后部分，您要将这些安全组与它们关联）。

### 步骤 1.2：向安全组添加规则以授权 inbound/outbound 访问
<a name="wt1-update-sg"></a>

在该步骤中，您将在安全组中添加规则以授权入站/出站访问。

**添加规则**

1. 授权与 EC2 实例安全组 (`efs-walkthrough1-ec2-sg`) 的传入安全 Shell (SSH) 连接，以便可以从任何主机使用 SSH 连接到 EC2 实例。

   ```
   $ aws ec2 authorize-security-group-ingress \
   --group-id id of the security group created for EC2 instance \
   --protocol tcp \
   --port 22 \
   --cidr 0.0.0.0/0 \
   --profile adminuser \
   --region us-west-2
   ```

   验证安全组具有您添加的入站和出站规则。

   ```
   aws ec2 describe-security-groups \
   --region us-west-2 \
   --profile adminuser \
   --group-id security-group-id
   ```

1. 授权到 EFS 挂载目标安全组（`efs-walkthrough1-mt-sg`）的入站访问。

   在命令提示符处，使用管理员用户配置文件运行以下 AWS CLI `authorize-security-group-ingress`命令来添加入站规则。

   ```
   $ aws ec2 authorize-security-group-ingress \
   --group-id ID of the security group created for Amazon EFS mount target \
   --protocol tcp \
   --port 2049 \
   --source-group ID of the security group created for EC2 instance \
   --profile adminuser \
   --region us-west-2
   ```

1. 确认两个安全组现在都授权了入站访问。

   ```
   aws ec2 describe-security-groups \
   --group-names efs-walkthrough1-ec2-sg   efs-walkthrough1-mt-sg \
   --profile adminuser \
   --region us-west-2
   ```

### 步骤 1.3：启动 EC2 实例
<a name="wt1-create-ec2-instance"></a>

在该步骤中，您将启动 EC2 实例。

**启动 EC2 实例**

1. 收集在启动 EC2 实例时需要提供的以下信息：
   + 密钥对名称。有关创建密钥对的说明，请参阅《Amazon EC2 用户指南》中的[为您的 Amazon EC2 实例创建密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-key-pairs.html)**。
   + 要启动的 Amazon 系统映像 (AMI) 的 ID。

     用于启动 EC2 实例的 AWS CLI 命令需要将要部署的 Amazon 系统映像 (AMI) 的 ID 作为参数。本练习使用 Amazon Linux HVM AMI。
**注意**  
您可以使用大多数基于 Linux 的通用型 AMIs。如果您使用其他 Linux AMI，请确保使用分发包管理器在实例上安装 NFS 客户端。此外，您可能还需要添加一些软件包。

     对于亚马逊 Linux HVM AMI，你可以在[亚马逊 Linux AMI IDs ](https://aws.amazon.com/amazon-linux-ami/) 上找到最新版本。您可以按如下方式从亚马逊 Linux AMI IDs 表中选择 ID 值：
     + 选择**美国西部（俄勒冈）**区域。本演练假定您将在美国西部（俄勒冈州）区域（us-west-2）创建所有资源。
     + 选择 **EBS 支持的 HVM 64 位**类型（因为您在 CLI 命令中指定 `t2.micro` 实例类型，它不支持实例存储）。

     
   + 您为 EC2 实例创建的安全组的 ID。
   + AWS 区域。本演练使用 us-west-2 区域。
   + 您要在其中启动实例的 VPC 子网的 ID。可以使用 `describe-subnets` 命令获取子网列表。

     ```
     $ aws ec2 describe-subnets \
     --region us-west-2 \
     --filters "Name=vpc-id,Values=vpc-id" \
     --profile adminuser
     ```

     选择子网 ID 后，记下 `describe-subnets` 结果中的以下值：
     + **子网 ID** – 创建挂载目标时需要此值。在本练习中，您将在启动了 EC2 实例的同一子网中创建挂载目标。
     + **子网的可用区** – 构建挂载目标 DNS 名称时需要此值，用于将文件系统挂载到 EC2 实例上。

1. 运行以下 AWS CLI `run-instances`命令启动 EC2 实例。

   ```
   $ aws ec2 run-instances \
   --image-id AMI ID \
   --count 1 \
   --instance-type t2.micro \
   --associate-public-ip-address \
   --key-name key-pair-name \
   --security-group-ids ID of the security group created for EC2 instance \
   --subnet-id VPC subnet ID \
   --region us-west-2 \
   --profile adminuser
   ```

1. 记下 `run-instances` 命令返回的实例 ID。

1. 您创建的 EC2 实例必须有公有 DNS 名称，以便用来连接 EC2 实例并向其中挂载文件系统。公有 DNS 名称的形式为：

   ```
   ec2-xx-xx-xx-xxx.compute-1.amazonaws.com
   ```

   运行以下 CLI 命令，并记下公有 DNS 名称。

   ```
   aws ec2 describe-instances \
   --instance-ids EC2 instance ID \
   --region us-west-2 \ 
   --profile adminuser
   ```

   如果未找到公有 DNS 名称，则检查您在其中启动了 EC2 实例的 VPC 的配置。有关更多信息，请参阅 [先决条件](#wt1-prepare)。

1. （可选）将一个名称分配给您创建的 EC2 实例。为此，请添加一个标签，其中键名和值设置为要分配给实例的名称。您可以通过运行以下 AWS CLI `create-tags`命令来完成此操作。

   ```
   $  aws ec2 create-tags \
   --resources  EC2-instance-ID \
   --tags Key=Name,Value=Provide-instance-name  \
   --region us-west-2 \
   --profile adminuser
   ```

## 步骤 2：创建 EFS 资源
<a name="wt1-create-efs-resources"></a>

在此步骤中，您将执行以下操作：
+ 创建加密 EFS 文件系统。
+ 启用生命周期管理
+ 在启动了 EFS 实例的可用区创建挂载目标。

### 步骤 2.1：创建 EFS 文件系统
<a name="wt1-create-file-system"></a>

在该步骤中，您将创建一个 EFS 文件系统。记下 `FileSystemId`，以便稍后在下一步中为文件系统创建挂载目标时使用。

**创建文件系统**
+ 创建文件系统并添加可选的 `Name` 标签。

  1. 在命令提示符处，运行以下 AWS CLI `create-file-system` 命令。

     ```
     $  aws efs create-file-system \
     --encrypted \
     --creation-token FileSystemForWalkthrough1 \
     --tags Key=Name,Value=SomeExampleNameValue \
     --region us-west-2 \
     --profile adminuser
     ```

     您将收到以下响应。

     ```
     {
         "OwnerId": "111122223333",
         "CreationToken": "FileSystemForWalkthrough1",
         "FileSystemId": "fs-c657c8bf",
         "CreationTime": 1548950706.0,
         "LifeCycleState": "creating",
         "NumberOfMountTargets": 0,
         "SizeInBytes": {
             "Value": 0,
             "ValueInIA": 0,
             "ValueInStandard": 0
         },
         "PerformanceMode": "generalPurpose",
         "Encrypted": true,
         "KmsKeyId": "arn:aws:kms:us-west-2:111122223333:a5c11222-7a99-43c8-9dcc-abcdef123456",
         "ThroughputMode": "bursting",
         "Tags": [
             {
                 "Key": "Name",
                 "Value": "SomeExampleNameValue"
             }
         ]
     }
     ```

  1. 记下 `FileSystemId` 的值。在[步骤 2.3：创建挂载目标](#wt1-create-mount-target)中为该文件系统创建挂载目标时需要该值。

### 步骤 2.2：启用生命周期管理
<a name="wt1-lifecycle-management"></a>

在该步骤中，您将在文件系统上启用生命周期管理，以便使用 EFS 不频繁访问（IA）存储类。要了解更多信息，请参阅 [管理存储生命周期](lifecycle-management-efs.md) 和 [EFS 存储类](features.md#storage-classes)。

**启用生命周期管理**
+ 在命令提示符处，运行以下 AWS CLI `put-lifecycle-configuration`命令。

  ```
  $  aws efs put-lifecycle-configuration \
  --file-system-id fs-c657c8bf \
  --lifecycle-policies TransitionToIA=AFTER_30_DAYS \
  --region us-west-2 \
  --profile adminuser
  ```

  您将收到以下响应。

  ```
  {
    "LifecyclePolicies": [
      {
          "TransitionToIA": "AFTER_30_DAYS"
      }
    ]
  }
  ```

### 步骤 2.3：创建挂载目标
<a name="wt1-create-mount-target"></a>

在该步骤中，您将在启动了 EC2 实例的可用区中为文件系统创建一个挂载目标。

1. 确保您已获得以下信息：
   + 您为其创建挂载目标的文件系统 (例如 `fs-example`) 的 ID。
   + 您在[步骤 1：创建 EC2 资源](#wt1-create-ec2-resources)中启动了 EC2 实例的 VPC 子网 ID。

     在本教程中，您在启动了 EC2 实例的同一子网中创建挂载目标，因此您需要子网 ID（例如，`subnet-example`）。
   + 在上一步中您为挂载目标创建的安全组的 ID。

1. 在命令提示符处，运行以下 AWS CLI `create-mount-target`命令。

   ```
   $ aws efs create-mount-target \
   --file-system-id file-system-id \
   --subnet-id  subnet-id \
   --security-group ID-of-the security-group-created-for-mount-target \
   --region us-west-2 \
   --profile adminuser
   ```

   您将收到以下响应。

   ```
   {
       "MountTargetId": "fsmt-example",
       "NetworkInterfaceId": "eni-example",
       "FileSystemId": "fs-example",
       "PerformanceMode" : "generalPurpose",
       "LifeCycleState": "available",
       "SubnetId": "fs-subnet-example",
       "OwnerId": "account-id",
       "IpAddress": "xxx.xx.xx.xxx"
   }
   ```

1. 您还可以使用 `describe-mount-targets` 命令来获取为文件系统创建的挂载目标的描述。

   ```
   $ aws efs describe-mount-targets \
   --file-system-id file-system-id \
   --region us-west-2 \
   --profile adminuser
   ```

## 步骤 3：将文件系统挂载到 EC2 实例上并测试
<a name="wt1-test"></a>

在此步骤中，您将执行以下操作：
+ 收集所需信息。
+ 在 EC2 实例上安装 NFS 客户端。
+ 在 EC2 实例上挂载文件系统并测试。

**Topics**
+ [步骤 3.1：收集信息](#wt1-connect-test-gather-info)
+ [步骤 3.2：在 EC2 实例上安装 NFS 客户端](#wt1-connect-install-nfs-client)
+ [步骤 3.3：将文件系统挂载到 EC2 实例上并测试](#wt1-mount-fs-and-test)

### 步骤 3.1：收集信息
<a name="wt1-connect-test-gather-info"></a>

在执行本节的步骤时，确保您获取以下信息：
+ EC2 实例的公有 DNS 名称，格式如下：

  ```
  ec2-xx-xxx-xxx-xx.aws-region.compute.amazonaws.com 
  ```
+ 文件系统的 DNS 名称。您可以使用以下通用形式构建此 DNS 名称：

  ```
  file-system-id.efs.aws-region.amazonaws.com
  ```

  您使用挂载目标在其中挂载文件系统的 EC2 实例可以将文件系统的 DNS 名称解析为挂载目标的 IP 地址。

**注意**  
Amazon EFS 不要求您的 EC2 实例具有公有 IP 地址或公有 DNS 名称。前面列出的要求仅针对本演练示例，目的是确保您可以使用 SSH 从 VPC 外部连接到实例。

### 步骤 3.2：在 EC2 实例上安装 NFS 客户端
<a name="wt1-connect-install-nfs-client"></a>

您可以从运行 Windows、Linux、macOS X 或任何其他 Unix 变体的计算机连接到您的 EC2 实例。

**安装 NFS 客户端**

1. 连接到您的 EC2 实例。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[连接到您的 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html)。

1. 在 EC2 实例上通过使用 SSH 会话执行以下命令：

   1. (可选) 获取更新并重启。

      ```
      $  sudo yum -y update  
      $  sudo reboot
      ```

      重启后，重新连接到您的 EC2 实例。

   1. 安装 NFS 客户端。

      ```
      $ sudo yum -y install nfs-utils
      ```
**注意**  
如果在启动 EC2 实例时选择 **Amazon Linux AMI 2016.03.0** Amazon Linux AMI，则不需要安装 `nfs-utils`，因为它已默认包含在此 AMI 中。

### 步骤 3.3：将文件系统挂载到 EC2 实例上并测试
<a name="wt1-mount-fs-and-test"></a>

现在，将文件系统挂载到 EC2 实例上。

1. 创建目录 (” efs-mount-point “)。

   ```
   $ mkdir ~/efs-mount-point 
   ```

1. 挂载 EFS 文件系统。

   ```
   $ sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport mount-target-DNS:/   ~/efs-mount-point  
   ```

   EC2 实例可以将挂载目标的 DNS 名称解析为 IP 地址。您也可以直接指定挂载目标的 IP 地址。

   ```
   $ sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport mount-target-ip:/  ~/efs-mount-point
   ```

1. 您已经将 EFS 文件系统挂载到 EC2 实例上，接下来就可以创建文件了。

   1. 更改目录。

      ```
      $ cd ~/efs-mount-point  
      ```

   1. 列出目录的内容。

      ```
      $ ls -al
      ```

      它应该是空的。

      ```
      drwxr-xr-x 2 root     root     4096 Dec 29 22:33 .
      drwx------ 4 ec2-user ec2-user 4096 Dec 29 22:54 ..
      ```

      

   1. 刚创建的文件系统的根目录由根用户拥有并且只能由根用户写入，因此您需要更改权限以添加文件。

      ```
      $ sudo chmod go+rw .
      ```

      现在，如果您尝试 `ls -al` 命令，可以看到权限已更改。

      ```
      drwxrwxrwx 2 root     root     4096 Dec 29 22:33 .
      drwx------ 4 ec2-user ec2-user 4096 Dec 29 22:54 ..
      ```

   1. 创建 文本文件。

      ```
      $ touch test-file.txt 
      ```

   1. 列出目录的内容。

      ```
      $ ls -l
      ```

现在，您已成功创建一个 EFS 文件系统并将其挂载到您的 VPC 中的 EC2 实例上。

重启后挂载的文件系统将不复存在。为了自动重新挂载目录，可以使用 `fstab` 文件。如果您使用 Auto Scaling 组来启动 EC2 实例，则也可以在启动配置中设置脚本。

## 步骤 4：清除
<a name="wt1-clean-up"></a>

如果不再需要使用创建的资源，应将其删除。可以使用 CLI 删除。
+ 移除 EC2 资源（EC2 实例和两个安全组）。当您删除挂载目标时，Amazon EFS 会删除网络接口。
+ 删除 EFS 资源（文件系统、挂载目标）。

**删除在本演练中创建的 AWS 资源**

1. 终止为本教程创建的 EC2 实例。

   ```
   $ aws ec2 terminate-instances \
   --instance-ids instance-id \
   --profile adminuser
   ```

   您还可以使用控制台删除 EC2 资源。有关说明，请参阅[终止实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#terminating-instances-console)。

1. 删除挂载目标。

   只有在删除为文件系统创建的挂载目标后才能删除文件系统。可以使用 `describe-mount-targets` CLI 命令获得挂载目标列表。

   ```
   $  aws efs describe-mount-targets \
   --file-system-id file-system-ID \
   --profile adminuser \
   --region aws-region
   ```

   然后，使用 `delete-mount-target` CLI 命令删除挂载目标。

   ```
   $ aws efs delete-mount-target \
   --mount-target-id ID-of-mount-target-to-delete \
   --profile adminuser \
   --region aws-region
   ```

1. (可选) 删除您创建的两个安全组。创建安全组不需要支付费用。

   必须先删除挂载目标的安全组，然后再删除 EC2 实例的安全组。挂载目标的安全组包含一个引用 EC2 安全组的规则。因此，不能先删除 EC2 实例的安全组。

   有关说明，请参阅《Amazon EC2 User Guide》**中的 [Delete your security group](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-ec2-sg.html#deleting-a-security-group)。

1. 通过 `delete-file-system` CLI 命令删除文件系统。可以使用 `describe-file-systems` CLI 命令获得文件系统列表。可以从响应中获得文件系统 ID。

   ```
   aws efs describe-file-systems \
   --profile adminuser \
   --region aws-region
   ```

   通过提供文件系统 ID 删除文件系统。

   ```
   $ aws efs delete-file-system \
   --file-system-id ID-of-file-system-to-delete \
   --region aws-region \
   --profile adminuser
   ```

# 教程：使用本地 Linux 客户端挂载
<a name="mounting-fs-mount-helper-direct"></a>

当通过 Direct Connect 或 VPN 连接到 Amazon VPC 时，您可以将 EFS 文件系统挂载到本地数据中心服务器上。下图显示了从本地安装 EFS 文件系统 AWS 服务 所需的高级示意图。

![\[使用 Direct Connect时，在本地客户端挂载 EFS 文件系统。\]](http://docs.aws.amazon.com/zh_cn/efs/latest/ug/images/efs-directconnect-how-it-works.png)


**注意**  
不支持将 Amazon EFS 与基于 Microsoft Windows 的客户端结合使用。

**Topics**
+ [先决条件](#efs-onpremises)
+ [步骤 1：创建您的 EFS 资源](#wt5-step1-efs)
+ [步骤 2：安装 NFS 客户端](#wt5-step4-install-nfs)
+ [步骤 3：在本地客户端上挂载 EFS 文件系统](#wt5-step3-connect)
+ [第 4 步：清理资源并保护您的 AWS 账户](#wt5-step4-cleanup)
+ [可选：加密传输中的数据](#wt5-step2-get-efs-utils)

## 先决条件
<a name="efs-onpremises"></a>

确保您已经有 Direct Connect 或 VPN 连接。有关 Direct Connect的更多信息，请参阅 [Direct Connect 用户指南](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)。有关设置 VPN 连接的更多信息，请参阅《Amazon VPC 用户指南》**中的[使用 AWS Virtual Private Network将 VPC 连接到远程网络](https://docs.aws.amazon.com/vpc/latest/userguide/vpn-connections.html)。

建立 Direct Connect 或 VPN 连接后，在您的 Amazon VPC 中创建一个 EFS 文件系统和一个挂载目标。之后，您就可以下载并安装这些 amazon-efs-utils工具。接下来，您从本地客户端中测试文件系统。最后，本演练结束时的清理步骤提供了删除这些资源的信息。

此演练在美国西部（俄勒冈州）区域（`us-west-2`）创建所有这些资源。无论 AWS 区域 您使用哪种方式，请务必始终如一地使用它。您的所有资源（您的 VPC、挂载目标和 EFS 文件系统）都必须位于 AWS 区域同一位置，如下图所示。

![\[使用 Direct Connect时，在本地客户端挂载 EFS 文件系统。\]](http://docs.aws.amazon.com/zh_cn/efs/latest/ug/images/efs-directconnect-how-it-works.png)


**注意**  
在某些情况下，您的本地应用程序可能需要知道 EFS 文件系统是否可用。在这些情况下，您的应用程序应能在第一个挂载点暂时不可用时指向其他挂载点 IP 地址。在这种情况下，我们建议您将两个本地客户端通过不同的可用区 (AZs) 连接到您的文件系统，以获得更高的可用性。

您可以使用您的根凭证 AWS 账户 登录控制台并尝试本练习。但是， AWS Identity and Access Management (IAM) 最佳实践建议您不要使用自己的根证书 AWS 账户。而是在您的账户中创建一个管理员用户，并使用这些凭证来管理您的账户中的资源。有关更多信息，请参阅《AWS IAM Identity Center 用户指南》**中的[单点登录访问 AWS 账户](https://docs.aws.amazon.com/singlesignon/latest/userguide/useraccess.html)。

您可以使用默认 VPC，也可以使用在您的账户中创建的自定义 VPC。对于本演练，可以使用默认的 VPC 配置。但是，如果您使用自定义 VPC，请验证以下情况：
+ Internet 网关已连接到您的 VPC。有关更多信息，请参阅《Amazon VPC 用户指南》**中的[使用互联网网关启用 VPC 互联网访问](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)。
+ VPC 路由表包含一个规则，以将 Internet 范围的所有流量发送到 Internet 网关。

## 步骤 1：创建您的 EFS 资源
<a name="wt5-step1-efs"></a>

在此步骤中，您将创建 EFS 文件系统和挂载目标。

**创建 EFS 文件系统**

1. 打开 Amazon Elastic File System 控制台，网址为[https://console.aws.amazon.com/efs/](https://console.aws.amazon.com/efs/)。

1. 选择**创建文件系统**。

1. 从 **VPC** 列表中选择您的默认 VPC。

1. 选中所有可用区对应的复选框。确保它们全都选择了默认子网、自动 IP 地址和默认安全组。这些是您的挂载目标。有关更多信息，请参阅 [管理挂载目标](accessing-fs.md)。

1. 选择**下一步**。

1. 命名您的文件系统，选择**通用型**以作为您的默认性能模式，然后选择**下一步**。

1. 选择**创建文件系统**。

1. 从列表中选择您的文件系统，并记下**安全组**值。在下一个步骤中，您需要用到此值。

您刚刚创建的文件系统具有挂载目标。每个挂载目标都具有一个关联的安全组。该安全组充当虚拟防火墙以控制网络流量。如果您在创建挂载目标时未提供安全组，Amazon EFS 会将 VPC 的默认安全组与之关联。如果您完全按照上述步骤进行操作，则挂载目标使用默认安全组。

下一步，您将向挂载目标的安全组添加一条规则，以允许入站流量进入网络文件系统 (NFS) 端口 (2049)。您可以使用将规则 AWS 管理控制台 添加到您的 VPC 中挂载目标的安全组中。

**允许入站流量进入 NFS 端口**

1. 登录 AWS 管理控制台 并打开 Amazon EC2 控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在**网络与安全**下面，选择**安全组**。

1. 选择与您的文件系统关联的安全组。您在[步骤 1：创建您的 EFS 资源](#wt5-step1-efs)的结尾记录了该值。

1. 在安全组列表下面显示的分页窗格中，选择**入站**选项卡。

1. 选择**编辑**。

1. 选择**添加规则**，然后选择以下类型的规则：
   + **类型** – **NFS**
   + **源** – **任何位置**

   我们建议您仅使用**任何位置**源进行测试。您可以创建一个设置为本地客户端 IP 地址的自定义源，或者从客户端本身中使用控制台并选择**我的 IP**。
**注意**  
您不需要添加出站规则，因为默认出站规则允许所有出站流量。如果没有该默认出站规则，请添加一个出站规则以在 NFS 端口 2049 上打开 TCP 连接，从而将挂载目标安全组指定为目标。

## 步骤 2：安装 NFS 客户端
<a name="wt5-step4-install-nfs"></a>

在此步骤中，安装 NFS 客户端。

**在本地服务器上安装 NFS 客户端**
**注意**  
如果您需要在传输中加密数据，请使用 Amazon EFS 挂载帮助程序 `amazon-efs-utils` 而不是 NFS 客户端。有关安装的信息 amazon-efs-utils，请参阅 “*可选：加密传输中的数据*” 部分。

1. 访问本地客户端的终端。

1. 安装 NFS。

   如果您使用的是 Red Hat Linux，请使用以下命令安装 NFS。

   ```
   $ sudo yum -y install nfs-utils
   ```

   如果您使用的是 Ubuntu，请使用以下命令安装 NFS。

   ```
   $ sudo apt-get -y install nfs-common
   ```

## 步骤 3：在本地客户端上挂载 EFS 文件系统
<a name="wt5-step3-connect"></a>

**创建挂载目录**

1.  使用以下命令为挂载点创建目录。  
**Example**  

   ```
   mkdir ~/efs
   ```

1. 选择可用区中的挂载目标的所需 IP 地址。您可以从本地 Linux 客户端中测量延迟。为此，请针对不同可用区中的 EC2 实例的 IP 地址使用基于终端的工具（如 `ping`）以查找具有最低延迟的实例。
+ 运行挂载命令以使用挂载目标的 IP 地址挂载文件系统。

  ```
  $ sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport mount-target-IP:/   ~/efs
  ```

现已挂载 EFS 文件系统，您可以使用以下过程对其进行测试。

**测试 EFS 文件系统连接**

1. 使用以下命令将目录更改为您创建的新目录。

   ```
   $ cd ~/efs
   ```

1. 创建一个子目录，并将该子目录的所有权更改为您的 EC2 实例用户。接下来，使用以下命令导航到该新目录。

   ```
   $ sudo mkdir getting-started
   $ sudo chown ec2-user getting-started
   $ cd getting-started
   ```

1. 使用以下命令创建一个文本文件。

   ```
   $ touch test-file.txt
   ```

1. 使用以下命令列出目录内容。

   ```
   $ ls -al
   ```

这样，将会创建以下文件。

```
-rw-rw-r-- 1 username username 0 Nov 15 15:32 test-file.txt
```

**警告**  
请在自动挂载文件系统时使用 `_netdev` 选项，它用于指定网络文件系统。如果缺少 `_netdev`，您的 EC2 实例可能会停止响应。出现该结果是因为，需要在计算实例启动其网络后初始化网络文件系统。有关更多信息，请参阅 [自动挂载失败，并且实例没有响应](troubleshooting-efs-mounting.md#automount-fails)。

## 第 4 步：清理资源并保护您的 AWS 账户
<a name="wt5-step4-cleanup"></a>

完成本演练后，或者如果您不想探索这些演练，则应执行如下步骤以清理您的资源并保护您的 AWS 账户。

**清理资源并保护您的 AWS 账户**

1. 使用以下命令卸载 EFS 文件系统。

   ```
   $ sudo umount ~/efs
   ```

1. 单击 [Amazon EFS 控制台](https://console.aws.amazon.com/efs/)，打开 Amazon EFS 控制台。

1. 选择要从文件系统列表中删除的 EFS 文件系统。

1. 对于**操作**，选择**删除文件系统**。

1. 在**永久删除文件系统**对话框中，键入要删除的 EFS 文件系统的文件系统 ID，然后选择**删除文件系统**。

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择**安全组**。

1. 选择您针对本演练向其中添加了规则的安全组的名称。
**警告**  
不要删除您的 VPC 的默认安全组。

1. 对于**操作**，请选择**编辑入站规则**。

1. 选择在添加的入站规则末尾的 X，然后选择**保存**。

## 可选：加密传输中的数据
<a name="wt5-step2-get-efs-utils"></a>

要对传输中的数据进行加密，请使用 Amazon EFS 挂载帮助程序代替 NFS 客户端。 amazon-efs-utils

*amazon-efs-utils * 软件包是一个开源 Amazon EFS 工具集。该 amazon-efs-utils集合附带挂载助手和工具，可以更轻松地加密传输给 Amazon EFS 的数据。有关此软件包的更多信息，请参阅[安装 Amazon EFS 客户端](using-amazon-efs-utils.md)。该软件包可从免费下载 GitHub，您可以通过克隆软件包的存储库来获取。

**要 amazon-efs-utils从中进行克隆 GitHub**

1. 访问本地客户端的终端。

1. 在终端中，使用以下命令将 amazon-efs-utils工具克隆 GitHub 到您选择的目录中。

   ```
   git clone https://github.com/aws/efs-utils
   ```

现已具有该软件包，您可以开始进行安装了。该安装是以不同方式处理的，具体取决于本地客户端的 Linux 发行版。支持以下发行版：
+ Amazon Linux 2
+ Amazon Linux
+ 红帽企业 Linux（以及诸如 CentOS 之类的衍生产品）版本 8 及更高版本
+ Ubuntu 16.04 LTS 和更新版本

**amazon-efs-utils作为 RPM 软件包进行编译和安装**

1. 在您的客户端上打开终端，然后导航到包含克隆 amazon-efs-utils软件包的 GitHub目录。

1. 使用以下命令构建该软件包。

   ```
   make rpm
   ```
**注意**  
如果尚未安装 rpm-builder 软件包，请使用以下命令进行安装。  

   ```
   sudo yum -y install rpm-build
   ```

1. 使用以下命令安装 软件包。

   ```
   sudo yum -y install build/amazon-efs-utils*rpm
   ```

**amazon-efs-utils作为 deb 软件包进行构建和安装**

1. 在您的客户端上打开终端，然后导航到包含克隆 amazon-efs-utils软件包的 GitHub目录。

1. 使用以下命令构建该软件包。

   ```
   ./build-deb.sh
   ```

1. 使用以下命令安装 软件包。

   ```
   sudo apt-get install build/amazon-efs-utils*deb
   ```

安装软件包后，配置 amazon-efs-utils为在 with Direct Connect 或 VPN 中使用。 AWS 区域 

**配置 amazon-efs-utils为在您的 AWS 区域**

1. 通过 Secure Shell（SSH）访问您的 EC2 实例的终端，然后使用相应的用户名登录。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[连接到您的 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html)。

1. 使用所选的文本编辑器打开 `/etc/amazon/efs/efs-utils.conf` 文件。

1. 查找 `“dns_name_format = {fs_id}.efs.{region}.amazonaws.com”` 行。

1. 使用您的 AWS 区域的 ID 更改 `{region}`，例如，`us-west-2`。

要在本地客户端上挂载 EFS 文件系统，请先在本地 Linux 客户端上打开终端。要挂载系统，您需要使用文件系统 ID、其中一个挂载目标的 IP 地址，以及文件系统的 AWS 区域。如果您为文件系统创建了多个挂载目标，则可选择其中任一项。

在具有该信息时，您可以使用三个步骤挂载文件系统：

**创建挂载目录**

1.  使用以下命令为挂载点创建目录。  
**Example**  

   ```
   mkdir ~/efs
   ```

1. 选择可用区中的挂载目标的所需 IP 地址。您可以从本地 Linux 客户端中测量延迟。为此，请针对不同可用区中的 EC2 实例的 IP 地址使用基于终端的工具（如 `ping`）以查找具有最低延迟的实例。

**更新 `/etc/hosts`**
+ 在本地 `/etc/hosts` 文件中添加一个具有文件系统 ID 和挂载目标 IP 地址的条目，格式如下所示。

  ```
  mount-target-IP-Address file-system-ID.efs.region.amazonaws.com
  ```  
**Example**  

  ```
  192.0.2.0 fs-12345678.efs.us-west-2.amazonaws.com
  ```

**创建挂载目录**

1.  使用以下命令为挂载点创建目录。  
**Example**  

   ```
   mkdir ~/efs
   ```

1. 运行 mount 命令以挂载文件系统。  
**Example**  

   ```
   sudo mount -t efs fs-12345678 ~/efs
   ```

   如果要使用传输中的数据加密，mount 命令类似于以下内容。  
**Example**  

   ```
   sudo mount -t efs -o tls fs-12345678 ~/efs
   ```

# 教程：挂载来自其它 VPC 的文件系统
<a name="efs-different-vpc"></a>

在此教程中，您将设置一个 EC2 实例来挂载位于其它虚拟私有云（VPC）中的 EFS 文件系统。您可以使用 EFS 挂载帮助程序执行该操作。挂载帮助程序是 `amazon-efs-utils` 工具集的一部分。有关 `amazon-efs-utils`的更多信息，请参阅[安装 Amazon EFS 客户端](using-amazon-efs-utils.md)。

必须使用 VPC 对等连接或 VPC 传输网关连接客户端的 VPC 和 EFS 文件系统的 VPC。当您使用 VPC 对等连接或传输网关连接 VPC 时，一个 VPC 中的 EC2 实例可以访问另一个 VPC 中的 EFS 文件系统，即使 VPCs 它们属于不同的账户。

**注意**  
不支持将 Amazon EFS 与基于 Microsoft Windows 的客户端结合使用。

**Topics**
+ [先决条件](#wt6-prepare)
+ [步骤 1：确定挂载目标的可用区 ID](#wt6-efs-utils-step1)
+ [步骤 2：确定挂载目标 IP 地址](#wt6-efs-utils-step2)
+ [步骤 3：为挂载目标添加主机条目](#wt6-efs-utils-step3)
+ [步骤 4：使用 EFS 挂载帮助程序挂载您的文件系统](#wt6-efs-utils-step4)
+ [第 5 步：清理资源并保护您的 AWS 账户](#wt6-step5-cleanup)

## 先决条件
<a name="wt6-prepare"></a>

要完成本教程，您必须满足以下条件：
+ 在使用此过程之前，将在 EC2 实例上安装 `amazon-efs-utils` 工具集。有关安装 `amazon-efs-utils` 的说明，请参阅[安装 Amazon EFS 客户端](using-amazon-efs-utils.md)。
+ 下列情况之一：
  + EFS 文件系统所在的 VPC 与 EC2 实例所在的 VPC 之间的 VPC 对等连接。*VPC 对等连接*是两 VPCs者之间的网络连接。这种类型的连接使您能够使用私有 Internet 协议版本 4 (IPv4) 或 Internet 协议版本 6 (IPv6) 地址在它们之间路由流量。您可以使用 VPC 对等互连 VPCs 在同一个 AWS 区域 或两者之间 AWS 区域进行连接。有关更多信息，请参阅《Amazon VPC 对等连接指南》**中的[创建并接受 VPC 对等连接](https://docs.aws.amazon.com/vpc/latest/peering/create-vpc-peering-connection.html)。
  + EFS 文件系统所在的 VPC 与 EC2 实例所在的 VPC 之间的中转网关连接。*传输网关*是一个网络中转枢纽，可用于将您的网络 VPCs 和本地网络互连。有关更多信息，请参阅《Amazon VPC Transit Gateway 指南》**中的[开始使用 Amazon VPC 中转网关](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-getting-started.html)。

## 步骤 1：确定挂载目标的可用区 ID
<a name="wt6-efs-utils-step1"></a>

为了确保您的文件系统的高可用性，我们建议您始终使用与 NFS 客户端位于相同可用区的 EC2 挂载目标 IP 地址。如果要挂载其他账户中的 EFS 文件系统，请确保 NFS 客户端和 EFS 挂载目标位于相同的可用区 ID 中。此要求适用，因为可用区名称在账户之间可能会有所不同。

**确定 EC2 实例的可用区 ID**

1. 连接到您的 EC2 实例。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[连接到您的 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html)。

1. 按以下所示，使用 `describe-availability-zones` CLI 命令确定 EC2 实例所在的可用区 ID。

   ```
   [ec2-user@ip-10.0.0.1] $ aws ec2 describe-availability-zones --zone-name
   {
       "AvailabilityZones": [
           {
               "State": "available", 
               "ZoneName": "us-east-2b", 
               "Messages": [], 
               "ZoneId": "use2-az2", 
               "RegionName": "us-east-2"
           }
       ]
   }
   ```

   可用区 ID 将在 `ZoneId` 属性 `use2-az2` 中返回。

## 步骤 2：确定挂载目标 IP 地址
<a name="wt6-efs-utils-step2"></a>

您已知道 EC2 实例的可用区 ID，现在可以检索位于同一可用区 ID 中的挂载目标的 IP 地址。

**在同一可用区 ID 中确定挂载目标 IP 地址**
+ 按以下所示，使用 `describe-mount-targets` CLI 命令在 `use2-az2` 可用区 ID 中检索文件系统的挂载目标 IP 地址。

  ```
  $ aws efs describe-mount-targets --file-system-id file_system_id
  {
      "MountTargets": [
          {
              "OwnerId": "111122223333",
              "MountTargetId": "fsmt-11223344", 
    =====>    "AvailabilityZoneId": "use2-az2",
              "NetworkInterfaceId": "eni-048c09a306023eeec", 
              "AvailabilityZoneName": "us-east-2b", 
              "FileSystemId": "fs-01234567", 
              "LifeCycleState": "available", 
              "SubnetId": "subnet-06eb0da37ee82a64f", 
              "OwnerId": "958322738406", 
    =====>    "IpAddress": "10.0.2.153"
          }, 
  ...
          {
              "OwnerId": "111122223333",
              "MountTargetId": "fsmt-667788aa", 
              "AvailabilityZoneId": "use2-az3", 
              "NetworkInterfaceId": "eni-0edb579d21ed39261", 
              "AvailabilityZoneName": "us-east-2c", 
              "FileSystemId": "fs-01234567", 
              "LifeCycleState": "available", 
              "SubnetId": "subnet-0ee85556822c441af", 
              "OwnerId": "958322738406", 
              "IpAddress": "10.0.3.107"
          }
      ]
  }
  ```

  `use2-az2` 可用区 ID 中的挂载目标的 IP 地址为 10.0.2.153。

## 步骤 3：为挂载目标添加主机条目
<a name="wt6-efs-utils-step3"></a>

您现在可以在 EC2 实例上的 `/etc/hosts` 文件中生成一个条目，将挂载目标 IP 地址映射到您的 EFS 文件系统的主机名。

**为挂载目标添加主机条目**

1. 将挂载目标 IP 地址行添加到 EC2 实例的 `/etc/hosts` 文件中。该条目使用 `mount-target-IP-Address file-system-ID.efs.region.amazonaws.com` 格式。使用以下命令，将该行添加到文件中。

   ```
   echo "10.0.2.153 fs-01234567.efs.us-east-2.amazonaws.com" | sudo tee -a /etc/hosts
   ```

1. 确保 EC2 实例和挂载目标的 VPC 安全组具有允许根据需要访问 EFS 文件系统的规则。有关更多信息，请参阅 [使用 VPC 安全组](network-access.md)。

## 步骤 4：使用 EFS 挂载帮助程序挂载您的文件系统
<a name="wt6-efs-utils-step4"></a>

要挂载 EFS 文件系统，必须先在 EC2 实例上创建挂载目录。然后，使用 EFS 挂载助手，您可以通过 AWS Identity and Access Management (IAM) 授权或 EFS 接入点挂载文件系统。有关更多信息，请参阅[使用 IAM 控制文件系统访问](iam-access-control-nfs-efs.md)和[使用接入点工作](efs-access-points.md)。

**创建挂载目录**
+ 使用以下命令创建用于挂载文件系统的目录。

  ```
  $ sudo mkdir /mnt/efs/
  ```

**使用 IAM 授权挂载文件系统**
+ 使用以下命令，通过 IAM 授权挂载文件系统。

  ```
  $ sudo mount -t efs -o tls,iam file-system-id /mnt/efs/
  ```

**使用 EFS 访问点挂载文件系统**
+ 使用以下命令，通过 EFS 访问点挂载文件系统。

  ```
  $ sudo mount -t efs -o tls,accesspoint=access-point-id file-system-id /mnt/efs/
  ```

现已挂载 EFS 文件系统，您可以使用以下过程对其进行测试。

**测试 EFS 文件系统连接**

1. 使用以下命令将目录更改为您创建的新目录。

   ```
   $ cd ~/mnt/efs
   ```

1. 创建一个子目录，并将该子目录的所有权更改为您的 EC2 实例用户。接下来，使用以下命令导航到该新目录。

   ```
   $ sudo mkdir getting-started
   $ sudo chown ec2-user getting-started
   $ cd getting-started
   ```

1. 使用以下命令创建一个文本文件。

   ```
   $ touch test-file.txt
   ```

1. 使用以下命令列出目录内容。

   ```
   $ ls -al
   ```

这样，将会创建以下文件。

```
-rw-rw-r-- 1 username username 0 Nov 15 15:32 test-file.txt
```

您也可以在 `/etc/fstab` 文件中添加条目以自动挂载文件系统。有关更多信息，请参阅 [在现有 EC2 Linux 实例上启用自动挂载](mount-fs-auto-mount-update-fstab.md)。

**警告**  
请在自动挂载文件系统时使用 `_netdev` 选项，它用于指定网络文件系统。如果缺少 `_netdev`，您的 EC2 实例可能会停止响应。出现该结果是因为，需要在计算实例启动其网络后初始化网络文件系统。有关更多信息，请参阅 [自动挂载失败，并且实例没有响应](troubleshooting-efs-mounting.md#automount-fails)。

## 第 5 步：清理资源并保护您的 AWS 账户
<a name="wt6-step5-cleanup"></a>

完成本教程后，请执行以下步骤以清理资源并保护您的 AWS 账户。

**清理资源并保护您的 AWS 账户**

1. 使用以下命令卸载 EFS 文件系统。

   ```
   $ sudo umount ~/efs
   ```

1. 打开 Amazon Elastic File System 控制台，网址为[https://console.aws.amazon.com/efs/](https://console.aws.amazon.com/efs/)。

1. 选择要从文件系统列表中删除的 EFS 文件系统。

1. 对于**操作**，选择**删除文件系统**。

1. 在**永久删除文件系统**对话框中，键入要删除的 EFS 文件系统的文件系统 ID，然后选择**删除文件系统**。

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择**安全组**。

1. 选择您针对本教程向其中添加了规则的安全组的名称。
**警告**  
不要删除您的 VPC 的默认安全组。

1. 对于**操作**，请选择**编辑入站规则**。

1. 选择在添加的入站规则末尾的 X，然后选择**保存**。

# 解决挂载问题
<a name="troubleshooting-efs-mounting"></a>

您可以在下文中找到有关排查 EFS 文件系统挂载问题的信息。

## 在 Windows 实例上挂载文件系统失败
<a name="mount-windows-instance-fails"></a>

在 Microsoft Windows 上的 Amazon EC2 实例上挂载文件系统失败。

**要采取的操作**  
请勿将 Amazon EFS 与 Windows EC2 实例一起使用，不支持该配置。

## 服务器拒绝访问
<a name="mount-fail-access-denied-by-server"></a>

文件系统挂载失败，并显示以下消息：

```
/efs mount.nfs4: access denied by server while mounting 127.0.0.1:/
```

如果您的 NFS 客户端没有挂载文件系统的权限，则可能会出现此问题。

**要采取的操作**  
如果您尝试使用 IAM 挂载文件系统，请确保您在挂载命令中使用了 `-o iam` 或 -o tls 选项。这会告诉 EFS 挂载帮助程序将您的凭证传递给 EFS 挂载目标。如果您仍然没有访问权限，请检查您的文件系统策略和身份策略，以确保没有适用于您的连接的 DENY 子句，并且至少有一个适用于连接的 ALLOW 子句。有关更多信息，请参阅[使用 IAM 控制文件系统访问](iam-access-control-nfs-efs.md)和[创建文件系统策略](create-file-system-policy.md)。

## 自动挂载失败，并且实例没有响应
<a name="automount-fails"></a>

如果在实例上自动挂载文件系统，并且未声明 `_netdev` 选项，则可能会出现该问题。如果缺少 `_netdev`，您的 EC2 实例可能会停止响应。出现该结果是因为，需要在计算实例启动其网络后初始化网络文件系统。

**要采取的操作**  
如果出现此问题，请联系 Supp AWS ort。

## 在 /etc/fstab 中挂载多个 Amazon EFS 文件系统失败
<a name="automount-fix-multiple-fs"></a>

如果实例使用的 systemd 初始化系统在 `/etc/fstab` 中具有两个或更多 Amazon EFS 条目，有时可能会没有挂载其中的部分或全部条目。在这种情况下，`dmesg` 输出显示类似于以下内容的一行或多行。

```
NFS: nfs4_discover_server_trunking unhandled error -512. Exiting with error EIO
```

**要采取的操作**  
在这种情况下，我们建议您在 `/etc/systemd/system/mount-nfs-sequentially.service` 中创建新的 systemd 服务文件。文件中包含的代码取决于您是手动挂载文件系统，还是使用 Amazon EFS 挂载帮助程序进行挂载。
+ 如果要手动装载文件系统，则该`ExecStart`命令必须指向网络文件系统 (NFS4)。在此文件中包含以下代码：

  ```
  [Unit]
  Description=Workaround for mounting NFS file systems sequentially at boot time
  After=remote-fs.target
  
  [Service]
  Type=oneshot
  ExecStart=/bin/mount -avt nfs4
  RemainAfterExit=yes
  
  [Install]
  WantedBy=multi-user.target
  ```
+ 如果您使用的是 Amazon EFS 挂载帮助程序，则该`ExecStart`命令必须指向 EFS，而不是使用传输层安全 (TLS)。 NFS4 在此文件中包含以下代码：

  ```
  [Unit]
  Description=Workaround for mounting NFS file systems sequentially at boot time
  After=remote-fs.target
  
  [Service]
  Type=oneshot
  ExecStart=/bin/mount -avt efs
  RemainAfterExit=yes
  
  [Install]
  WantedBy=multi-user.target
  ```

创建此文件后，运行以下两个命令：

1. `sudo systemctl daemon-reload`

1. `sudo systemctl enable mount-nfs-sequentially.service`

然后，重新启动您的 Amazon EC2 实例。将按需挂载文件系统，通常在一秒内。

## 挂载命令失败，并显示“错误的 fs 类型”错误消息
<a name="mount-error-wrong-fs"></a>

挂载命令失败，并显示如下错误消息。

```
mount: wrong fs type, bad option, bad superblock on 10.1.25.30:/, 
missing codepage or helper program, or other error (for several filesystems 
(e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program)
In some cases useful info is found in syslog - try dmesg | tail or so.
```

**要采取的操作**  
如果收到该消息，请安装 `nfs-utils`（或 Ubuntu 上的 `nfs-common`）软件包。有关更多信息，请参阅 [安装 NFS 客户端](mounting-fs-install-nfsclient.md)。

## 挂载命令失败，并显示“不正确的挂载选项”错误消息
<a name="mount-error-incorrect-mount"></a>

挂载命令失败，并显示如下错误消息。

```
mount.nfs: an incorrect mount option was specified
```

**要采取的操作**  
此错误消息很可能意味着你的 Linux 发行版不支持网络文件系统版本 4.0 和 4.1 (NFSv4)。要确认是否属于这种情况，您可以运行以下命令。

```
$ grep CONFIG_NFS_V4_1 /boot/config*
```

如果上述命令返回 `# CONFIG_NFS_V4_1 is not set`，则表明您的 Linux 发行版不支持 NFSv4.1。有关 NFSv4支持 .1 的亚马逊弹性计算云 (Amazon EC2) 的亚马逊系统映像 (AMI) 列表，请参阅。[NFS 支持](mounting-fs-old.md#mounting-fs-nfs-info)

## 使用接入点挂载失败
<a name="mount-error-no-such-file"></a>

使用接入点进行挂载时，挂载命令失败，并显示以下错误消息：

```
mount.nfs4: mounting access_point failed, reason given by server: No such file or directory
```

**要采取的操作**  
此错误消息表示指定的 EFS 路径不存在。确保您提供接入点根目录的所有权和权限。EFS 将使用此信息创建根目录。有关更多信息，请参阅 [使用接入点工作](efs-access-points.md)。

如果未指定任何根目录所有权和权限，并且根目录尚不存在，EFS 将不会创建根目录。发生这种情况时，使用接入点挂载文件系统的任何尝试都将失败。

## 在创建文件系统后文件系统挂载立即失败
<a name="mount-fails-propegation"></a>

在创建域名服务（DNS）记录的挂载目标后，可能需要长达 90 秒的时间才能在整个 AWS 区域中传播。

**要采取的操作**  
如果您以编程方式创建和挂载文件系统（例如使用 CloudFormation 模板），我们建议您实现等待条件。

## 文件系统挂载挂起，然后失败，并显示超时错误
<a name="mount-hangs-fails-timeout"></a>

文件系统挂载命令挂起一两分钟，然后失败，并显示超时错误。下面的代码显示了一个示例。

```
$ sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport mount-target-ip:/ mnt

[2+ minute wait here]
mount.nfs: Connection timed out
$Â 
```

**要采取的操作**

出现该错误的原因可能是，Amazon EC2 实例或挂载目标安全组的配置不正确。确保挂载目标安全组具有支持使用端口 2049 从 EC2 安全组进行 NFS 访问的入站规则。有关更多信息，请参阅 [使用 VPC 安全组](network-access.md)。

请验证您所指定的挂载目标 IP 地址是否有效。如果指定的 IP 地址不正确，并且在该 IP 地址中没有任何其他内容以拒绝挂载，则可能会遇到该问题。

## 使用 NFS 通过 DNS 名称挂载文件系统失败
<a name="mount-fails-dns-name"></a>

尝试使用 NFS 客户端（不使用 `amazon-efs-utils` 客户端）通过文件系统的 DNS 名称挂载文件系统失败，如以下示例所示：

```
$ sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport file-system-id.efs.aws-region.amazonaws.com:/ mnt   
mount.nfs: Failed to resolve server file-system-id.efs.aws-region.amazonaws.com: 
  Name or service not known.   

$ 
```

**要采取的操作**

请检查您的 VPC 配置。如果使用自定义 VPC，请确保已启用 DNS 设置。有关更多信息，请参阅《Amazon VPC 用户指南》**中的 [VPC 的 DNS 属性](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html)。此外，文件系统和挂载目标 DNS 名称还无法从它们存在的 VPC 外部进行解析。

您必须先执行以下操作，然后才能在 `mount` 命令中使用文件系统的 DNS 名称来挂载文件系统：
+ 确保 Amazon EC2 实例所在的同一可用区中有一个 Amazon EFS 挂载目标。
+ 确保在与 Amazon EC2 实例相同的 VPC 中有一个挂载目标。否则，不能对位于其他 VPC 中的 EFS 挂载目标使用 DNS 名称解析。有关更多信息，请参阅 [从其他 AWS 账户 或 VPC 挂载 EFS 文件系统](manage-fs-access-vpc-peering.md)。
+ 在配置为使用由 Amazon 提供的 DNS 服务器的 Amazon VPC 内连接至您的 Amazon EC2 实例。有关更多信息，请参阅《Amazon VPC 用户指南》**中的 [Amazon VPC 中的 DHCP 选项集](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)。
+ 确保连接 Amazon EC2 实例的 Amazon VPC 已启用 DNS 主机名。有关更多信息，请参阅《Amazon VPC 用户指南》**中的 [VPC 中的 DNS 属性](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support)。

## 文件系统挂载失败，并显示错误“nfs 未响应”
<a name="tcp-reconnect-nfs-not-responding"></a>

Amazon EFS 文件系统挂载因传输控制协议（TCP）重新连接事件失败，并返回错误 `"nfs: server_name still not responding"`。

**要采取的操作**

请使用 `noresvport` 挂载选项，以确保在重新建立网络连接时，NFS 客户端将使用新的 TCP 源端口。这样做有助于确保在网络恢复事件后具有不间断的可用性。

## 挂载目标生命周期状态停滞
<a name="mount-target-lifecycle-stuck"></a>

挂载目标生命周期停滞在**正在创建**或**正在删除**状态。

**要采取的操作**  
重试 `CreateMountTarget` 或 `DeleteMountTarget` 调用。

## 挂载目标生命周期状态显示错误
<a name="mount-target-dns-error"></a>

挂载目标生命周期状态显示为**错误**。

**要采取的操作**

 如果虚拟私有云（VPC）的托管区相互冲突，Amazon EFS 无法为新的文件系统挂载目标创建必要的域名系统（DNS）记录。Amazon EFS 无法在客户拥有的托管区内创建新记录。如果您需要维护具有冲突的 `efs.<region>.amazonaws.com` DNS 范围的托管区，请在单独的 VPC 中创建托管区。有关 VPC 的 DNS 注意事项的更多信息，请参阅[您的 VPC 的 DNS 属性](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html)。

要解决此问题，请从 VPC 中删除冲突的 `efs.<region>.amazonaws.com` 主机，然后重新创建挂载目标。有关删除挂载目标的更多信息，请参阅[管理挂载目标](accessing-fs.md)。

## 挂载没有响应
<a name="mount-unresponsive"></a>

Amazon EFS 挂载看起来没有响应。例如，`ls` 等命令挂起。

**要采取的操作**

如果另一个应用程序正在将大量数据写入文件系统，则可能会出现该错误。在该操作完成前，可能会阻止对正在被写入的文件的访问。一般来说，尝试访问正在被写入的文件的任何命令或应用程序均可能会显示为挂起状态。例如，`ls` 命令可能会在访问正在被写入的文件时挂起。出现该结果是因为，某些 Linux 发行版在 `ls` 命令中使用别名，以便检索文件属性以及列出目录内容。

要解决该问题，请验证另一个应用程序是否正在将文件写入 Amazon EFS 挂载，并验证它是否处于 `Uninterruptible sleep`（`D`）状态，如下面的示例所示：

```
$ ps aux | grep large_io.py 
root 33253 0.5 0.0 126652 5020 pts/3 D+ 18:22 0:00 python large_io.py /efs/large_file
```

在已验证确属这种情况之后，您可以通过等待其他写入操作完成或通过实施一种变通解决办法来解决问题。在 `ls` 示例中，您可以直接使用 `/bin/ls` 命令，而不是使用别名。这样做可以继续执行命令，而不会在写入的文件处挂起。通常，如果写入数据的应用程序可能会定期强制执行数据刷新（可能使用 `fsync(2)`），这样做可能有助于提高文件系统对其他应用程序的响应能力。但是，在应用程序写入数据时，这种改善可能会牺牲性能。

## 挂载的客户端断开连接
<a name="client-disconnected"></a>

挂载到 Amazon EFS 文件系统的客户端偶尔会由于多种原因而断开连接。NFS 客户端旨在在出现中断时自动重新连接，从而最大限度地减少例行断开连接对应用程序性能和可用性的影响。在大多数情况下，客户端会在几秒钟内以透明的方式重新连接。

但是，旧版 Linux 内核（版本 v5.4 及更低版本）中包含的 NFS 客户端软件包含一种行为，该行为会导致 NFS 客户端在断开连接时尝试在同一 TCP 源端口上重新连接。此行为不符合 TCP RFC 要求，并且可能会阻止这些客户端快速重新建立与其 EFS 服务器（在本例中为 EFS 文件系统）的连接。

要解决此问题，我们强烈建议您使用 Amazon EFS 挂载帮助程序来挂载 EFS 文件系统。EFS 挂载帮助程序使用针对 Amazon EFS 文件系统优化了的挂载设置。有关 EFS 客户端和挂载帮助程序的更多信息，请参阅[安装 Amazon EFS 客户端](using-amazon-efs-utils.md)。

如果您无法使用 EFS 挂载帮助程序，我们强烈建议您使用 `noresvport` NFS 挂载选项，该选项会指示 NFS 客户端使用新的 TCP 源端口重新建立连接，以避免出现此问题。有关更多信息，请参阅 [推荐的 NFS 挂载设置](mounting-fs-nfs-mount-settings.md)。

## 对新挂载的文件系统的操作返回“坏文件句柄”错误
<a name="operations-return-bad-file-handle"></a>

针对新挂载的文件系统执行的操作返回 `bad file handle` 错误。

如果 Amazon EC2 实例连接到了一个文件系统和一个具有指定 IP 地址的挂载目标，然后该文件系统和挂载目标被删除，则可能会出现该错误。如果您创建新的文件系统和挂载目标，以连接到具有相同挂载目标 IP 地址的 Amazon EC2 实例，则可能会发生该问题。

**要采取的操作**  
您可以卸载文件系统，然后在 Amazon EC2 实例上重新挂载文件系统以解决该问题。有关卸载您的 Amazon EFS 文件系统的更多信息，请参阅[卸载文件系统](unmounting-fs.md)。

## 卸载文件系统失败
<a name="troubleshooting-unmounting"></a>

如果文件系统繁忙，则无法将其卸载。

**要采取的操作**  
您可以通过以下方法解决该问题：
+ 使用延迟卸载 **umount -l**，它会在运行时将文件系统从文件系统层次结构中分离出来，然后在文件系统不再忙碌时立即清理对文件系统的所有引用。
+ 等待所有读取和写入操作完成，然后再次尝试执行 **umount** 命令。
+ 使用 **umount -f** 命令强制卸载。
**警告**  
强制卸载将会中断当前为文件系统执行的任何数据读取或写入操作。有关使用此选项的更多信息和指导，请参阅[卸载手册页](https://man7.org/linux/man-pages/man8/umount.8.html)。