批量修改 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。
➡️