btrfs 是否在快照之间共享文件部分?

btrfs 是否在快照之间共享文件部分?

我知道现代文件系统快照占用的空间很小,除非它们因文件更改而开始出现分歧。但是,我无法确定 btrfs 以何种粒度管理更改。换句话说,文件中的一个小变化会导致更改快照中文件的整个重新分配,还是只会重新分配文件的子集?

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

答案1

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

根据官方维基。快照中指向原始块,如果快照中的文件发生更改,COW 将创建一个新的范围。无论文件之前是否有快照,一个还是一百个,COW 都会执行此操作。

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

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

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

相关内容