将 unix 文件备份到不允许 chgrp/chown 等的文件系统

将 unix 文件备份到不允许 chgrp/chown 等的文件系统

不幸的是,我别无选择,只能将一些文件从服务器上的 ext3 分区备份到文件系统,而这个文件系统不允许我设置和编辑常规文件属性(NFS,设置了 all_squash,因此 chgrp/chown 等,即使 root 被禁止)。我计划使用 rsnapshot 进行实际备份,因为我已经熟悉它,而且它在其他场景中运行良好。

显然,我希望以某种方式保留这些备份的权限、所有权和其他属性,即使它不直接与文件本身保留。在我看来,这留下了三个选择:

  1. 在远程 NFS 空间上创建一个环回文件系统。
  2. 单独转储其他属性。
  3. 使用 FUSE 文件系统作为覆盖来伪造这一点,通过写入 /backup/.permissions/ 或其他额外文件。

以下都不是理想的情况:

  1. 我想使用外部文件存储来使用自动挂载,但自动挂载不允许像这样的递归挂载(据我所知)。
  2. 使用 shell 脚本似乎不太容易做到这一点。使用find+stat会有些浪费,但更重要的是从该信息中恢复会很麻烦。我可以编写一个小工具(用 C)来调用stat,将结构转储到文件中并从该结构中恢复相应的信息,但这似乎对于应该微不足道的事情来说是一项艰巨的工作。
  3. 我很惊讶没有任何东西可以做到这一点,但我似乎看不到任何合适的东西FUSE 文件系统列表,我认为这是相当权威的。

有什么建议吗?我倾向于解决方案 #3,除非它已经存在,或者 #2 比我想象的更简单。我想要一些简单而强大的东西,不需要重新发明轮子,但是如果它们真的有用,我愿意编写新的轮子。

答案1

您可以使用转储文件的属性getfacl -R * >perms.bak并使用恢复它们setfacl --restore=perms.bak

答案2

我的第一个建议是建立一个更传统的备份系统——巴库拉tar甚至是无聊的旧dump(8) & restore(8)——并将这些备份存储到压缩的 NFS 存储中。您仍然可以在本地使用 rsnapshot 作为“快速恢复”工具。
这里最大的好处是一种众所周知的、得到良好支持的备份方式,它更容易排除故障,并且并不真正关心底层存储是什么(因为就我提到的工具而言,它们只是使用 NFS 可用文件作为容器)。

除此之外,我认为您的下一个最佳选择是设置回环文件系统——这又回到了上面的容器隐喻——但正如您已经指出的那样,这远非理想。您可能可以结合使用 shell 脚本来处理回环文件系统的文件设备的安装/卸载(Automount可能在这里工作,但我不认为它会正确地“链接”安装,因为你似乎需要 - 即意识到你需要/nfs/file,并且/nfs是一个需要首先安装的自动安装挂载点)

答案3

为什么不直接将文件放入某个存档中?您可以直接将它们打包到 NFS 上。我使用 bacula 加密、存档并将我的文件传输到备份服务器。

答案4

今天,当我因为一个完全不相关的原因搜索 rsync 手册页时,我偶然发现了--fake-super选项

来自手册页:

启用此选项后,rsync 将通过附加到每个文件的特殊扩展属性(根据需要)保存/恢复特权属性来模拟超级用户活动。这包括文件的所有者和组...

这正是我最初问这个问题时所寻找的,尽管在发帖之前我不知道我在寻找什么。这巧妙地解决了问题,无需任何回送文件系统技巧、外部属性转储或 FUSE 黑客攻击。

相关内容