在 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。
我创建了一个 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。