你的下一个文件系统——Btrfs

标签: 南极冰鸟 btrfs | 发表时间:2011-08-05 14:57 | 作者:Iven frocket
出处:http://www.kissuki.com

提起 ,相信广大折腾帝们都不会陌生,被誉为“下一代 Linux 文件系统”的它,具有扩展性好、支持数据校验、支持多设备管理等等强大特性,使得 Ext4 也只能成为悲剧的过渡产品,还不赶快找一个 Ubuntu 10.10、Fedora 15、Meego 什么的试一下?

慢着!支持什么多设备、什么数据校验跟你有一毛钱关系啊?根据 Ext4 和 Btrfs 的对比,Btrfs 在速度上似乎还差上一些呢!这么说 Btrfs 其实挺垃圾的?

本文就来为你从普通折腾帝用户的角度来解说一下 Btrfs 到底有什么好。如果你想从技术层面了解 Btrfs ,可以看一下《新一代 Linux 文件系统 btrfs 简介》。

注意:Btrfs 还处于实验性阶段,截止到本文写作为止,其磁盘检查工具 Btrfsck 还不能修复文件系统,请不要在工作环境下使用 Btrfs,以免数据丢失!再次警告,这不是演习!

错误修复

在正式开始讲之前,我假定你已经把系统弄坏了,你已经看到了系统提示你“You are on your own”,“Good luck~”,很好,我之前已经说过 Btrfs 还处于实验阶段了,所以就不要妄想把你的动作片全集找回来啦,乖乖格式化掉吧~

呃,当然,我们对于有共享精神的同志还是要宽容处理的,如果你真的很想找回来并且共享给我,你或许可以去 Arch Wiki 上看一下,那里有几条死马当活马医的良策,或许可以帮你度过难关,铁道部春哥保佑你。

其他特性

其实 Btrfs 对于普通用户有用的、能看到的特性主要就是其包含了卷管理特性,但是为了吊胃口,我们还是从其他特性开始说起吧。

其他的其他

Btrfs 支持在线的碎片整理,在线的卷增大和缩小,在线的块设备增添和删除,在线的块设备负载均衡;啥叫在线的呢?我理解就是文件系统挂载着就可以干这些事情,牛吧?虽然我不知道这些事情都是干嘛的跟我有神马关系。

可以从 Ext3/Ext4 无痛转换

不解释,详见《Conversion from Ext3 and Ext4》。

为 SSD 优化

Btrfs 高度为 SSD 优化,不仅提高存取效率,还延长了使用寿命。如果你在 SSD 硬盘上使用 Btrfs,那么可以在挂载选项中加入 ssd 来启用这一特性。

支持数据压缩

Btrfs 支持文件系统的压缩,这个有什么用呢?大家知道 NTFS 吧,它就支持压缩,支持压缩就可以存放更多的东西呗,动作片什么的。

不过压缩可不光是这个作用,大家都知道磁盘速度很慢,总是跟不上 CPU 的处理速度,所以 CPU 常常空闲着没事干。于是牛人们就想着给它找点事干,于是就有了压缩。压缩了之后磁盘读写就少了,原来闲着的 CPU 过来帮忙压缩解压缩数据,CPU 多快啊,这一来二去,往往就比原来不压缩的时候速度快得多。没看内核和 Ramdisk 都变着花样的压缩么,就是这个道理。

Btrfs 目前支持 lzo 和 zlib 压缩算法,而且很智能,像一些视频啊、音乐啊、图片啊,大家都知道它们本来就是压缩过存放的,再压缩也不一定减少空间,反而平白浪费 CPU,所以 Btrfs 会试着压缩一小段,如果压着困难,就会原样存放。怎么样,智能吧?

如果想要启用这一特性,可以在挂载选项中加入 compress 选项,你还可以手动指定压缩算法,例如 compress=zlib 可以获得更高压缩比,而 compress=lzo 可以获得更快的速度。

卷管理

终于到正题了啊,说到卷管理,很多人可能就想到 LVM 了,没错,说的就是这个卷!不过我虽然用过 LVM ,不过用的也不熟,如果说得有错误,请偷偷告诉我……

无须分区的文件系统

初入 Linux ,最大的难点是什么?当然是分区。其实这是大多数操作系统都会共有的问题,各位 MM ,你们当时是不是找暗恋你们的 GG 帮忙分的区?各位 GG ,你们当时是不是找暗恋你们的 GG 帮忙分的区?有了 Btrfs ,你们再也不用求人了!

