我想从机器执行增量备份(针对整个文件系统)。rsync
这样做会吗,但是我还想保留文件所有权-意思是,可以恢复它。
如果不在rsync
目标机器上以 root 身份运行(存储备份),是否可以这样做?
一些想法...
- 有没有办法以允许
chown
非 root 用户的方式挂载文件系统(FUSE?)?(我想可能需要noexec
禁止抬高。) - 某种方式来存储和恢复元数据文件而不是文件系统本身的所有权?
tar
可以存储文件所有权,但让它与 rsync 或增量备份一起使用会更复杂一些。能够像常规文件系统一样浏览备份也很好。- 也许某种假根环境?虚拟机可以工作,但最好避免相关的维护和性能开销。
如其他答案所述,要直接保留所有权信息,您需要对目标计算机具有 root 访问权限。
但是,您至少有两种解决方法可以在保留所有权的同时避免 root 访问:
--fake-super
rsync 选项。从手册页:这意味着所有权不是直接保存在经典的 Unix 风格中,而是所有权信息存储在一个特殊的扩展属性中(即:一种附加到文件的“标签”)。还原时,
rsync
可以使用此 EA/tag 正确重建原始文件所有者。getfacl
实用程序保留它们。例如,发出getfacl -R MNTPOINT > acls.txt
您有效地将所有权(和 ACL)信息保存在文本文件中,以后可以使用该setfacl --restore
命令恢复此类信息。如果我是你,我会将备份放在 Docker 容器中的卷上。这样,您可以对其进行良好的限制并避免安全风险,但仍以 root 身份运行它,以便它完成它需要做的事情。
与其像 rsync 那样一个接一个地复制所有文件,您应该考虑将文件放在某种“容器”中,这样您就可以打包所有文件,传输它们,并且永远不会丢失任何元数据。
你考虑过“焦油”吗?我知道 tar 是 rsync 的对立面:它不是增量的,它不会在任何地方传输数据,等等。
然而,它非常擅长保留所有权、权限、ACL、修改时间等。您可以制作一个 tar 文件,将其复制到甚至不了解 Unix 执行文件权限的方式(即 Windows、TOPS-20、VAX/VMS)的机器上,然后将其复制回 Unix 主机,解压缩它,并且您获得了它最初拥有的所有权限等。
有一个 FUSE 文件系统可以挂载(只读)tar 文件。
当然,您会失去使 rsync 成为如此出色工具的增量副本和其他功能。然而,在 rsync 发明之前,Unix 世界使用 tar 已有 20 多年了,它在某些情况下工作得非常好。
我假设当您说“没有在目标上以 root 身份运行 rsync”时,您确实遇到了无法以 root 身份建立与目标的连接的问题 - 对吗?换句话说-您的字面意思不是“不以root身份在目标上运行rsync”-而是您真正的意思是“不以root身份与目标建立(自动)连接”-众所周知,这既困难又危险要做的事。
假设是这种情况(可能是),一种解决方案是使用管道。
这个想法是在目标机器上创建一个管道,该管道由将在备份中发送的非 root 登录拥有,并将备份流写入该管道。
然后,在同一台机器上,您对其进行设置,使其运行一个根进程,该进程从管道中读取数据并恢复备份。
例如(例如使用 tar)- 在机器上提取备份:-
在机器上发送备份:
您也可以以其他方式执行此操作(将管道放在另一台机器上),如果您希望备份服务器启动备份过程,这可能会很方便(因为要备份的机器将阻塞,直到另一台服务器从管道中读取)。
一种解决方案可能是在远程位置创建磁盘映像并将其安装在本地:
现在我们可以在本地机器上以 root 身份运行 rsync:
显然,要从目的地获取“根”文件,您需要根访问权限。但是,有很多方法可以破坏您的系统。
1)您可以允许 rsync 使用 sudo 没有密码 2)您可以使用 setuid 来 rsync 以便它可以访问根文件,而备份编排器是普通用户而不是根用户。3)使用rssh来限制以上所有的安全风险