btrfs 是否跨快照共享文件部分?

Ále*_*lex 5 snapshot btrfs

我知道现代文件系统快照占用的空间非常小,直到它们因文件更改而开始出现分歧。但是,我一直无法确定 btrfs 管理更改的粒度。换句话说,文件中的一个小更改是否会导致更改快照中的文件的整个重新分配,或者仅重新分配文件的子集?

原因是要知道在处理非常大的文件的快照时会发生什么。

小智 4

是的,btrfs 确实共享快照中的部分文件。它不会重新分配整个文件。

根据官方 wiki,快照的工作方式与其他 COW 操作相同。原始块在快照中被指向,如果快照中的文件发生更改,COW 会创建一个新的范围。无论文件没有、有一个还是有一百个先前快照,COW 都会执行此操作。

Btrfs 在称为范围的块列表中跟踪文件数据。当更新块时,btrfs 可能会复制整个范围(如果它很小),或者可能会将范围分成多个部分,将文件的未更改部分保留为称为“bookends”的较小范围,加上新更改的部分。这些新的较小书挡范围只是指向原始数据块的新指针,因此不会复制未更改的数据。请参阅维基百科范围描述

因此快照将共享大文件中未更改的块。

(请注意,根据我的阅读,您可以关闭大文件上的 COW,但是您无法对其进行快照。)