我们正在为我们的 Lonux 服务器使用基于 rsync 的备份,这非常棒。我们将所有的 Linux 服务器同步到我们的大型 Linux 基础 samba 文件服务器上。不幸的是,该服务器已完全过时并迁移到 Active Directory。
现在我遇到了从 Linux 服务器进行增量备份的问题。我特别喜欢 rsync 如何复制修改或删除的文件。
现在我想在 Windows 服务器上做 Linux 备份。
我查看了备份解决方案,但几乎所有都是基于 rsync。我寻找 rsync for Windows(Cygwin 或 Microsofts SFU(Unix 服务))。但它似乎不会奏效。
为了正确地同步所有者和权限,文件系统中确实需要两个整数和一些标志。虽然 NTFS 理论上提供了这一点,但 SFU 和 Cygwin 确实试图将其映射到现有用户。
SFU 的 rsync 似乎也不可靠等。
在我们当前的服务器上,我们只是不关心任何映射:如您所知,Linux 服务器只在文件系统中存储两个整数(在简单的情况下),没有机器特定的长 SID,如 Windows。它们的含义由 /etc/passwd 定义。如果缺少,它只是整数。但如果它回到服务器上,它会再次工作。
有没有人为此找到一个好的解决方案?
我什至查找了 UMSDOS,Linux 曾经可以存储在 FAT16 上!!!它使用具有长文件名映射和 unix 权限和属性的文本文件。不幸的是,它已从内核中删除。否则,我可以使用 CIFS-mount 在新的 Windows 文件服务器上挂载一个共享,并在其上分层 umsdos。不幸的是,这样的东西不存在。
为什么我不想使用 tar?因为我真的很喜欢我们的 DPM 服务器如何逐步备份我们的 Windows 文件服务器,我不想完全备份整个 tar 文件!
所以听起来你真正的问题是你想要保留所有者和组设置,但将数据迁移到想要将设置映射到自己的系统。您还希望保留使用 rsync 获得的最小数据传输设置,但是从“这里”到“那里”可能需要比您想要投资的更多时间和精力。Tar 可以解决这个问题,但需要每个文件的整个图像而不是增量。
总结一下:您想要一些可以生成更改数据的增量,但保留 tar 等属性,忽略目标系统的用户映射(因为没有共享帐户)。
商业解决方案
第一个(可能是不可行的)选项是查看您在 Windows 中使用的系统是否有备份客户端。例如,Retrospect包括 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 也会对 dotfile 应用相同的 delta-transfer 机制。在还原期间,您可以通过从 dot 文件中提取设置并将它们应用到目录内容来反转该过程。这很耗时,并且浪费了一些磁盘空间,但它很简单(您可以看到正在发生的事情)并且持久(它只是文本文件,因此很容易修复),而且有时简单是最简单的方法,即使看起来" 我会选择这个作为你的最后一个选择。 您不仅会遇到竞争条件(如果您在脚本运行时尝试启动备份,点文件会在备份之前及时更新吗?),而且您还需要手工制作所有内容。
您只需要三个脚本 - 一个用于在每个目录中为设置重新生成点文件,一个用于恢复它们,一个用于在不需要时清除点文件。
在生成/创建时:在 dotfile 所属的每个目录中存储一个 dotfile。dotfile 本质上包含一个
ls -la
以便捕获属性。将 dotfile 的所有者设置为 root 以将恶作剧降至最低。处理完该目录后,让它返回并从 dotfile 中提取每个目录(一个简单的 grep 就足够了),然后通过让脚本调用自身递归地进入每个子目录。完成后,您开始的目录的整个分支将拥有每个目录的所有点文件。在备份之前运行此脚本以“重新生成”和“刷新”您的设置,或者如果可能的话,与备份脚本本身一起按顺序运行它,以确保它在备份开始之前完成。恢复时:恢复脚本会将所有点文件重置为正确的所有权(再次防止恶作剧),然后递归处理每个目录中的点文件,恢复每个文件的设置。每个 dotfile 需要 3 个 pass,一个用于 owner-group-world 的 pass,一个用于命名所有者的 pass,一个用于命名组的 pass。文件操作通常不会太糟糕,因此这应该非常快,并且会显示非常大的目录,其中包含 waaay-to-many 文件。
清理时:简单,递归删除点文件的每个目录。
是的,这是一个丑陋的黑客。如果我能尽快找到更好的答案,我会重新编辑。在那之前,它解决了这个问题。
不确定您是否真的想继续使用 rsync,或者只是保留增量备份的好处。
如果您只想要好处,多平台备份系统(如 bacula)可能是一个很好的解决方案。它只会进行增量备份——如果这是你想要的——但它会将所有内容存储在一个(或几个)大文件中(而不是原始文件的镜像)。同样,不确定这是否是您想要的。