Bootstrap

BTRFS设计简介

当前linux文件系统事实上的标准是extN(如ext3/ext4),但extN只是发展了数十年的文件系统的一个延续,设计上缺少一些新的特性来满足当前IT系统的需求,如对大存储容量的支持,高可靠性(冗余支持,鲁棒性),方便的volume管理技术等。btrfs设计之初就是为了成为下一代linux文件系统而努力的,其许多特性可以称之为“现代”: 高效的snapshot与clone,文件系统与volume管理概念整合。 这些在企业级应用中经常出现的重要特性,成为了btrfs天然自带的一部分。可能很多人会联想到solaris上的zfs,我们可以简单地认为btrfs就是linux版的zfs。本文将主要讲解btrfs设计以及实现上的一些重要特性。


核心算法

Ohad Rodeh在他的论文[1]中通过修改B+tree结构,设计出了一种具备我们期望的文件系统原型。而btrfs就是根据这个原型由Chris Mason(原Oracle linux kernel团队负责人,目前在FusionIO)来实现完成的。btrfs设计的核心结构是一种COW(copy-on-write) friendly B+tree:

  1. COW指的是整个btrfs内部不存在overwrite,即对任何数据(meta和data)的修改,都是将更新完的数据写入到新的磁盘block中。COW的方式有一些好处:良好的事务性,对snapshot和clone的友好支持
  2. B+tree是一种重要的数据结构,被广泛应用在文件系统,数据库索引等诸多重要技术上。此处略过B+tree的介绍,先看看COW如何工作的:

;