支持btrfs的备份解决方案


14

随着btrfs于本月14日在Oracle EL上投入生产(连同fsck的工作和Linux 3.2的清理),我正在考虑重新设计当前的备份解决方案以利用它。请注意,我正在考虑对少于10TB的少量数据进行处理,这是相当静态的(每天少于1%的更改)。简而言之,是SMB / SOHO备份解决方案。

备份应该做什么:

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

优点:

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

问题:

  • 是否有一些备份解决方案(以Bacula,BackupPC等形式)可以轻松实现写时复制文件系统的意识?
  • 还是需要使用家庭rsync解决方案?
  • 拥有专用于备份的ZFS盒的人如何备份他们的Linux机器?

看不到cons!其中之一是Btrfs快照仅等效于增量备份(光盘上文件的每个备份没有物理副本)。面对磁盘表面问题时,这可能很重要。请注意,您可以使用Btrfs中包含的本机RAID1支持强制执行一次复制。
vaab

1
@vaab:是的pro-如果您具有校验和并主动清理FS,则实际上并不需要两个以上的副本,而RAID6支持可能包含三个副本。就像我说过的,它是专用备份系统的设置,而不是单台计算机上FS内部的“备份”副本。那将是“ RAID不备份”和“快照不备份”。cp -arsync为此...
休伯特·卡里奥

我也在考虑备份到btrfs,但我只是在想rsync -a --delete /home/user /mnt/butterfs/backups/ && snapper create–除了备份后创建快照外,COW感知还意味着什么?
2013年

1
@unhammer:使用rsync不带--inplace您将在远程文件系统中获得相同数据的多个副本。(rsync通常将数据复制到一个临时的隐藏文件中,然后将其移动到旧文件上,使用“写时复制”文件系统,这样就可以在未更改的数据上获得两个副本)
Hubert Kario

Answers:


5

上周,我对类似的内容进行了广泛的搜索。我没有找到解决所有4个步骤的解决方案。来自家庭用户的许多博客都尝试使用“ rsync to btrfs ”类型的备份,并且所有主要的Btrfs Wiki都介绍了如何执行Btrfs快照。

也有很多人正在尝试以不同方式 旋转Btrfs快照。但是,您是我见过的第一个想根据磁盘空间旋转快照的人。我自己在玩btrfs-snap,它创建了一组每小时,每周和每月的快照,而且非常简单。

Dirvish项目似乎满足了许多您的要求。一些开发人员正在尝试将Dirvish与Btrfs集成。但是,Dirvish项目似乎有点停滞不前

在这个时间点上,您处于领先地位。


好吧,我只希望备份解决方案像BackupPC一样轻松:当磁盘空间不足时,它只会删除旧数据(旧快照)。虽然我担心自己会走在曲线的前头,但这并不是ZFS在过去的几年中没有和我们在一起……
Hubert Kario 2012年

3

根据Avi Miller(他在LinuxConf.AU上的演讲)所说,正在处理btrfs发送/接收。它比rsync快,因为它不需要遍历目录来查找文件中的更改。.我不知道是否有预期的发布日期。

但是,btrfs-progs中内置了一个实用程序,该实用程序列出了快照/等之间已更改的每个文件。btrfs子卷查找新


2
我想备份 btrfs,而不是 ...
Hubert Kario '02

2

我正在使用与BackupPC类似的OS备份系统。我已经考虑过了。使我无法实际实施的原因是,您无法在子卷之间进行硬链接。您还只能创建子卷的快照->每个备份客户端一个子卷。因此,文件级重复数据删除功能无法与此方法共存。而且文件级重复数据删除通常可以节省大量空间。您是否仅要备份一台服务器?

如果btrfs具有块级重复数据删除功能,则可以避免此问题,但这通常也非常缓慢。

那么,这种方法当然需要与一个文件系统(btrfs)紧密集成,因此这应该是一项可选功能。

我之所以问是因为我正在考虑添加这样的功能,但是由于上面列出的缺点,我不知道是否应该这样做。

编辑:UrBackup现在支持使用Linux内核> = 3.6(具有跨卷reflink支持)在问题中描述的备份。了解如何设置。


1
跨子卷的reflink复制(由完成的半硬链接cp --reflink)已经实施或将在不久的将来实施。FS中的在线重复数据删除速度很慢(lessfs)或需要大量的RAM(ZFS),因此依赖于它确实是备份软件中的一个坏功能。无论哪种方式,面向btrfs的备份软件都会吸引大量用户,毕竟它应该是下一个ext3。
休伯特·卡里奥

