

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

# 使用网络文件系统挂载 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