启用btrfs的备份解决scheme

btrfs本月在Oracle EL 14上发布产品(连同来自Linux 3.2的fsck和scarbing),我正在考虑重新devise我当前的备份解决scheme以利用它。 请注意,我正在考虑less量的数据,less于10TB,这是相当静态的(不到1%每天更改)。 总之一个SMB / SOHO备份解决scheme。

备份应该做什么:

  1. 在生产服务器上执行ext [234] / XFS / JFS的LVM快照
  2. rsync /将更改的数据传输到备份服务器上的btrfs
  3. 快照btrfs文件系统
  4. 当空闲空间不足时丢弃旧快照

优点:

  • 所有的文件很容易获得,不需要解压缩或循环安装
  • 过去的快照也很容易获得…
  • …所以我可以将它们作为只读的Samba共享(支持影子副本)
  • 由于写时复制,快照占用的空间极小(不需要更改的快照占用磁盘上几乎没有的KiB)
  • 高备份一致性:对文件进行校验,清理所有数据和内置冗余

问题:

  • 是否有备份解决scheme(以Bacula,BackupPC等forms),或者可以很容易地意识到写入时复制文件系统?
  • 或者我需要使用家庭rsync解决scheme吗?
  • 使用ZFS专用于备份的人员如何备份他们的Linux机器?

上周我做了一些类似的search。 我没有find解决办法来做所有4个步骤。 有许多家庭用户的博客尝试使用“ rsync到btrfs ”types的备份,所有主要的Btrfs维基都涵盖了如何执行Btrfs快照。

也有不less人试图用不同的方式来旋转Btrfs快照 。 不过,您是我见过的第一个想要根据磁盘空间旋转快照的人。 我正在玩btrfs-自拍 ,创build一组每小时,每周和每月的快照,而且很好,很简单。

Dirvish项目似乎满足您的许多要求。 有些开发人员正试图将Dirvish和Btrfs结合起来 。 然而, Dirvish项目似乎有点停滞 。

在这个时候,你在曲线之前。

根据Avi Miller(在LinuxConf.AU期间的演讲),btrfs发送/接收正在进行中。 这将比rsync更快,因为它不需要遍历目录来查找文件中的更改..我不知道是否有一个预期的发布date,但尽pipe如此。

但是,有一个内置在btrfs-progs中的实用工具,可以列出每个在快照/ etc之间更改的文件。btrfs subvolume find-new

我正在使用类似于BackupPC的操作系统备份系统。 我曾经想过这个。 什么阻止我实际执行,是你不能硬链接子卷。 您也只能创build子卷的快照 – >每个备份客户机一个子卷。 因此文件级重复数据删除function不能与这种方法共存。 而且这个文件级重复数据删除通常可以节省很多空间。 你想只备份一台服务器吗?

如果btrfs具有块级重复数据删除function,则可能可以避免此问题,但通常速度不够慢

那么这种方法当然需要与一个文件系统(btrfs)紧密集成,所以这应该是一个可选function。

我在问,因为我正在考虑添加这样的奶牛function,但不知道是否应该因为上面列出的缺点。

编辑: UrBackup支持备份在Linux内核> = 3.6(与交叉卷reflink支持)现在的问题中所描述的。 看看如何设置它。

btrfs wiki页面“ Use Cases ”列出了一些工具: SnapBtr ,Snapper,btrfs-time-machine,UrBackup。

有一个名为autosnap的内置工具的build议 :

使用autosnapfunction,您可以将btrfsconfiguration为定期或基于事件的快照,并进一步自动pipe理快照。

Autosnap不仅仅是拍摄快照,而且也是pipe理创build的快照,到目前为止,您可以configuration自动快照删除基于文件系统已用空间的快照。

不过,截至2013年10月,维基指出: “自动快照function目前不包含在上游版本的btrfs中。”

我有类似的挫折,所以我最终创造了一些我叫做snazzer的脚本。 他们一起提供快照,修剪,测量和通过ssh传输(但截至今天也可以发送/从本地文件系统接收)。 度量值只是快照path的sha512sum和PGP签名的报告。 目前尚未准备好发布,但如果有人有时间在早期阶段对其进行审核,我很乐意收到反馈意见。

仅在此时使用CLI,但是我花了一些时间在具有许多btrfs子卷的系统上使用它 – 通常我有单独的/var/cache/home等子卷,可能需要从中排除快照或具有更多/更less的积极的修剪时间表。

恐怕修剪algorithm纯粹决定是否存在一组快照和它们的date,在满足磁盘使用限制之前,没有什么可以保持修剪的 – 首先删除哪个? 首先减less小时数还是夏季? 也许放弃最古老的,例如。 yearlies? 不同的部署将有不同的优先级; 而且我不知道这是否是唯一的备份层(在这种情况下,如果有法律/保险义务,您不应该丢弃最旧的备份),或者只是中间层(这种情况下,您可能会将这些年份归档到某个安全的地方别处)。

我将在某个时候添加ZFS支持和/或互操作性; 由于现在对“零”依赖的强烈渴望,它主要写在posix-ish shell和perl中,我希望在某个时候可以保持一个更清晰的Python替代实现。