1.EXT3之前的文件系统使用块指针,比如说每个文件的inode 对应每个单独的块包含一系列的指针去保存文件的数据,这样就导致,比如对于1GB 的文件来说需要256K的单独块指针,多浪费空间啊
后来EXT4 改成了使用extent 结构去描述数据块,每个extent是一组连续的块。由于文件系统可以存储连续的数据,基于extend的存储大大减少了管理文件空间的开销
2.BTRFS 也使用extents,但是他和其他的文件系统有很大的不同:他是一个写时复制文件系统(COW),当ext4文件系统中的数据被覆盖时,新的数据将被写到存储设备上的现有数据之上,从而销毁旧的副本。相反,Btrfs将把覆盖的块移到文件系统的其他地方,并在那里写入新数据,保留数据的旧副本。
3.写时复制带来另一个有趣的特性就是快照。快照是文件系统内容的一个虚拟拷贝。它可以根本不需要拷贝任何数据。
如果在后续的某些时间点,一个块的数据被改变(快照或者原始数据),这一块数据被拷贝而其他没有改变的数据依然被共享。
快照可以被用于提供一种时间机器的功能,或者仅仅是在一个失败更新之后的回滚操作。
4.另一个重要的特性是内建的卷管理。 BTRFS可以在多个RAID配置中跨多个物理设备。任意给定的卷都可以被分裂成子卷。 这个子卷可以被认为是独立的文件系统共享一个物理卷集。因此,Btrfs可以将系统的部分或全部存储分组到一个大池中,然后在一组文件系统之间共享该池,每个文件系统都有自己的使用限制。
5.Btrfs提供了许多其他Linux文件系统不支持的特性。它可以对数据和元数据进行全面的校验和,使其在面对硬件损坏数据时更加健壮. 不过,完整的校验和是昂贵的,所以它仍然可能只在少数安装中使用。
数据可以以压缩格式存储在磁盘上等等
6.值得注意的是,即写即拷的方法并非没有成本。显然,需要进行某种垃圾收集,否则所有这些块副本将很快耗尽文件系统上的所有可用空间。复制块可能比简单地覆盖它们花费更多的时间,而且会显著增加文件系统的内存需求