备份数据同时保留 POSIX ACL 和权限

备份数据同时保留 POSIX ACL 和权限

我正在寻找一种实用的方法来备份服务器中的数据并保留所有 ACL 和权限。我查看了 tar,但根据 Google 的说法,tar 不会保留 ACL。我知道 rsync 可以保留 ACL 和权限,但前提是目标系统支持 POSIX ACL 并具有相同的用户。就我而言,我正在将备份执行到位于 AFS 上的目录,因此不支持 POSIX ACL。

目前,我已经通过编写一个脚本解决了这个问题,该脚本使用 find 递归遍历系统(我使用 find 是因为我想排除一些目录)并将权限和 ACL 保存到文本文件中。此解决方案有效,但速度非常慢。有没有更好的解决方案?

答案1

apt-get install star
man star
star -acl -whatever -other -options -you -need

Star 是支持扩展 POSIX 标头的 tar,也就是说,能够在 tar 文件中存储有关文件的一些额外数据。该-acl选项获取 ACL;您需要它来创建和提取存档。

答案2

如果您不想安装其他程序,您可以单独备份 ACL:

getfacl -R somedir > acls.txt

这会将所有 ACL 转储到somedir文件中acls.txt

要恢复,请使用:

setfacl -R --set-file=acls.txt somedir

答案3

除了星号之外,您还可以使用布斯达

答案4

在这里交叉发布我的答案:https://unix.stackexchange.com/a/725745/550161


当创建/提取档案时,你需要使用--acls --xattrs选项,当然也有适当的权限来读取/写入这些

例子:

1.创建档案:

ZSTD_CLEVEL=19 tar --acls --xattrs -caPf systemd-network-conf.tzst --directory=/etc systemd/network systemd/networkd.conf.d

上述操作将创建一个zstd压缩tar档案,使用压缩级别19,同时保留 ACL 和扩展属性。

  • 扩展.tzst意味着“归档使用压缩”,tgz就像'ed 版本等
  • 隐式压缩器使用的压缩级别由同一行开始时zstd提供的环境变量设置。ZSTD_CLEVEL
  • 参见手册页:tar(1)zstd(1)

2. 提取该档案:

sudo tar --acls --xattrs -xvf systemd-network-conf.tzst

上述操作将在您当前目录中创建一个名为的子目录,systemd因为这是档案库内的公共根目录。

  • 您使用以下方式设置的所有设置//在原文中,将会保留在提取的版本中。

3. 比较原始文件和提取的文件属性。

{cd /etc; getfacl -R systemd/network systemd/networkd.conf.d} >original.acl; cd -
getfacl -R systemd/network systemd/networkd.conf.d >extracted.acl
diff -u original.acl extracted.acl
  • 您应该看不到前两行的输出,因为它被重定向到文件。
    (第一行除外,它将输出您当前的目录,因为最后一条cd -命令是单独的,它仅恢复您当前的目录。)
  • 您也不应该看到 diff 行的输出,因为没有区别。

相关内容