CentOS 下有几台服务器,上面有 PHP 项目,任务是为它们创建一台(或多台)服务器,用于存储所有服务器上所有项目的未压缩文件的昨天版本,同时同步用户列表并授予他们访问相应文件夹的权限,就像在原始服务器上一样。这个任务似乎并不难?我能想出哪些实施方案:
- 创建一个公共备份服务器,每晚使用 rsync 复制每个服务器的项目文件 + 组 + 用户。但在这种情况下,用户 UID 会出现问题;需要在备份服务器上重新分配它们,并更改文件的所有者。并且不知道 rsync 将如何对不同的所有者做出反应,因为如果它每次都下载整个文件,那么这个选项是不可接受的。
- 根据源服务器的数量创建备份服务器,每晚使用 rsync 复制所有项目文件 + 组 + 用户。文件上的用户和组的 UID 将是正确的,但是,需要手动将备份分区拆分为几个小分区,以便将它们挂载到不同的服务器。并在必要时手动调整它们的大小。我不想增加备份服务器的数量。
- 为此使用 svn/git,并为每个项目创建单独的存储库。可以存储所有项目的完整更改历史记录,但此选项也存在缺陷,至少从用户同步开始,到需要创建可能已存在于客户端项目中的 .git/.svn 目录结束。
有人遇到过类似的任务吗?也许有一些开源项目可以实现所有必要的功能?谢谢!
答案1
备份保护存储用于将文件恢复到原样。是的,这包括所有者和权限等元数据。
我将添加一个额外要求,即备份存储的某些层级尽可能难以更改。也称为勒索软件保险。冷存储介质如磁带。拉动备份方法是备份系统下载数据,被备份的主机无权更改备份。关于人员,只有备份管理员应该有可以登录保护存储的用户,其他人都不需要能够触摸它。
您的文件复制想法意味着备份服务器与拥有文件的每个用户同步。例如加入到中央用户目录。虽然这对于 rsync 目标、快照装载主机或文件共享主机来说很不错,但很难与我的隔离保护存储想法配合使用。并且在没有强大的用户 ID 管理的环境中,这可能会出奇地混乱。测试用户名在此类卷上的保存方式。例如,请注意rsync 将尝试映射名称,但可能会回退到数字 ID。数字 ID 可能适用于恢复回同一主机,但是将文件复制到具有 uid 冲突的其他主机时该怎么办?
另外,考虑一个可以在其档案中记录用户名的备份软件。例如,tar 将记录此信息,并且某些版本还可以包含 ACL。然后,档案可以存储在任何 blob 存储中。如果需要,可以将来自不同主机的许多档案存储在非常大的保护存储中。不推荐使用 tar 而不是其他任何软件,只是指出,存储元数据的容器已经存在很长时间了。
版本控制系统不适合备份。我不想合并历史记录并解决冲突,我想要更简单的方法,即存储这棵树。git(无扩展名)不保留文件所有者或权限,这不符合要求。此外,某些版本控制系统会一直保留对象,直到它们被引用,这使得删除超过几天的备份变得复杂。
与往常一样,通过恢复来测试备份。抽查恢复的完整性,并了解恢复需要多长时间。