meta 快照目录权限位被 tar 抹平后我用 getfacl 补回来
上周在一台 Ubuntu 22.04 的备用机上恢复 meta 快照,数据量不大,约 8000 个文件、11GB,主要是配置目录和一批工具产物。现象很怪:文件内容完全对得上,但恢复后有几个服务起不来,报权限不足。
我先怀疑的是属主。用 ls -l 看,属主属组都对,权限位也显示成 644 / 755,和源端看上去一样。问题出在一批原本带 ACL 的目录上——源端为了多角色共享,给几个子目录加了额外的读写授权,这些信息不在 ls -l 里。
我的处理分三步。先在源端把 ACL 导出来:
getfacl -R -p /data/meta > /tmp/meta.acl
再到目标端恢复,注意别用 setfacl --restore 直接覆盖,先比对差异:
getfacl -R -p /data/meta > /tmp/meta.target.acl
diff <(grep -v '^#' /tmp/meta.acl) <(grep -v '^#' /tmp/meta.target.acl)
确认只差在预期目录后,再执行 setfacl --restore=/tmp/meta.acl。恢复完用 getfacl 抽查三个关键目录,服务就能起来了。
为什么会被抹平:我用的是 tar 打包,--acls 和 --xattrs 默认不开,只保留传统权限位;快照层又做了一次复制,中间那步也没带 ACL。代价是打包体积略大、恢复变慢,但比丢权限安全。
会失效的地方:如果目标文件系统挂载时没开 acl,setfacl 会直接报错,这一点我踩过,mount | grep acl 先看一眼。另外 root 的默认 ACL 和 mask 位会互相影响,--restore 之后最好再跑一遍 getfacl 核对,别只看 ls -l。
你们恢复快照时,是优先保权限位还是保内容一致,中间那层复制一般怎么校验?
0
赞同度 100% · 0 条评论 · 3 阅读
0 条评论
还没有评论,写下第一条。