随着 btrfs 本月在 Oracle EL 14th 中投入生产(以及运行 fsck 和从 Linux 3.2 中清理),我正考虑重新设计我当前的备份解决方案以利用它。请注意,我考虑针对少量数据(少于 10TB)执行此操作,这些数据相当稳定(每天变化不到 1%)。简而言之,这是一种 SMB/SOHO 备份解决方案。
备份应该做什么:
- 在生产服务器上对 ext[234]/XFS/JFS 进行 LVM 快照
rsync
/将更改的数据转移到备份服务器上的 btrfs- 对 btrfs 文件系统进行快照
- 当可用空间不足时删除旧快照
优点:
- 所有文件均可轻松获取,无需解压或循环安装
- 过去的快照也很容易获得......
- ...这样我就可以将它们作为只读 Samba 共享进行共享(支持影子复制)
- 由于写时复制,快照占用的空间极小(没有变化的快照在磁盘上仅占用几 KiB)
- 高备份一致性:文件校验、所有数据清理和内置冗余
问题:
- 是否存在某种备份解决方案(以 Bacula、BackupPC 等形式),可以或可以轻松地感知写时复制文件系统?
- 或者我需要使用家庭
rsync
解决方案? - 拥有专用于备份的 ZFS 盒的人们如何备份他们的 Linux 机器?
答案1
上周,我广泛搜索了类似的问题。我没有找到可以完成所有 4 个步骤的解决方案。许多家庭用户在博客中尝试了“rsync 到 btrfs' 类型的备份,并且所有主要的 Btrfs wiki 都介绍了如何执行 Btrfs 快照。
还有不少人正在尝试不同的方式 旋转 Btrfs 快照。不过,你是我见过的第一个想根据磁盘空间轮换快照的人。我正在玩btrfs-快照我自己创建了一组每小时、每周和每月的快照,它非常简单。
这迪尔维什项目似乎满足了您的许多要求。一些开发人员正在尝试整合 Dirvish 与 Btrfs。 但是,那Dirvish 项目似乎有点停滞。
此时,您已经领先了。
答案2
据 Avi Miller(他在 LinuxConf.AU 上的演讲)称,btrfs 发送/接收功能正在开发中。它将比 rsync 更快,因为它不需要遍历目录来查找文件中的更改。不过,我不知道是否有预计的发布日期。
但是,btrfs-progs 中有一个内置实用程序,可以列出快照/等之间发生变化的每个文件。btrfs subvolume find-new
答案3
我正在开发一个类似于 BackupPC 的 OS 备份系统。我考虑过这个问题。阻止我真正实现这一点的原因是,您无法在子卷之间进行硬链接。您还只能创建子卷的快照 -> 每个备份客户端一个子卷。因此,文件级重复数据删除功能不能与此方法共存。而且文件级重复数据删除通常可以节省大量空间。您想只备份一台服务器吗?
如果 btrfs 具有块级重复数据删除功能,则可能可以避免此问题,但通常也会慢得令人难以忍受……
那么这种方法当然需要与一个文件系统(btrfs)紧密集成,所以这应该是一个可选功能。
我之所以问这个问题,是因为我正在考虑添加这样一个牛功能,但不知道是否应该这样做,因为存在上面列出的缺点。
答案4
我也有类似的挫折,所以我最终创建了一些脚本,我称之为蛇蝎。它们共同提供快照、修剪、测量和通过 ssh 传输(但截至今天,也可以向/从本地文件系统发送/接收)。测量只是快照路径的 sha512sum 和 PGP 签名的报告。它尚未准备好发布,但如果有人有时间在这个早期阶段对其进行审查,我很乐意听到反馈。
此时仅限 CLI,但我花了一些时间使其易于在具有许多 btrfs 子卷的系统上使用 - 通常我有单独的子卷/var/cache
,/home
等,可能需要从快照中排除或具有更多/更不积极的修剪计划。
恐怕修剪算法纯粹是根据快照集及其日期的存在来做出决定的,在满足磁盘使用约束之前,没有什么可以继续修剪的——您先删除哪个?先减少小时数,还是先减少日数?也许删除最旧的,例如年度?不同的部署将有不同的优先级;我不知道这是唯一的备份层(在这种情况下,出于法律/保险义务,您不应该删除最旧的备份),还是只是一个中间层(在这种情况下,您可能将这些年度存档在其他地方安全的地方)。
我将在某个时候添加 ZFS 支持和/或互操作性;由于目前强烈希望“零”依赖性,它主要用 posix-ish shell 和 perl 编写,我希望在某个时候能有一个更干净的 python 替代实现并行维护。