批量修改 AWS S3 挂载目录下文件权限

💡 原文中文,约2700字,阅读约需7分钟。
📝

内容提要

在服务器上挂载的 S3 类似对象存储中,由于文件数量过多,需将文件权限改为 644,导致系统负载高。解决方案是修改挂载参数,设置 umask=022,并指定 uid 和 gid。重新挂载后,文件权限正常,但新建文件的所有者由挂载参数决定。修改挂载会影响 Docker 容器,需重启容器以避免错误。权限信息存储在 S3 对象的元数据中。

🎯

关键要点

  • 服务器上挂载了 S3 类似的对象存储,用于存放网站的图片。
  • 需要将挂载目录下的所有文件权限改为 644,但系统负载很高。
  • S3 是对象存储,执行 chmod 时需为每个文件发送网络请求,导致高负载。
  • 解决方案是修改挂载参数,添加 umask=022,并指定 uid 和 gid。
  • 需停掉相关 Docker 容器,卸载目录,修改挂载参数,重新挂载,再启动 Docker 容器。
  • umask 的作用是规定“不允许”出现哪些权限,权限通过从“满权限”中减去 umask 的值计算。
  • 新建文件的所有者由挂载参数决定,umask 只影响权限,不影响所有者。
  • 修改挂载参数后重新挂载会影响 Docker 容器,需重启容器以避免错误。
  • 权限信息存储在 S3 对象的元数据中,包括存储权限位、所有者的 UID 和组的 GID。

延伸问答

如何批量修改 AWS S3 挂载目录下文件的权限?

可以通过修改挂载参数,设置 umask=022,并指定 uid 和 gid,然后重新挂载目录来实现。

为什么在修改 S3 挂载目录文件权限时系统负载会很高?

因为每个文件的 chmod 操作需要发送网络请求,8 万个文件意味着需要进行 8 万次网络往返,导致系统负载高。

修改挂载参数后对 Docker 容器有什么影响?

修改挂载参数后需要重启 Docker 容器,否则容器内部可能会看到空目录或遇到失效的文件句柄错误。

umask 的作用是什么?

umask 是用户文件创建掩码,用于规定不允许出现哪些权限,通过从满权限中减去 umask 的值来计算文件权限。

新建文件的所有者是如何决定的?

新建文件的所有者由挂载时的参数决定,而不是由 umask 决定,umask 只影响文件权限。

S3 对象的权限信息存储在哪里?

权限信息存储在 S3 对象的元数据中,包括存储权限位、所有者的 UID 和组的 GID。

➡️

继续阅读