在 EC2 实例上自动挂载 EFS

Auto mounting EFS on EC2 instance

我创建了一个 EC2 实例和一个 EFS,并且能够在实例上正确挂载 EFS。

我需要自动挂载以防服务器重启。

根据 documentation,我在 /etc/fstab

中进行了以下操作
fs-xxxxxxxx:/ /mnt/efs efs defaults,_netdev 0 0

使用 EFS 文件系统 ID 代替 xxxxxxxx

但是当我重新启动服务器时,EFS 没有被挂载,我保存重新挂载它

我应该在这里做什么?

为了使用 efs 文件系统类型,我相信您需要安装 amazon-efs-utils 包。这将安装额外的依赖项。

遇到此问题的任何人,

而不是

fs-xxxxxxxx:/ /mnt/efs efs defaults,_netdev 0 0

使用

{target_ip}:/ /mnt/efs nfs4 defaults,_netdev 0 0

这对我来说很好用,它会自动挂载到新创建的实例上

要使用 NFS4 解决此问题,请按照以下说明操作:

在您的 AWS 账户上,注意以下事项:

1) 进入你的EFS管理界面,你应该EFS_WHATEVER...旁边有一个小三角,点击展开。

2)注意屏幕正中间有个"DNS Name",会说:"fs-1234567c.efs.us-west-1.amazonaws.com",注意往下,这是你后面要用到的挂载点在。

3) 默认情况下,如果您刚刚创建了新实例,那么您必须允许您的服务器看到它,因为防火墙阻止了您的连接,尝试连接将会冻结。允许向下滚动直到您看到您的安全组,这类似于 sg-abcdef

4) 进入您的 EC2 服务器,select 您希望它访问您的 EFS 的服务器,然后单击它的 "security groups",它应该会带您进入安全组管理屏幕,记下它的安全组 ID(这是 sg-12345)

4) 现在,清除 VPC 管理屏幕的过滤器以查看所有 SG...

5) 输入您的 EFS 安全组(即 sg-abcdef)并单击搜索按钮,这应该会显示 EFS ACL

6) 点击 "Inbound Rules" -> 编辑..

7) 点击列表中的"ADD"和select "EFS",输入你服务器的SG(即sg-12345),如果你愿意,可以将其描述为"Server XXX access" .

8) 现在服务器应该可以看到 EFS 挂载,

9) 以 ROOT 身​​份 运行 进入您的服务器并安装必要的组件:

apt-get 安装 nfs-common

10) 现在,要测试 MOUNT,创建一个新目录...类似于:mkdir /mnt/heider

11) 使用以下命令挂载 FS:

mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-1234567c.efs.us-west-1.amazonaws.com: / /mnt/heider

请注意,您的 fs-12345c..... 取自您上面提到的 DNS 名称。

12) 如果这项工作很好,请转到下一步,否则请修改上面的内容,看看是否遗漏了什么。

13) 现在要自动挂载它,您需要:

14) 编辑 /etc/fstab

15) 添加以下内容:

fs-1234567c.efs.us-west-1.amazonaws.com:/ /mnt/heider nfs4 defaults,_netdev 0 0

16) 保存文件并退出

17) 在 Linux 命令中 shell 输入: 挂载-a

这将测试挂载,如果挂载好了,重启会自动挂载。

18) 这应该会自动挂载。

19) 重启测试,应该都可以了。

希望对您有所帮助。

我 post 在这里提供更详细的解决方案,因为该线程似乎显示在搜索引擎相关查询的顶部附近。

有两种挂载 Amazon EFS 的方法:"Amazon EFS mount helper" (amazon-efs-utils) 和 "NFS client" (nfs -utils).

下面的示例显示了如何使用每种方法手动和自动安装。使用前,将文本 [value] 替换为您自己的值。

===============

要使用 "Amazon EFS mount helper" 手动挂载,请发出以下命令格式:

sudo mount -t efs [fs-XXXXXXXX]:/ /path/to/mount/dir

=====

要使用 "Amazon EFS mount helper" 自动挂载,请将以下行插入 /etc/fstab

[fs-XXXXXXXX]:/ /path/to/mount/dir efs defaults,_netdev 0 0

=====

要使用 "NFS client" 手动挂载,请发出以下命令格式之一:

当您在 EFS Web 控制台下单击以查看有问题的弹性文件系统 ID 时,请使用 "Amazon EC2 mount instructions (from local VPC)" 给出的命令说明。

sudo mount -t nfs4 -o nfsvers=4.1,rsize=XXXXXXX,wsize=XXXXXXX,hard,timeo=XXX,retrans=X,noresvport [fs-XXXXXXXX].efs.[REGION].amazonaws.com:/ /path/to/mount/dir

sudo mount -t nfs4 -o defaults,_netdev [fs-XXXXXXXX].efs.[REGION].amazonaws.com:/ /path/to/mount/dir

=====

要使用 "NFS client" 自动挂载,请将以下行插入 /etc/fstab

[fs-XXXXXXXX].efs.[REGION].amazonaws.com:/ /path/to/mount/dir nfs4 defaults,_netdev 0 0

===============

鉴于上面的示例格式,您注意到您的问题了吗?

以为您已经"Amazon EFS mount helper"安装了,但是根据您在第一个评论回复中post编辑的手动安装命令格式(未打开post),您实际上只在系统上安装了 "NFS client"。您在 /etc/fstab 中使用 "Amazon EFS mount helper" 格式来自动挂载,但对您有用的手动挂载命令是 "NFS client" 格式。由于您的系统没有安装 "Amazon EFS mount helper",它不理解 /etc/fstab 中的自动挂载格式,因此自动挂载它对您不起作用。

您在上面 post 编辑的适用于您的手动挂载命令仅适用于 "NFS client",不适用于 "Amazon EFS mount helper"。

mount -t nfs4 -o nfsvers=4.1 ...

注意上面的-t参数是nfs4,这是"NFS client"的格式。如果您使用 "Amazon EFS mount helper",-t 参数应该是 efs.

要解决此问题,您可以使用 Amazon EFS 挂载帮助程序 (amazon-efs-utils) 或 NFS 客户端 (nfs-utils),但命令格式(在CLI或/etc/fstab中)和使用的挂载客户端应该一致。

换句话说:

"Amazon EFS mount helper" <=> efs CLI 和 /etc/fstab

"NFS client" <=> nfs4 CLI 和 /etc/fstab

===============

挂载客户端软件安装说明:

=====

如果您想使用 "Amazon EFS mount helper",请使用以下适用于 Amazon Linux 和其他发行版的安装说明:

https://docs.aws.amazon.com/efs/latest/ug/using-amazon-efs-utils.html

=====

如果您想使用 "NFS client",请在您的 EC2 实例上使用以下安装说明:

在 Red Hat Enterprise Linux 或 SUSE Linux 实例上,包括 Amazon Linux,使用此命令:

sudo yum install -y nfs-utils

在 Ubuntu 实例上,使用此命令:

sudo apt-get install nfs-common

=====

安装安装客户端软件后,使用上面相应的安装说明 post。