我们正在为 Lonux 服务器使用基于 rsync 的备份,这真是太棒了。我们将所有 Linux 服务器 rsync 到我们大型的 Linux 基础 samba 文件服务器上。不幸的是,该服务器已经完全过时,并已迁移到 Active Directory。
现在我被从 Linux 服务器进行增量备份的问题所困扰。我特别喜欢 rsync 如何复制已修改或已删除的文件。
现在我想将 Linux 备份到 Windows 服务器上。
我查看了备份解决方案,但几乎所有解决方案都基于 rsync。我寻找适用于 Windows 的 rsync(Cygwin 或 Microsofts SFU(适用于 Unix 的服务))。但似乎它不起作用。
为了正确地同步所有者和权限,实际上需要文件系统中的两个整数和一些标志。虽然 NTFS 理论上提供了这些,但 SFU 和 Cygwin 确实会尝试将其映射到现有用户。
此外,SFU 的 rsync 似乎不可靠等等。
在我们当前的服务器上,我们根本不关心任何映射:如您所知,Linux 服务器仅在文件系统中存储两个整数(在简单情况下),没有像 Windows 那样特定于机器的长 SID。它们的含义由 /etc/passwd 定义。如果缺少它,它只是整数。但如果它回到服务器上,它就会再次工作。
有谁找到了解决这个问题的好办法吗?
我甚至查过 UMSDOS,Linux 以前可以存储在 FAT16 上!它使用具有长文件名映射和 unix 权限和属性的文本文件。不幸的是,它已从内核中删除。否则,我可以使用 CIFS 安装将共享安装在新的 Windows 文件服务器上,并在其上分层 umsdos。不幸的是,类似的东西不存在。
为什么我不想使用 tar?因为我真的很喜欢我们的 DPM 服务器逐步备份我们的 Windows 文件服务器的方式,而且我不想完全备份所有内容的整个 tar 文件!
答案1
因此,听起来您真正的问题是您想保留所有者和组设置,但又想将数据迁移到想要将设置映射到其自身设置的系统。您还想保留使用 rsync 获得的最小数据传输设置,但从“这里”到“那里”可能需要比您想要投入的更多的时间和精力。Tar 可以解决这个问题,但它需要每个文件的完整映像,而不是增量。
总结一下:您需要某种东西来产生改变数据的增量,但保留像 tar 这样的属性,而忽略目标系统的用户映射(因为没有共享帐户)。
商业解决方案
第一个(可能不可行)选项是查看 Windows 中是否有适用于您所使用的系统的备份客户端。例如,回顾包括 OS X 和 Linux 客户端,允许 Windows 计算机备份带有属性的文件。我的工作已经使用这种安排几年了,除了客户端的一些 I/O 峰值外,它一直像宣传的那样工作。看看是否有一个可以安装在 Linux 机器上的客户端,可以让您“弥合两者之间的差距”,这样您就不必担心这个问题了。注意:我注意到您没有发布您正在使用什么样的备份解决方案,这意味着如果您使用原生 Windows 备份(ick),您就倒霉了。
开源解决方案
这是一件非常疯狂的事情:在 Linux 端启动 Samba 服务器,设置一个共享供管理员使用(隐藏、仅供管理员使用等),映射共享或在 Windows 备份服务器上使用 UNC 路径,然后从共享进行备份。是的,您的 SID 不匹配,等等(因为 AD<->passwd 之间没有映射),但这并不重要,因为Samba 将为您进行翻译,无论是在备份还是恢复期间。缺点是您需要定期备份 Samba .tdb 文件,以确保您不会丢失任何设置,以及 /etc/passwd 中的用户映射等。您还需要设置此共享很小心,因为错误的设置会导致文件重新映射到不同的值。这里的概念是,我们将 Samba 变成一个粗略的“备份客户端”,可以以与 Windows 一致的方式进行访问。它还假设您的备份软件将处理您想要的任何增量/压缩功能...
与商业解决方案不同的是,它具有能够与内置 Windows 备份一起使用的额外好处,因为共享似乎只是另一个 Windows 服务器 UNC。
第二种解决方案@Brent 已经提到过,值得研究。这比我给出的方法要高出几个步骤。与其抄袭他的帖子,去读一下反而。
自主研发的解决方案
一种解决方案是将元数据(所有权属性)与数据分开,并将两者传输到服务器。为此,将设置存储在单独的点文件中,然后将点文件与内容一起传输。这将允许您使用 rsync(如果您选择)同时保留设置。作为额外的好处,rsync 也会将相同的增量传输机制应用于点文件。在恢复期间,您可以通过从点文件中提取设置并将其应用于目录内容来逆转该过程。这很耗时,并且浪费了一些磁盘空间,但它简单的(您可以看到正在发生的事情)并且耐用的(它只是文本文件,所以很容易修复),简单有时是最简单的方法,即使它看起来像“蛮力”。 我会选择这个作为你的最后选择。 您不仅会遇到竞争条件(如果您尝试在脚本运行时启动备份,那么点文件是否会在备份之前及时更新?),而且您还需要手工制作所有内容。
您只需要三个脚本 - 一个用于为每个设置重新生成每个目录中的点文件,一个用于恢复它们,一个用于在不需要时清除点文件。
在生成/创建时:将点文件存储在点文件所属的每个目录中。点文件本质上包含一个,ls -la
以便捕获属性。将点文件的所有者设置为 root,以将恶作剧降至最低。处理完该目录后,让它返回并从点文件中提取每个目录(简单的 grep 就足够了),然后通过让脚本调用自身递归进入每个子目录。完成后,您开始的目录的整个分支将拥有每个目录的所有点文件。在备份之前运行此脚本以“重新生成”和“刷新”您的设置,或者如果可能,与备份脚本本身一起按顺序运行它,以确保它在备份开始之前完成。
恢复时:恢复脚本会将所有点文件重置为正确的所有权(再次防止恶作剧),然后递归处理每个目录中的点文件,恢复每个文件的设置。每个点文件将需要 3 次传递,一次用于所有者组世界,一次用于命名所有者,一次用于命名组。文件操作通常不会太糟糕,所以这应该非常快,除非目录非常大,文件太多。
清理:简单,递归每个目录删除点文件。
是的,这是一个丑陋的黑客行为。如果我能很快找到更好的答案,我会重新编辑。在此之前,它解决了问题。
答案2
不确定您是否真的想继续使用 rsync,或者只是保留增量备份的好处。
如果您只想要好处,多平台备份系统(如 bacula)可能是一个不错的解决方案。它只会进行增量备份 - 如果您想要的话 - 但它会将所有内容存储在一个(或几个)大文件中(而不是原始文件的镜像)。同样,不确定这是否是您想要的。