什么 /boot 要分 200M 还有说不用单独分出来的啊,什么 /home 要分好多好多但是不能理解这是干什么用的啊,就算你已经算是 Linux 老鸟了,新换一个发行版的时候,也会犹豫 / 到底是分 15G 好还是 20G 好吧?

有了 Btrfs,你只需要分一个区就可以了,除非你想要休眠功能,那可以再分一个跟内存大小一样大的 swap 分区。

还在担心重装系统 /home 下文件会丢失?不用了,把 /home 分到一个单独的子卷中就可以啦!担心多系统问题?把 /boot 分到一个子卷中,就可以共享啦,然后再建一个其他操作系统的 / 子卷,往里面安新的操作系统吧!

子卷

上面的说明让你云里雾里?好吧,我来详细指点一下,多设备我不清楚,这里只说单设备,谁有多个硬盘自己研究去。

Btrfs 呢,自带了卷管理功能,所谓的卷呢,就是原来分区的概念,嗯,特别是在 LVM 中,就是这样。 LVM 中,划分子卷的时候也要指定子卷的大小,然后如果哪个子卷空间不够用了,可以用 LVM 的一套工具来改变大小。

这样其实跟原来分区的概念相差也不是很大,不过 Btrfs 中的子卷不是这样。在 Btrfs 中,所有子卷共用文件系统中所有的空间,在划分的时候是无需指定大小的。比如说你有个 80G 的 SSD 硬盘,全划分到一个 Btrfs 分区 sda1,而这个分区里面又有两个子卷 A 和 B,那么只要 A + B 的空间大小不超过 80G,两个子卷中哪个多点哪个少点根本没关系!

所以你再也不必为了 /boot 分小了而懊悔不已,不用为 / 分大了肉痛不已——它们共用一块空间,自身再也没有大小的概念了。

你可能要问,只分成一个 Btrfs 分区,那挂载的时候怎么办呢?仍然是通过挂载参数解决,比如:

mount /dev/sda1 /mnt -o subvol=root
mount /dev/sda1 /mnt/home -o subvol=home

虽然分区一样,不过由于子卷名称不一样,挂载时选择的子卷就不一样,很神奇。

快照

子曰:快照也是一种子卷,子卷是一种特殊的快照。

好,我们来挑战一下更难理解的概念——快照。说到快照,就不得不提系统还原,最常见的系统还原就是 Ghost 那种啦,把文件系统整个复制一遍然后压缩成一个镜像,这个又慢又费空间,大家懂的。Windows 自己也有系统还原,似乎是基于文件级的,把重要的文件备份一下,挂掉之后还原一下,能不能恢复正常全看天命,哈哈。

总之现在现实世界中各种系统还原办法还都不怎么完美(什么苹果、ZFS,我没用过的东西谁提我跟谁急!),不过在虚拟机的世界里,快照的应用已经相当广泛。嗯,或许你早已经用过 Virtualbox 的快照功能了,完全的增量备份方式,不会重复占用空间,并且可以方便地对快照进行增加和删除,是不是很爽?

现在这种异次元才有的技术终于降临在 Linux 上了, Btrfs 让真机上的文件系统快照成为可能。

COW

Btrfs 的快照功能是通过 COW(Copy on write) 技术来实现的,这种技术实现起来很难,不过说起来很简单。可能很多人听说过, Linux 内核中创建进程时 fork() 就用了这个技术,所以据各种书籍吹嘘, Linux 下建进程要比 Windows 下快得多。

举个例子,比如你把 Btrfs 分区分成了 / 和 /home 两个子卷,然后装上了系统,这时你想搞个对 / 子卷的快照,以便以后系统折腾坏了之后可以恢复过来。于是你就建了个快照,快照名叫 ooxx 好了。

Btrfs 中快照的建立几乎是瞬间的事,因为实际上它并没有备份数据,而只是增加了引用计数,比如一个文件 /lib/libc.so.6 ,初始引用计数是 1,你每建立一个快照它就加 1 ,所以现在你建立了 ooxx,引用数就变成了 2。

如果你哪天心情好,把 rm -rf /usr/lib 写成了 rm -rf /usr /lib,很遗憾你的默认子卷中的 /lib/libc.so.6 这个文件就没了。不过呢,这只是它的引用计数减 1 而已,快照 ooxx 中还对它持有一个引用,因此这个文件并没有真正消失,你还可以从 ooxx 中将其拷贝回来。

