![对远程服务器执行准确的快照和增量备份](https://linux22.com/image/26709/%E5%AF%B9%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%89%A7%E8%A1%8C%E5%87%86%E7%A1%AE%E7%9A%84%E5%BF%AB%E7%85%A7%E5%92%8C%E5%A2%9E%E9%87%8F%E5%A4%87%E4%BB%BD.png)
我有一些 Ubuntu(可能还有 RHEL)服务器,我想备份到中央备份服务器(通过 rsh/SSH)。我想做快照和增量备份。目标是,如果其中一台备份服务器突然挂掉,我可以安装引导映像,从备份中恢复,并且最好在之后立即启动并运行。
这些服务器具有唯一的用户和组,以及相同名称的一些不同的 gid 和 uid。我正在考虑 rsync(本地备份工作正常,并且我有细粒度的控制,因此我也可以备份 xattrs 和 ACL),但后来我意识到 rsync 到远程服务器可能不会按预期保留这些细微差别。
那么,有什么更好的方法来实现这一目标呢?有没有一个常用的包来实现这个目的?
答案1
是的rsync
可以选择保留 ACL、扩展属性、ext2 属性、硬链接、数字用户 ID、稀疏性...
我曾经有一个系统,将文件系统与btrfs
文件系统同步到备份服务器上(在备份服务器上执行快照),由于稳定性问题,迁移到 zfs-on-linux(不幸的是,它还不支持 POSIX ACL) ,但也有解决方法)。
rsync
您可能感兴趣的选项:--archive --one-file-system --xattrs --hard-links --delete --numeric-ids --sparse --acls
以及可能用于就地同步的选项。
rsync 不做的一件事是检测重命名(尽管有一个补丁,但我不确定它的可信程度,而且它只检测文件重命名)。
zfs
必须zfs send
仅发送自给定快照以来完成的修改(使用 到另一个 zfs zpool zfs receive
)。如果我理解正确的话,该功能btrfs
也是最近添加的。因此,如果将一个文件系统备份到最新内核上的btrfs
另一个文件系统上,这可能是一个选择。btrfs
答案2
看一下快照rsync
,它是命令行实用程序的 perl 包装器。 Rsnapshot 向 rsync 添加了一个额外的配置层,使增量备份变得容易。 (文件的旧版本在未更改时会硬链接到当前版本。因此备份文件系统的每个增量版本看起来都像完整副本。)
另一种类似的可能性是表里不一,它是基于librsync
.我知道它有一个更精美的用户界面,但我还没有使用它。或者rdiff 备份,我认为这是来自同一个开发者,或者至少曾经是这样。
当然有很多很多的备份系统。这是一个列表其中大部分可在 FreeBSD 上使用,其中大部分也可在 Linux 上使用。但我认为如果您习惯的话,我上面提到的三个是自然要考虑的rsync
。 (一个很棒的工具。)
答案3
编辑:谢谢大家!我现在知道了一些其他软件包可以完成这项工作,并且我对 rsync 内部结构有了更多了解。对于那些可能也想知道这一点的人,如果您使用 --numeric_ids 选项 rsync 到另一台计算机,它不会尝试映射或创建 UID/GID,它只会按原样传递它们。备份目录中项目的所有权可能看起来很奇怪,但在恢复时它将按 1:1 匹配(假设您恢复的部分内容涉及原始映射文件,如果您要恢复到新计算机)。
这是我现在用于完整系统备份的选项的详尽列表(通过 sudo 以 root 身份)。请注意, {{my_exclusions}} 是给读者的练习(我在使其正常工作方面仍然遇到一些困难)。另请注意 --link-dest... 的使用,如果目标上存在该目录,则将在先前备份中已存在的文件(在当前备份中未更改)的任何位置建立硬链接。
rsync \
--recursive \
--links \
--hard-links \
--perms \
--acls \
--xattrs \
--owner \
--group \
--devices \
--specials \
--times \
--one-file-system \
--partial \
--numeric-ids \
--compress \
--delete-during \
--stats \
--human-readable \
--progress \
--verbose \
--super \
--log-file=/tmp/my.log \
--link-dest=/backup/latest_backup \
--exclude={{my_exclusions}} \
--link-dest=/backup/latest \
/ \
{{remote_hostname_or_ip}}:/backup/new_backup