问题描述
我有一个带有 s3fs 挂载的 EC2 服务器。
我注意到如果我尝试更改权限或所有者需要 40 多秒到 1 分钟。
$ ls -ltr directory
-rwxrwxrwx 1 apache apache 6444069321 Feb 6 15:54 big.zip
-rwxrwxrwx 1 apache apache 6444069321 Feb 6 16:12 big_1.zip
$date
Sat 6 Feb 17:30:43 UTC 2021
$ chown apache:apache big.zip
$ date
Sat 6 Feb 17:31:07 UTC 2021
但是如果我在 Linux 服务器上做同样的事情,更新它需要几分之一秒。请告诉我建议以加快速度。
解决方法
S3FS 试图让 S3-Bucket 作为本地文件系统的一部分出现,就好像它是常规块存储一样,事实并非如此。
S3 是对象存储,这意味着如果您想编辑对象的一部分或对象上的元数据,您需要覆盖整个对象,这在时间上很昂贵。
您更改存储在 S3 中的文件的所有者会转换为 S3 中 object metadata 中的更改。对象元数据不可变,这意味着需要重新上传整个对象并附加新的元数据。
这与基于块存储的常规文件系统的工作方式有着根本的不同。在这种情况下,它只需要将单个块(通常大约 4KB-16KB)写入您设置位时更改的磁盘。使用 S3,您需要重新上传整个对象。
这是 S3FS 是 leaky abstraction 的情况。
如果您需要在多个 EC2 实例之间共享存储,弹性文件系统 (EFS) 是更好的选择,您应该考虑一下。您描述的操作会快很多。