而哪天系统升级,默认子卷中 /lib/libc.so.6 被升级成了 /lib/libc.so.7,那么版本 6 的引用计数也是减一,同时在默认子卷中增加了一个版本 7 的文件。而快照 ooxx 完全不受此影响。

这就是 COW,也就是两者之间有差异的时候,再去修改差异的部分。如果没有差异,那么就无需重复的磁盘空间。

快照也是一种子卷,子卷是一种特殊的快照

这里反复提到默认子卷,也就是刚装系统时划分的那些子卷,这些子卷跟快照又是什么关系?

其实默认子卷只是一种特殊的快照而已,还记得之前说过划分子卷时要指定子卷名么?其实子卷名就是快照名,一个道理,你不管 / 的子卷叫 root ,而是叫它 xxoo 也是可以的,不管 /home 的子卷叫 home,叫它 oxox 也是可以的。

你可能糊涂了:快照不是死的、只读的么?怎么跟子卷又是一回事了?

错!快照不是只读的!

你可以把 Btrfs 中的快照想象成新建了一个一模一样的子卷,还记得之前的挂载命令么?现在你也可以使用快照名作为子卷名来进行挂载并且读写!

mount /dev/sda1 /mnt/root -o subvol=root
mount /dev/sda1 /mnt/snapshot_ooxx -o subvol=ooxx

没错!你甚至可以将默认子卷和快照同时挂载在系统上,同时进行读写,有 COW 技术的后盾,完全不用担心会有混乱!

想想这个技术可以干什么?你可以挂载一下以前的快照,轻松找回误删的文件;你可以新建一个快照,全盘删除,然后装个别的系统,完全不用担心原来系统的安全;你甚至可以建立一个快照,专门存放各种 MV, PV, AV, GV ,只要不挂载,即使是其他 Linux 高手也很难发现

恢复系统

有了快照,怎么恢复系统呢?总不能把快照里面的文件都拷贝回来吧?

这个问题其实前面已经解答了。大家知道 Linux 下文件系统挂载主要是两个地方,一个是内核参数(也就是 GRUB 之类的配置文件里),一个是 /etc/fstab;大家还知道快照的挂载只需要修改挂载参数中的 subvol 的值就可以了,那么事情就简单了:想要恢复到哪个快照,直接挂载它就可以啦!

也就是说,系统的恢复只是改改配置文件的事,完全无需等待!当然以后可能还会有图形界面的工具出现。

快照的数量

我们可以在一个分区里面建立多少个快照?这个问题不要问我。我只能告诉你,如果你每天都在使用电脑,并且每天建立 100 个快照,那么你磁盘空间不足的时候, Btrfs 的 subvolid 肯定不会用完就是了。

所以你可以没事就建建快照,玩 RPG 的都会 S/L 大法吧?说不定少做了一次快照,前面就“请英雄重新来过”了,到时候哭都来不及。 Arch 下已经有了相应的工具自动建立快照,详情自行搜索。

总结

本文仅仅是从理论方面对 Btrfs 对普通折腾帝用户的用处进行了阐述,如果我心情好反响好的话我会写一篇实战篇,大家也可以去 Btrfs Wiki 上查看更详细的理论和实践知识。

根据最新接到的消息, Btrfsck 将在两周之内推出一个可以修复数据的初始版本,相信这个工具的推出,可以使更多折腾帝投入 Btrfs 的大潮之中,这篇文章,全当是为大家做个动员吧。

最后还是提醒,折腾有风险,千万别在 Btrfs 上存放重要数据,否则追悔莫及!谢谢支持!

PS: 长了草的博客,我对不起乃!我以后可能的话一定痛改前非,专心写博!

Related posts:

  1. 制作LFS过程中各个阶段恢复工作状态的方法 第二版(适合LFS6.3)(转贴)
  2. 解决Arch Linux下A卡开compiz假死的问题(转贴)
  3. Arch Linux无法休眠的解决

相关 [文件系统 btrfs] 推荐:

你的下一个文件系统——Btrfs

- frocket - K.I.S.S. - 简单哲学
提起 Btrfs ,相信广大折腾帝们都不会陌生,被誉为“下一代 Linux 文件系统”的它,具有扩展性好、支持数据校验、支持多设备管理等等强大特性,使得 Ext4 也只能成为悲剧的过渡产品,还不赶快找一个 Ubuntu 10.10、Fedora 15、Meego 什么的试一下. 支持什么多设备、什么数据校验跟你有一毛钱关系啊.

