实际限制btrfs快照的数量?


23

我正在考虑在数据驱动器上使用btrfs,以便可以使用snapper或诸如snapper之类的功能来进行基于时间的快照。我相信这将使我能够浏览数据的旧版本。这是我当前的异地备份的补充,因为驱动器故障会清除数据和快照。

据我了解,btrfs快照不会占用太多空间(元数据和已更改的块,再加上一些开销),因此空间似乎不是一个约束。

如果我有一百万个快照(例如,两年每分钟快照),假设我有足够的磁盘空间来存储数据,更改的数据和元数据,那会造成严重破坏吗?

如果快照数量有实际限制,是否取决于文件数量和/或文件大小?

Answers:


16

作为使用btrfs文件系统Arch Linux已有近2几年时间的人,我可以放心地说,似乎可以轻松实现的快照数量没有实际限制。虽然有一些警告。btrfs文件系统可能导致碎片。因此,建议使用内置的在线碎片整理功能btrfs。此外,可以充分利用btrfs的压缩功能。这些措施应解决大多数合理的性能问题,这些问题可能在合理的体面的计算机上由于创建大量快照而出现。

如您所知,btrfs将子卷视为文件系统,因此快照的数量确实受到限制:即受文件大小的限制。根据 btrfsWiki,可以达到的最大文件大小为2^64 byte == 16 EiB[1]

除了这些限制之外,如果空间用完了而又没有立即意识到,则可能总会出现问题,因为检查btrfs文件系统上的可用空间有时会很棘手,即无法区分测量btrfs文件系统上可用空间的不同方法。轻松使用实际剩余空间量的跟踪。防止出现这种情况的一种可能方法是使用配额。这样可以确保用户(如果只有一个,则该用户)只能使用一定数量的空间。这个概念在这里这里都进行了很好的讨论。

最后但并非最不重要的一个警告:我不是btrfs文件系统专家,只有当我不久前有相同问题时才阅读这些内容。此外,始终存在一个问题,btrfs即“快速移动的目标”(Arch Linux我认为从wiki页面上窃取了不错的措辞。)因此情况可能会发生变化。


1
我也是那些较早的采用者之一,而且这是爆炸式的。
mikeserv

是的,非常棒:)
马克·科恩

1
您应该尝试将一个BTRFS卷上的快照保留在100个以下。否则,您可能会遇到性能问题,尤其是在删除快照时。创建快照的成本很低,但删除快照却并非如此。另外,请注意,建议与快照一起执行碎片整理的操作将消除快照的空间效率。碎片整理会破坏reflink,并增加使用的空间。
Monica Cellio的MountainX

@MountainX您可以在答案中对此进行详细说明。一个卷上的100张快照在两年内甚至每周一次都没有。
StrongBad

@StrongBad-我是从BTRFS邮件列表中收到该信息的,以响应问题。每个人都同意拥有数百或数千个快照是一个坏主意。要获取更多技术性答案,您必须在BTRFS邮件列表中询问。
Monica Cellio的MountainX '18年

5

从技术上讲,快照数量没有限制,但我在BTRFS邮件列表中询问:

(实用的)答案在某种程度上取决于您使用btrfs的方式。

由于快照太多,Btrfs确实存在伸缩问题(或者实际上使用快照的reflinks,使用reflink的dedup可能会触发相同的伸缩问题),因此,强烈建议每个快照子卷的快照位数到低两位数仍然是强烈的建议。

但是扩展问题主要影响btrfs维护命令本身,平衡,检查,子卷删除。虽然数百万个快照将使例如平衡实际上无法工作(虽然可以完成工作,但可能要花费数月),但是正常的文件系统操作(如读取和保存文件)不会受到影响,除非碎片成为问题(注意文件系统(例如btrfs)存在碎片,除非采取碎片整理之类的步骤来减少碎片)。

使用快照作为类似于时间机器/快照程序的存档备份似乎不是一个好主意。


Time Machine不是存档备份,而是备份。我不同意你的结论。对于备份而言,使用btrfs快照对于Time Machine可能是一个很好的主意(因为Linux内核无法链接目录,从而导致为每个快照重新创建完整的目录结构,这可能会占用大量磁盘空间)。对于单个备份设备上的备份,不希望添加其他设备,甚至没有运行平衡命令的目的。btrfs列表答案也试图对此进行解释。
Pro Backup

@ProBackup的btrfs列表答案表示将快照数量保持为单个到低的可疑数字,而快照程序的arch默认实际上并没有这样做。尽管简单设置不需要btrfs-balance,但是许多用户喜欢btrfs-check的想法,即使他们从来不需要它,如果要像快照程序一样旋转子卷,子卷删除就显得至关重要。
StrongBad

@ProBackup归档备份可能不是Time Machine的正确术语。时间机器似乎不仅仅是增量备份,但我不称其为基于快照的备份,例如snapper或rsnapshot,但这也许会更好。很高兴您能编辑该术语,因为您似乎对该领域非常了解。
StrongBad

根据我在snapper主页上看到的内容,Snapper不是备份工具。尽管快照程序可以追溯到过去,但这并不意味着它就像Time Machine。根本的区别在于,Time Machine将所有数据的副本存储在单独的介质中,快照程序甚至可能不会创建副本。
专业备份

最后,@ ProBackup,请写一个答案并解释为什么我对邮件列表中答案的结论是错误的。这样,我们可以看到社区的感受。
StrongBad

3

您可以总共包含2 64个快照和子卷。

btrfs设计wiki页面说(empahsis矿):

子卷基本上是一个名为btree的文件和目录。它们在树的根目录树中具有inode,并且可以具有非根目录所有者和组。可以为子卷分配一定的块配额,一旦达到该配额,就不允许进行新的写操作。子卷内的所有块和文件扩展盘都经过引用计数,以允许快照。FS上最多可以创建2 64个子卷。

快照与子卷相同,但是快照的根块最初与另一个子卷共享。拍摄快照时,根块上的引用计数将增加,并且写时复制事务系统可确保在快照或源子卷中所做的更改对该根是私有的。快照是可写的,并且可以多次快照。如果需要只读快照,则在创建时将其块配额设置为一个。

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.