X

ZFS

ZFS

空间图

每个文件系统都必须跟踪两个基本的内容:数据的位置,空闲空间的位置。原则上,跟踪空闲空间不是严格必需的:每个块要么已分配,要么空闲,所以可以通过假设所有空间都空闲,然后减去已分配的空间就可以计算出空闲空间;已分配的空间可以通过从根遍历整个文件系统来找到。根据定义,不能通过从根...

每个文件系统都必须跟踪两个基本的内容:数据的位置,空闲空间的位置。原则上,跟踪空闲空间不是严格必需的:每个块要么已分配,要么空闲,所以可以通过假设所有空间都空闲,然后减去已分配的空间就可以计算出空闲空间;已分配的空间可以通过从根遍历整个文件系统来找到。根据定义,不能通过从根遍历找到的任何块都是空闲的。实际上,按这种方式找空闲空间将是无法忍受的,因为它对于任何较大的文件系统来说花的时间太长了。要快速分配和释放块,文件系统需要有效的方式来跟踪空闲空间。在本文中,我们将检测最常用的方法,为什么它们没有很好扩展,以及我们为 ZFS 设计的新方法。位图最常见的表示空闲空间的方法是使用位图。位图位组成的数组,数组元素中的第 N 个位表示第 N 个块是已经分配还是空闲。位图的开销非常低:每个块对应 1 位。对于 4K 的块大小,是 1/(4096\*8) = 0.003%。(8 表示每位 8 个字节。)对于 1GB 的文件系统,位图是32KB,这很容易放入内存,而且可以快速扫描来找到空闲空间。对于 1TB 的文件系统,位图是...