我知道,现代文件系统快照只有很less的空间,直到他们开始因文件更改而发生分歧。 但是,我一直无法确定在哪个粒度btrfspipe理的变化。 换句话说,文件中的小改动是否会导致改变的快照中文件的整个重新分配,或者只有一部分文件将被重新分配?
原因是要知道如何处理超大文件的快照。
是的,btrfs确实共享快照中的部分文件。 它不重新分配整个文件。
根据官方wiki ,快照与其他COW操作一样。 在快照中指向原始块,如果快照中的文件已更改,则COW将创build一个新的范围。 COW是否执行此操作,无论文件是否有一个或一百个快照。
Btrfs将文件数据跟踪称为扩展数据块的列表。 当一个块被更新时,btrfs可能会复制整个范围(如果它很小),或者可能会将范围分割成块,将文件的不变部分保持为称为“书挡”的较小范围,加上新的更改部分。 这些新的较小bookend范围只是指向原始数据块的新指针,所以未更改的数据不会被复制。 请参阅Wikipedia范围描述 。
因此,快照将在大文件中共享未更改的块。
(请注意,您可以closures大文件上的COW,但不能从我读过的内容中快照)。