快照大型变化文件

快照大型变化文件

在家里,我有以下备份方案:所有计算机每天 rsync 到服务器 $FULL_COPY 目录。服务器每天(也每周/每月)拍摄该目录的快照,最多保留 X 个快照。还使用rsync:

rsync -ar --link-dest=$LATEST_SNAPSHOT $FULL_COPY $NEW_SNAPSHOT

这很好用,自上次快照以来未更改的文件被硬链接。问题是大文件(准确地说是 Thunderbird 的收件箱),一个小更改就意味着文件的完整副本。我的快照很容易就有几 GB,但也许只有几 MB 发生了变化。

有没有更聪明的方法来做到这一点? (我的 $FULL_COPY 也被复制到远程计算机上,所以我不需要这种冗余)。我唯一的想法是支持快照的 CoW 文件系统。但这意味着对我的系统进行重大手术,而我不喜欢这样做。

答案1

我在这里写了一篇很长的文章,但它真的很简单,使用补丁。

像往常一样制作 $FULL_COPY,但对于 $NEW_SNAPSHOT,排除非常大的文件

现在,假设它是一个文件,并且该文件的路径是 /home/myuser/.mail/INBOX,您将运行:

rsync -ar --link-dest=$LATEST_SNAPSHOT $FULL_COPY $NEW_SNAPSHOT --exclude=/home/myuser/.mail/INBOX

这将大大减少拍摄快照的时间。

接下来,让我们填写路径以更加清晰。假设 $FULL_COPY 的“根”目录位于 /mnt/full 下,因此用户邮件目录的完整备份位于 /mnt/full/home/myuser/.mail/INBOX。同样,快照同样位于 /mnt/snap-mm-dd-yy 下。

然后,要仅获取收件箱的增量并将其放入有意义的位置的正确日期快照中,请运行:

diff -u /mnt/full/home/myuser/.mail/INBOX /home/myuser/.mail/INBOX > /mnt/snap-mm-dd-yy/home/myuser/.mail/INBOX.delta

这里你所做的是使用 diff 为完整备份邮件文件创建今天邮箱文件的补丁文件(diff 的 -u 选项可以做到这一点),并将补丁文件发送到可预测位置(即用户的该日期的 .mail 目录)。

最后,如果/当您因为丢失原始邮箱而需要将邮箱恢复到快照当天的样子时,请首先使用 $FULL_COPY 和 $SNAP_SHOT 将所有内容恢复到原始路径。然后,运行补丁程序来恢复 INBOX 增量:

patch < /mnt/snap-mm-dd-yy/home/myuser/.mail/INBOX.delta

就是这样。

笔记:

1) 如果您查看 INBOX.delta,前两行是旧文件和新文件的路径,因此如果您不想使用原始路径进行修补,可以对其进行编辑。

2)尽管三角洲每天都在变大一点,但它仍然比整体小得多。增加增量直到下一次完整将比创建多个补丁更有效地利用资源。

相关内容