我们刚刚获得了一个 AWS 账户,我正在测试 EFS。我创建了一个 EFS,将其安装在 Amazon Linux 实例上,并将其设置为在 Samba 中共享。然后我能够将共享映射为 Windows 7 和 Windows Server 2012 中的驱动器,但与之相关的一切都非常慢(查看文件、创建文件、查看共享属性 - 一切)。我认为这是因为安装是 8艾克斯字节。
有没有办法在实例或 samba 中安装它时调整共享大小或将其分成更小的部分?
有没有办法直接调整 efs 的大小?我们永远不会使用 8 EB!
有没有办法判断除了尺寸之外,是否还有其他因素导致其速度变慢?
我们确实需要能够将其映射为 Windows 中的驱动器。
答案1
我们遇到了类似的问题,并找到了解决方案。我们能够将问题缩小到 SAMBA 未能及时报告 EFS 大小。更具体地说,samba 未能执行 sys_get_nfs4_quota(),大约 60 秒后超时。
为了解决这个问题,我们在 Samba 中添加了一个自定义脚本,可以立即报告 8 EB,而无需计算大小。鉴于这是无限的 EFS(理论上),报告的大小无关紧要,返回固定数字就可以了。这解决了 60 秒超时的问题。
为此,在 /etc/samba/samba-dfree 中创建一个文件并添加以下两行:
#!/bin/bash
echo "8000000000 8000000000"
然后在 samba 配置文件中,根据需要将以下参数添加到全局部分或特定的 EFS 挂载部分:
dfree command = /etc/samba/samba-dfree
dfree cache time = 60
保存配置文件。重新启动 SAMBA,延迟应该会消失。希望这能有所帮助。
答案2
EFS 在 IO 信用系统上运行,这些信用是根据您在 EFS 中使用的空间量全天不断生成的。
每次读取或写入 EFS 卷时,您都会消耗这些信用。如果您的余额中没有 IO 信用,则读取和写入将等待,直到您有为止。
我认为这很有可能,你已经用完了所有的信用,而后台 IO 不断消耗你的信用,导致性能非常糟糕。
您可以通过检查 cloudwatch 来检查 EFS 卷的信用额度。
再进一步说明一下。如果您在 EFS 磁盘上仅使用 1GiB,则每次以超过 50KiB/s 的速率读取/写入时都会消耗信用,而每次以低于 50KiB/s 的速率读取/写入时都会生成信用。
相比之下,如果 EFS 磁盘有 10GiB,您将能够维持 500KiB/s。
我正在将 EFS 与一项服务结合使用,发现我必须生成大约 80GiB 的原始无用数据,这些数据仅位于 EFS 磁盘上以生成足够的 IO 信用以允许我的应用程序使用共享。
我设置了一个云监视警报,如果我的信用额度低于阈值,它会通知我,这样我就有时间向 EFS 磁盘添加更多“无用数据”,以便我维持正常的性能。
我建议阅读亚马逊关于 EFS 吞吐量扩展的官方建议如果您认为这会影响到您。
编辑:AWS 现在支持 EFS 的预配置吞吐量,尽管这不会比上述方法节省任何费用,并且需要了解预期吞吐量,否则会高估使用量。有关详细信息,请参阅链接文档。
答案3
我在 Windows 上安装的 samba 共享中也遇到了类似的慢速访问。在 EC2 上,我获得了良好的性能(在浏览目录等时,访问时间至少为几分之一秒)。Windows 需要几分钟才能从安装驱动器的“我的电脑”/“这台电脑”视图访问 - 不过,一旦我进入目录,它似乎确实相当高效。
那么 - 这是不是像 Windows 试图找出 8 EB 文件系统的大小那样愚蠢的事情?
使用 cmd 似乎支持这一点。进入文件系统并运行“dir”,然后列出目录,然后经过长时间的延迟,然后出现“可用字节数”
我知道这不是一个答案,希望这对比我更有能力的人来说可能是有用的信息