Fedora 16默认文件系统为Btrfs

- rIPPER - Solidot
51开源社区 写道 "在6月8日举行的Fedora工程指导委员会会议上,委员会决定Fedora 16 将以Btrfs作为默认文件系统. Btrfs,是Oracle于2007年宣布并进行中的copy-on-write文件系统. 目标是取代Linux目前各大发行版的ext4文件系统,改善ext4的限制,特别是单个文件的大小,总文件系统大小或文件检查.

Linux Kernel 3.0 内核文件系统EXT4 与 Btrfs测试比较

- Power - cnBeta.COM
EXT4文件系统大家可能都比较熟悉了,现在流行的ubuntu 11.04和Fedora15都是默认采用的EXT4,ext4是Linux的第四代扩展文件系统,是EXT3的后继版本. Btrfs 被称为是下一代 Linux 文件系统. 近年来 ext2/3 遇到越来越多的扩展性问题,在期待 ext4 的同时,人们发现了 btrfs,据说它采用了很多先进的文件系统设计,不仅解决了 ext2/3 的扩展性问题,还让人们看到了下一代文件系统所具有的许多其他特性.

Btrfs不再作为Fedora 16默认文件系统

- Eric - Solidot
2个月前,Fedora工程指导委员会决定Fedora 16将以Btrfs作为默认文件系统. 现在,Fedora撤回了决定,Btrfs不再作为Fedora 16默认文件系统,原因是时间不充足,无法达到改变默认文件系统所要满足的基本要求.

默认使用 BTRFS 文件系统的特性推迟到 Fedora 17

- gnawux - LinuxTOY
Fedora 的 Josef Bacik 在开发者邮件列表上宣布,默认使用 BTRFS 文件系统的特性推迟到 Fedora 17. 推迟的原因很简单,就是因为 BTRFS 的查错工具 btrfsck 未能在 Fedora 16 特性冻结前推出,而且性能问题一直困扰着 BTRFS. 同时部分 BTRFS 的特性仍然需要等待到 Linux 3.2 内核才能跟上.

Ext文件系统

- Haides - 博客园-首页原创精华区
  虽然从Ext2到Ext4,找数据的方式发生了变化,但是,磁盘的布局还是非常相似的. 其实这个东西也不需要变化,因为现在也没什么特别巧妙的方式,而且磁盘的吞吐量、效率的瓶颈也不在这里. 当然,这里排除那些根据自身文件特点设计的数据库,毕竟还是为了支持通用文件.   Boot在第一个块,放的应该是引导程序,超级块就放在了第二个块上,如果不是可以在mount的时候通过参数sb来设置.

NFS 文件系统源代码剖析

- wuyan - IBM developerWorks 中国 : 文档库
NFS 文件系统是目前最为成功的网络文件系统,在文件共享领域有着出色的表现,特别是 pNFS 的出现,使得 NFS 文件系统在性能和规模上有了大幅提升,为其带了更为广阔的应用空间. 同时,NFS 之所以备受关注,还在于它在 NAS 存储领域的关键作用. 本文剖析了 NFSv3 文件系统源代码,使开发工程师,技术支持人员,特别是存储领域从业人员对 NFS 有更为深刻的认识.

文件系统文献推荐

- Lianhui Wang - 刘爱贵的专栏
非常好的文件系统阅读文献,研究存储和文件系统的不能不读的,其中的每一个文件系统都非常经典的,代表存储或者文件系统发展过程的里程碑.

linux下的文件系统选型

- Michael - shell's home
    贝壳原来一直认为文件系统可以随便选,结果最近吃了两次苦头. 一个是btrfs对虚拟机支持不良,另一个是特定情况下xfs性能比ext3高20倍. 痛定思痛,打算列一下文件系统选型的方法和依据,欢迎拍砖.     下面我列一下纳入参考的文件系统,当然,ntfs就不要出来搞基了,玩嵌入式/光盘live之类的朋友也不要来凑热闹了阿.

Linux 下的文件系统选型

- 桔子 - python.cn(jobs, news)
贝壳原来一直认为文件系统可以随便选,结果最近吃了两次苦头. 一个是btrfs对虚拟机支持不良,另一个是特定情况下xfs性能比ext3高20倍. 痛定思痛,打算列一下文件系统选型的方法和依据,欢迎拍砖. 下面我列一下纳入参考的文件系统,当然,ntfs就不要出来搞基了,玩嵌入式/光盘live之类的朋友也不要来凑热闹了阿.