还有一件事:您可以通过将所有服务器放在一个子卷中来解决此问题-您可以在保留快照功能的同时重新链接它们之间的副本(以进行重复数据删除)。重复数据删除后仅需快照,仅备份一台服务器后仍可以快照!如果一次执行一次备份,则备份不会占用更多空间。或者,您可以备份所有服务器,重复数据删除,然后再进行快照。这样,您可以同时备份几台服务器。
休伯特·卡里奥

你是对的。没想到。为了方便起见,您可以然后符号链接到另一个卷中的正确快照。我也确实看到了跨卷硬链接(或--reflink)的补丁,但看起来并没有使它/或将其添加到主线。我真的会调查一下!现在您可能已经通过ssh进行了备份。我的项目专门针对本地网络...(自动发现等)
UrOni 2012年

是的,该补丁仍然有效并且可以正常工作,不幸的是不在主线中,我不知道为什么。我正试图向克里斯·梅森(Chris Mason)讨价还价。至于您的项目,请随时给我留言,我很乐意对其进行Beta测试(时间允许)。听起来确实很有趣。
休伯特·卡里奥

最终,该补丁进入了主线Linux内核3.6。使用跨设备的reflink实际上并不需要那么多的工作。我已经在这里写过:urbackup.org/blog/?p=83代码位于git存储库的“ next”分支中。我目前正在测试。
UrOni 2012年

1

btrfs Wiki页面“ 用例 ”列出了一些工具:SnapBtr,Snapper,btrfs-time-machine和UrBackup。

有一个关于内置工具autosnap的建议

使用自动快照功能,可以将btrfs配置为拍摄常规快照或基于事件的快照,并进一步自动管理快照。

自动快照不仅要获取快照,还要管理创建的快照,到目前为止,您可以配置自动快照以根据文件系统使用的空间删除快照。

但是,自2013年10月起,Wiki 声明 “ btrfs的上游版本当前不包含自动快照功能”。


1

我也有类似的挫败感,所以我最终创建了一些我称为snazzer的脚本。它们共同提供了通过ssh进行快照,修剪,测量和传输的功能(但从今天起,它们也可以向本地文件系统发送/从本地文件系统接收)。测量只是快照路径的sha512sum和PGP签名的报告。它还没有准备好发布,但是如果有人有时间在早期阶段进行审查,我很想听听反馈。

目前仅使用CLI,但我花了一些时间使其易于在具有许多btrfs子卷的系统上使用-通常,我对,等有单独的子卷/var/cache/home可能需要从快照中排除这些子卷,或者需要更多/更少积极的修剪时间表。

恐怕修剪算法纯粹是根据快照集及其日期的存在来决定的,在满足磁盘使用限制之前,没有什么可以继续修剪的-您首先删除哪个?首先减少小时数还是每天减少?也许放弃最古老的,例如。一年吗?不同的部署将具有不同的优先级;而且我不知道这是不是唯一的备份层(在这种情况下,您不应该丢弃最旧的备份,以免承担法律/保险责任),或者只是一个中间层(在这种情况下,您可能会将这些年度资料存档在安全的地方)别处)。

我将在某个时候添加ZFS支持和/或互操作性。由于目前强烈希望使用“零”依赖关系,因此它主要用posix-ish shell和perl编写,我希望在某个时候可以并行维护更干净的python替代实现。


除非您的FS很大且经常更改,否则从一个月前保留快照和从上周每天仅保留1个快照(相比于整个月每天保留一个)几乎没有什么区别-btrfs将需要存储当前状态以及一个月前的状态-我只保留日报,但是由于其压缩和扩散,我可以轻松地将它们保留半年,然后放弃最古老的保证以释放至少一些空间
休伯特·卡里奥

好吧,我要跟踪的虚拟机数量非常少-有些虚拟机具有较大的临时文件(即具有唯一扩展区的快照),正如您所建议的,它们可以从修剪中间快照中受益。因此,虽然修剪中间件并没有释放掉最旧的磁盘那样释放多少磁盘,但我能说的是……仅保留最少数量的快照,并使用像btrfs这样的COW文件系统这样做的效率似乎与其一样高。得到,但我意识到选择一个合适的解决方案还不止
于此

@ csirac2您是keepnig时髦者吗?我正在寻找这种类型的解决方案。如果主动维护,我对snazzer感兴趣。GitHub似乎没有显示近期活动……
MountainX-for-Monica

@MountainX当我没有太多关于Snazzer的初步反馈时,我有点迷失了热情。当我开始编写它时,实际上只有OpenSUSE的快照程序和一些shell / python脚本在浮动,它们使btrfs自动化。到我与世界分享时,出现了许多其他选择,并且我想说btrbk似乎有很大的发展动力(尽管缺少自动化测试[也许现在已经解决了?])。如果必须再次执行所有操作,我可能会与sanoid作者合作以在其中添加btrfs兼容性。有兴趣听听您的想法。
csirac2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.