我目前使用 rsync 和硬链接进行备份。我每年都会创建一个新的完整版本,然后每天都会增量。我喜欢在普通文件管理器中浏览它的方式,而且访问速度相当快。我不喜欢创建硬链接所占用的时间和空间。我也想要压缩(但在某种程度上,损坏只影响单个文件)。如果我可以将其存储在不支持 Linux 属性(例如云存储)的文件系统中,那就更好了。
我做了一些研究和测试,并学到了一些东西。首先,我发现squashfs满足了我除了增量之外的所有需求。它单独压缩每个块(但它将我的主目录压缩到原始大小的 70%),因此损坏仅影响少量数据。它也可以存储为普通文件,并且仍然可以包含linux属性。它还可以挂载,并支持随机访问。为了解决增量备份的剩余需求,我研究了覆盖文件系统。我决定使用 aufs,因为它支持多个分支,而且看起来使用起来很简单。
我考虑的备份方式是:
- 在备份驱动器上,我将有三个文件夹:
- 一个工作文件夹(使用 rsync 与计算机同步几次,这样我就可以进行原子备份)
- 临时文件夹(用于存储临时安装点)
- 备份文件夹:
- 将完整的年度快照存储为squashfs,名称具有以下模式:
full-${unix_timestamp}.squashfs
- 根据最近的完整快照存储每月增量快照,其模式如下:
full-${unix_timestamp_of_full}-differential-${unix_timestamp}.squashfs
- 存储基于前一天直至最近一个月的每日增量快照。这将被命名为:
daily-${unix_timestamp_of_monthly}-incremental-${unix_timestamp}.squashfs
- 备份过程如下所示:
- 运行
rsync -axvh --delete /home /backups/work/
几次(并排除缓存和垃圾) mkdir /backups/temp/overlay
- 将所有相关的每日、每月和完整备份挂载到以下位置的挂载点中
/backups/temp/
- 将 aufs 挂载到,
/backups/base
所有的 squashfs 挂载为 ro,覆盖层为 rw - Rsync 工作目录覆盖,比较目标是
/backups/base
- mksquashfs 覆盖到相关每日增量
- rm 覆盖目录
- 卸载所有东西
- 运行
- 浏览只会执行备份过程中的 aufs 安装部分,直到我想要浏览的日期为止
这是可行的吗?或者我会遇到任何重大问题(例如 aufs 性能问题)吗?我的想法听起来不错吗?
如果我的想法没有重大问题,我计划编写一个脚本来自动化此过程。