Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9263681
  • 博文数量: 1669
  • 博客积分: 16831
  • 博客等级: 上将
  • 技术积分: 12594
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 07:23
个人简介

柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!

文章分类

全部博文(1669)

文章存档

2023年(4)

2022年(1)

2021年(10)

2020年(24)

2019年(4)

2018年(19)

2017年(66)

2016年(60)

2015年(49)

2014年(201)

2013年(221)

2012年(638)

2011年(372)

分类: LINUX

2013-03-26 10:08:07

Btrfs介绍及性能测试  

2013-03-22 11:26:08|  分类: linux文件系统 |  标签: |字号 

Linux原生的ext4文件系统目前已经在一些最新的Linux发布版本中包含了,我也使用了一段时间,和ext3相比,有所改善但是不是那种非常显著的干劲,更详细的情况可以参考这篇文章()。
不过我一直向往上的,觉得那才是真正的企业级文件系统,COW,CDP等功能让人着迷,虽然目前linux上已经有基于的实现,但是性能上就大打折扣了,直到文件系统的出现,让我看到了未来:

 承若将赋予这个文件系统许多类似ZFS的企业级特征,甚至在性能和亮点上要超过。事实上,很多Linux专家认为应该是Linux未来的 一个关键点。
不过目前目前还没有完全发布,不过相信很快大家就能用到了,在正式使用之前,我们不妨对它做一些了解,甚至可以对其进行一些性能上的测试。

Btrfs文件系统介绍

,有时又被称作”Butter FS”(黄油文件系统?),最先由在工作的发起这个项目,以协议发布。目前这个项目在Linux社区获得大量的追随者并引起大多数人的共鸣,目前有以下特性:

  • 写时复制(Copy on Write a.k.a COW)
  • 扩展(extents,看和有关文档)
  • 针对小文件提升空间效率
  • 针对目录索引提升空间效率
  • 动态i节点分配
  • 可写的快照(writable snapshot)
  • 快照的快照(snapshots of snapshots)
  • 子卷(subvolumes,根文件系统内部分割)
  • 对象级镜像和条带化(object level mirroring and striping)
  • 数据和元数据的校验和
  • 压缩
  • 集成多设备支持,包含几种RAID算法
  • 在线文件系统检查和碎片整理
  • 非常快速的离线文件系统检查
  • 高效的增量备份和文件系统镜像

从以上的特征,你能看出来是一个非常有“野心”的项目,当然看了这些特征,估计你会爱死它了(不会像一样不堪重负而死掉吧?) 可能你立刻会问到一个问题,“和相比如何?”,恩,知道你会问这个问题,因为有人已经有来对此作为比较,我们这里摘录其关键点吧,看下面这张对照表格:

特征 ZFS BTRFS
写时复制
快照
快照的快照 不清楚
磁盘使用率接近98-100%时,性能受损 差不多是这样
块级别压缩 当前是作为一个挂载选项
磁盘加密 正在开发 已经计划了,但是目前还未进入内核,encryptfs是一个选择
在线改变文件系统大小
在线碎片整理
写校验和
内建RAID 是(0,1,10, 5 ) 是(0, 1, 10)
ACL
直接IO 写可以,读不行–已经计划了
配额

特性详解

是非常有雄心的一个项目,带来了非常多的新特性,一些非常重要和关键的特性已经在上面的列表中说了,这些特性值得我们深入了解。

动态i节点分配

这个特性听上去不怎么实用,实际上,在创建/扩展文件系统时,它还是很有用的。动态分配意味着当创建文件系统时只有少量的i节点被创建,当i节点不够时,文件系统会非常平滑的创建更多的i节点。想想以前创建一个500G的文件系统时,有多少时间是花在创建i节点上呢?

快照(snapshot)

允许你创建文件系统或者文件系统某一个部分的快照,你可以利用这个快照来创建备份,或者在紧急情况下的数据拷贝。
你也可以使用它来将文件系统的某一个部分dump出来作为一个归档(归档后,你可以删除快照和原始数据)。
通常,快照是不会被修改的,因为做快照一般都是用来执行一些比较关键的任务,比如备份、修复、归档等。
但是在某些情况下,你可以需要对快照做一些写的操作,允许你这么干
举个例子:假定你对某一个目录做了快照,而后你又在这个目录做了一些工作,只要你能确保这个目录已经更新到快照里,你就可以保持你的拷贝是最新的,这实际上是一个快照的快照,这就是一个非常灵活的快照功能(没有明白?等你用了,你就明白了)。

写时复制(Copy on Write)

这个术语已经听得很多了,它指的是允许你的某一些数据在写的时候被拷贝(就是做了两次拷贝)。
在里,这个技术可以有各种用途。比如可以将它和快照甚至快照的快照技术联合起来使用,这样使得数据很容易更新。
也可以使用它来记录日至,比如对于日志文件系统,可以对日志或者数据来一个写时复制,这就可以保证数据的高可用性。

子卷(Subvolumes)

能够把文件系统的某一部分分离出来挂载,就像是一个独立的文件系统一样。
当你想限制用户访问一个目录中的某一个部分的时候,这个功能就会变得非常有用。
比如,如果在一个主目录里,其中一个子目录希望能被用户访问,而其他部分不允许。
那么这个子目录就可以当作子卷(subvolume)挂载,对用户而言,她就像一个实际的文件系统一样。

多设备支持

当前Linux系统,如果你想创建一个RAID-0或者RAID-1或者其他RAID级别,然后在这些设备用上LVM,你可能需要使用硬件RAID卡或者软RAID(md)来做到把多个设备合成一个虚拟的设备。
而则把对多设备(RAID)的支持内嵌到文件系统里了。
当前,可以做RAID-0,RAID-1,RAID-10(以后应该会增加系统RAID级别)。
一旦被创建,它允许你直接增加设备(磁盘)到这个文件系统里(动态i节点分配是关键),当然也允许你拿走设备。
(哦,天啦,哦,天啦,天啦,这不就是一个磁盘阵列了么?)

文件系统检查和碎片整理增强

文件系统检查(fsck)对系统管理员而言就是一个毒药,因为做文件系统检查,你就需要将文件系统处于offline的状态(在线fsck,你试试,别到时哭都没有地方哭去),然后做fsck操作来修复,这个过程是需要花费大量的时间的,修复完成后,你总算可以重新挂载了(假定你修复出来的文件系统没有问题)。
Btrfs允许你对一个已经挂载而且在使用的文件系统进行在线的文件系统检查。在检查的过程中,你仍然可以使用这个文件系统。
另外,虽然文件系统开发人员尽了最大的努力,但是碎片还是会发生,当然也就会影响性能(想起那个著名的有关windows磁盘碎片整理的笑话来了)。
磁盘碎片整理也需要文件系统处于offline的状态,和fsck差不多,而也允许你在在线的时候使用。

加密

文件系统加密变得越来越流行,特别对一些企业和敏感人士的笔记本而言,一旦笔记本被偷或者遇到不良维修人员(想象陈君冠希老师吧),也许你会死的很惨。因此文件系统加密变得很重要了。
加入了非常强的加密功能,而且还会提供一些额外的技术(记住:目前这部分还在开发过程中)

压缩

除了加密,也提供了压缩来节省空间和提升性能的功能,当前,它使用内核自带的zlib压缩算法。

Btrfs,何时到来?

一旦有新的功能,我们总是想问,我们嘛时候能使用呀?可是新功能总是要经过无数次的测试,调试,开发这样的一个迭代过程,因此不会来的太快的。

目前,内核2.6.29版本已经进入了,不过加上了“试验(experimental)”的标签,这当然是Linux一贯的做法,可以获得更广泛的测试以及问题反馈。
你可以升级到这个核心,并订阅的开发邮件列表,为的早日杀青作出你的贡献吧。

创建Btrfs文件系统和测试

说了这么多,都是干说,现在我们来点实际的,下面给出一个完整的文件系统创建和测试的步骤,让大家过足瘾吧。 
故事从下面的指令开始:%mkfs.btrfs /dev/sda1 它发生的太快了,连你想掐秒表计算时间的机会都没有。OK,来个脚本测试一把吧:

[root@test64 ~]# ./test.sh
Sat Apr 18 15:47:50 EDT 2009

WARNING! - Btrfs Btrfs v0.18 IS EXPERIMENTAL
WARNING! - see  before using

fs created label (null) on /dev/sda1
        nodesize 4096 leafsize 4096 sectorsize 4096 size 465.76GB
Btrfs Btrfs v0.18
Sat Apr 18 15:47:51 EDT 2009 

不要不相信自己的眼睛,没错,465G的文件系统创建只要1秒钟,这就是i节点动态分配的直接结果。你可以用创建ext3文件系统来作为一个对比(当然,ext4已经支持i节点动态分配了)

创建完后,挂载当然是一件很简单的事情了。

%mount -t btrfs /dev/sda1 /mnt/data_btrfs 

在多个设备上创建文件系统也很简单,缺省情况下,在在多个设备上创建 文件系统是,元数据(metadata)会在每一个设备上做一个镜像(类似RAID1)。而数据而采取条带模式(类似RAID0)。当然 也允许你改变元数据存储的方式,它支持下面的方式:

  • RAID-0 (元数据在每一个设备上都会有)
  • RAID-1 (元数据在每一个设备上都镜像)
  • RAID-10 (元数据在每一个设备上都有,而且相互镜像)
  • single (元数据存在单个设备上)

下面是在多个设备上创建的例子:

% mkfs.btrfs /dev/sda1 /dev/sdb1 

现在你可以使用/dev/sda1或者/dev/sdb1挂载。创建多设备的文件系统并不比创建单个设备的文件系统要慢。

性能测试

性能测试有很多,这里我们选择iozone工具,关于的相关说明和用户可以参考官方文档。测试环境是AMD Opteron64 CPU 2.0GHz,CentOS 5.3,Btrfs v0.18,kernel 2.6.30-rc1

我们会针对单个磁盘和两个磁盘分别进行测试,对于挂载选项,我们可以选择了缺省(标准)挂载方式和以下的挂载参数:

  • nodatacow (无写时复制)
  • nodatasum (无数据校验)
  • compress (打开数据压缩)

下面的测试结果表有4列:write,rewrite,read,reread。
作为对比,我们选择了ext3(default),ext4(default),ext3(performance),ext4(performance)最为测试比较对象。
详细情况请看下表:

File System mkfs.btrfs
options
Mount options Write
MB/s
Rewrite
MB/s
Read
MB/s
Reread
MB/s
Ext3 28.307 28.001 55.791 55.765
Ext4 30.228 29.626 108.701 108.884
Ext3 “optimal” 28.047 26.432 105.565 105.156
Ext4 “optimal” 30.127 29.365 109.889 109.600
Btrfs Standard Standard 31.586 31.917 104.104 104.106
Btrfs Standard nodatacow,
nodatasum
31.933 31.839 107.157 106.565
Btrfs -m single standard 31.513 31.504 105.578 105.828
Btrfs -m single nodatacow,
nodatasum
31.874 31.896 105.109 106.565
Btrfs standard compress 71.359 71.129 126.660 132.314
Btrfs two disks,
raid0
standard 49.891 50.318 129.907 132.024
Btrfs two disks,
raid0
nodatacow,
nodatasum
45.054 45.867 130.655 131.879
Btrfs two disks,
single
standard 50.144 50.264 126.984 131.130
Btrfs two disks,
single
nodatacow,
nodatasum
43.834 47.603 131.612 131.470
Btrfs two disks,
raid1
standard 48.984 50.388 122.818 109.867
Btrfs two disks,
raid1
nodatacow,
nodatasum
48.196 48.462 131.832 131.807
Btrfs two disks,
raid10
standard 49.859 50.101 130.655 132.179
Btrfs two disks,
raid10
nodatacow,
nodatasum
50.072 50.366 129.424 122.828
Btrfs -m single -o compress 70.241 69.299 138.849 127.958
Btrfs -m single -o compress
nodatacow,
nodatasum
31.976 31.922 107.000 106.728
Btrfs two disks,
raid0
-o compress 70.234 69.048 130.852 129928
Btrfs two disks,
raid0
-o compress
nodatacow,
nodatasum
48.762 48.831 130.812 130.202
Btrfs two disks,
raid1
-o compress 70.467 68.286 130.990 130.051
Btrfs two disks,
raid10
-o compress 70.900 69.926 130.812 130.202

性能测试结果分析

从上面的测试结果,我们可以获得以下一些结论:

  • Btrfs的缺省挂载方式获得了和ext4相近的性能,相比ext3要好很多了
  • 关闭数据校验和写时复制功能,性能有了显著提高,牺牲了数据的而外保护当然要在性能上获得补偿嘛
  • 打开压缩选项后,性能相比标准挂载有了很大的提升,write和rewrite差不多提升了100%,而read和reread性能提升了30%的样子。
  • 使用两块磁盘时,通用write和rewrite性能提升50%,write和rewrite性能提升30%。有意思的是,带压缩的单个磁盘write和rewrite性能比两个磁盘的性能要高。而且,带压缩的单个磁盘read和reread性能和两块磁盘的性能相当。
  • 打开压缩和写时复制,关闭数据校验的情况下,write和rewrite性能显著下降–大约30%。然而,read和reread性能没有太多影响。这说明这个特定的测试表明,数据校验这个性能更多的受CPU的影响而不是磁盘性能。

以上测试结论或者在你的环境中有些不同,毕竟其影响因素太多,但是不管如何,对于一个还在开发过程中的文件系统而言,已经有了非常可观的性能。而且,针对单个磁盘,当压缩选项打开后,iozone的测试性能是非常显著的。

小结

尽管Linux的开发和进展都非常好,但是还有一些人很早以前就要求Linux能够提供更好的文件系统,他们希望它具有企业级特性,而能和竞争。应该回答和满足了这些人的需求。在内核2.6.29时合并到了内核主干里,不过目前仍然是试验性质的。并不是上述所有的特性都已经实现了,但是目前的版本(v0.18)已经有了非常多的特性了。

尽管在CentOS 5.3系统(kernel 2.6.30-rc1)里,还是试验性质,不过的基本性能已经和ext4差不多了。
综合上面的测试案例,的性能更多的受磁盘性能的影响,有时受CPU性能的影响(在使用压缩的测试例子里)。
你当然还可以更加深入的研究上述的测试结果,以获得更多的信息。

如果你看了这篇文章,对Btrfs甚至Linux产生了浓厚的兴趣,那我会非常高兴的。

注:以上内容大部分内容翻译自,另外一部分内容加入了自己的看法和理解。



btrfs是linux下一代文件系统,由oracle、radhat、intel、suse等多个公司和社区研发,采用GPL协议发布(Linux Only),目前正逐步稳定下来。Arch的内核很新,也对btrfs提供了较好的支持,我尝试了一次全新的整个系统基于btrfs的安装,和大家分享一下心得。
首先,为什么我们要用btrfs?btrfs有很多吸引人的特性,比如:
1、类似lvm的多设备文件系统,目前支持raid0、raid1、raid10,预计在3.5内核中加入raid5/6的支持。

2、类似于ZFS的pool概念:一个分卷(volume)可以横跨多个物理分区,分卷内有subvolume共享volume的空间。比如为了重装能保留/home,你的/分了20G,/home分了60G,某天/不够用了,怎么办?btrfs可以把/和/home作为subvolume,共享剩余空间,同时在/遇到不可逆损坏时保持/home的完整性。不过有一个限制:btrfs上不能放置swap文件,会损坏文件系统。请使用独立的swap分区。

3、快照。btrfs能对任何subvolume进行快照,同时其copy-on-write的特性可以让多个快照引用同一个文件,当文件在一个快照中被修改时再复制一份储存在这个快照中,所以说,一个快照初始时几乎不占硬盘空间,随着系统使用快照和当前系统的差异越来越大,快照才占用越来越多的空间。

4、透明压缩。支持文件系统级的压缩,目前支持zlib和lzo两种算法,后续会加入snappy和lz4等。现在系统往往硬盘读取速度是瓶颈,牺牲一些CPU时间压缩数据而减少硬盘读写往往能提高整体效率。 测评:

5、设计时就考虑到了SSD的优化
    我觉得以上是比较吸引桌面用户的地方,还有很多别的特性可见: 可以说,目前来看,除了ZFS的deduplication功能,btrfs是一个能和ZFS正面抗衡的linux文件系统。


    为了尝试btrfs,我在我的15G小硬盘上重装了系统。系统安装和别的大致无异,但要注意一下几个方面:

1、选择软件包时,选上btrfs-progs 

2、我要讲讲subvolume的意义:btrfs,顾名思义,Btree(二叉树)是文件系统组织方式。subvolume就是森林的根,标识一个subvolume有两个数据:名称和ID。建立文件系统后,会自动生成总树根,没有名称,ID为0。之后你可以在下面建立文件、文件夹和子树,文件夹和子树中又能包含别的文件、文件夹和子树。子树和文件夹的区别在于,子树能够用mount命令直挂载在到目录根部,也可以对其快照而文件夹不行。为了更好的扩展性与快照回滚能力,建议把/安装在一个新的subvolume而不是总树根上。很不幸,arch默认的安装脚本不能满足我们的要求,我们来手动安装arch。下面演示创建一个/、一个/home和一个pkg子树,并为了稳妥将/boot分在另一个独立的ext4分区上。为什么建这个pkg子树呢?因为可以对subvolume指定不同的挂载选项,像pkg里面全是压缩包,自然就不用透明压缩,所以不需要compress(很可惜,到3.3内核还没有支持不同subvolume使用不同的压缩选项,以后会改进,见:)。
    

具体步骤可见:,我想有意愿折腾btrfs的不会被手动安装arch难到。用mkfs.btrfs创建一个类型为btrfs的分区,挂载到/mnt。cd到/mnt,执行以下命令:

btrfs subvolume create rootfs
btrfs subvolume create homefs
btrfs subvolume create pkg

之后用命令

btrfs subvolume list /mnt

可以看到这样的结果:

ID 256 top level 5 path rootfs
ID 260 top level 5 path homefs
ID 262 top level 5 path pkg

(我们的ID可能会不一样,以自己的为准)

    三个subvolume建立完成!但是这样还不够,我们要按照结构挂载。btrfs的挂载选项也很有讲究,具体见:
执行:

mount  -o remount,compress=lzo,space_cache,autodefrag /dev/sdaX /mnt
mkdir -p /mnt/rootfs/home /mnt/rootfs/var/cache/pacman/pkg /mnt/rootfs/dev /mnt/rootfs/proc /mnt/rootfs/sys
mkdir -p /mnt/rootfs/var/cache/pacman/pkg
mount  -o subvol=homefs,compress=lzo,space_cache,autodefrag /dev/sdaX /mnt/rootfs/home
mount  -o subvol=pkg,compress=lzo,space_cache,autodefrag /dev/sdaX /mnt/rootfs/var/cache/pacman/pkg
mount /dev/sdaY(ext4的boot分区) /mnt/rootfs/boot

subvol=是指定挂载的subvol名称,也可以使用subvolid=ID。compress=lzo是在安装时就进行透明压缩,减小体积,提高性能。space_cache,autodefrag都是提高性能的选项。如果是ssd,可以加上ssd和discard。
    然后到/mnt/rootfs/中,执行

mount -o bind /dev dev/
mount -t proc /proc proc/
mount -t sysfs /sys sys/

    最后来一步pacman -r . -Sy base grub2-bios --ignore grub 安装系统。我试过,grub1不能从subvolume中启动,syslinux我不熟,听说也有问题,所以推荐grub2。安装grub2不多说了,。
    之后就是/etc 中的设置了,按个人喜好,注意几个地方:
1、mkinitcpio的hook里加上btrfs,然后mkinitcpio -p linux重新生成镜像,不然多设备btrfs可能无法启动。会提示fsck.btrfs找不到,不用管,这个目前还没实现。
2、fstab要写好,我的是这样的:

……
/dev/sda10 / btrfs subvolid=256,defaults,compress=lzo,space_cache,autodefrag  0 1
/dev/sda10 /home btrfs subvolid=260,defaults,compress=lzo,space_cache,autodefrag 0 1
/dev/sda10 /var/cache/pacman/pkg/ btrfs subvolid=262,defaults,compress=lzo,space_cache,autodefrag 0 1
/dev/sda8 /boot ext4 defaults 0 1
/dev/sda9 swap swap defaults 0 0
……

3、/etc/default/grub里GRUB_CMDLINE_LINUX_DEFAULT="rootflags=subvolid=256"后生成grub.cfg。这是告诉内核启动时把subvolid=256当成/。以上所有用id的地方都可以用subvol=名称
设置好root密码--passwd root。然后你觉得差不多就可以重启了

    重启以后,按照自己的喜好配置系统吧!操作和别的文件系统完全一样。大家用df看看硬盘容量,一定会惊奇于大小的:我整个系统包括X、左面环境和日常软件一共只占了1.8G大小!大家肯定还有一个疑问:df显示的total != used+available,前者比后者大了1/8左右,这是为什么呢?还是来看挂载选项:

metadata_ratio=number
Sets the number of data chunks that need to be allocated to force a metadata chunk allocation. By default this is set to 8.

    就是说,默认情况每分配8个data chunk会分配1个metadata chunk,所以那1/8是metadata的大小。难道说btrfs的硬盘利用率只有8/9?不用担心,btrfs会把能放进metadata chunk的小文件放在里面,所以那1/9的空间也是可以存储文件的!而命令

btrfs filesystem balance

可以重新平衡文件分布,如果是raid,那么在多个设备上平衡负载;如果对单设备的metadata进行,就可以平衡小文件的分布。以后可能会自动后台进行metadata的balance。而且鉴于lzo平均2.08的压缩率,磁盘利用率会提高很多,尤其是对于大量的文本配置文件、源代码等。
    再说一说snapshot这个吸引人的特性,snapshot就是依据现有的subvolume新建一个subvolume,有点像OO语言中的引用,对一个subvolume创建一个快照后,两者是平等的;一个文件有引用计数,可以在多个snapshot中被引用,或者由cp --reflink=always创建一个引用(目前cp的reflink不能做到跨subvolume引用,补丁还未合并),当引用数降为零时文件才被删除;和硬链接不同的是,当文件在一个快照中被修改时会新复制一份储存在这个快照中,而不会影响到别的引用,这就是copy-on-write。这样的快照能充分节省空间。我们来演示一下:
    首先,我们要挂载总结点

mount -o subvolid=0 /dev/sdaX /mnt

cd到/mnt,我们创建一个对于rootfs的快照:

btrfs subvolume snapshot rootfs 20120516

建议:

touch 20120516/This-is-snapshot-20120516

注意:btrfs的快照不具有递归性,即如果rootfs中还有二级subvolume,那么快照中不会包含二级subvolume的文件,而是包含一个对二级subvolume的引用,类似于这样:

0----rootfs--------------------------------------------subvol2-----文件a
    |                     |                               ^
    |                     -----------文件夹b--文件c       |
    |                     ---文件d      ^        ^        |
    |                         ^         |        |        |
    |                         |         |        |        |
    --20120516---------------------------------------------

在rootfs中修改文件d、c会复制一份新的,对20120516不可见;而修改a的话在rootfs和20120516中都能看到。
    所以为什么我们之前分了三个subvolume:
1、一般灾难都是/所致,所以不需要把/home也整个备份,而且/home中修改频繁,很容易创造大量新文件,占用空间;
2、能够对/home单独snapshot
3、pkg是pacman的包所在地,一般不需要备份。这样对rootfs快照后pkg不会被打进去,使用pacman -Scc后也不会因为20120516中仍有对其中软件包的引用而导致不能释放硬盘空间。

    灾难恢复也变得很简单了,回滚到上一个/的状态,只要在开机时编辑grub菜单linux项里把rootflags=subvol=rootfs改成rootflags=subvol=20120516就回滚了。开机后如果你发现/下有刚才touch的文件This-is-snapshot-20120516,那么你就成功进入了快照中!
    快照也是可读写的,所以对于/home的快照恢复不需要重新挂载一边,找个地方把/dev/sdaX挂上就能在里面把需要的文件cp出来。当然你想回滚整个/home的状态那么就改fstab好了。
    定期创建和清理不需要的快照是个好习惯!清理快照能解除引用,释放你在当前系统中删除的文件的空间。对于重要文件,还是建议不要完全依赖快照,在别的文件系统或网络上留一个备份为好。

    最后说一下问题和修复的办法,我没有遇到过问题,就是摘录几个方法:
1、mount选项里的recovery会尝试找到上一次的节点,比如写入一个文件一半后断电,ext4下这个文件会损坏,而btrfs你可能会得到这个文件写入前的版本。所有没有执行flush的操作都会导致得到旧版本的文件。
2、btrfsck。btrfs有fsck,但是api和fsck.ext4等不同,所以还没有集成进去,mkinitcpio里也没有。建议在initramdisk里包含这个(mkinitcpio.conf的BINARY="btrfsck"),如果文件系统错误得挂载不了了,在ramfs里执行btrfsck /dev/sdaX
3、AUR里有一个mkinitcpio-btrfs,是方便回滚的脚本。我不太喜欢它的命名风格(当前/叫__active,我叫rootfs的,备份在__snapshot subvolume里,而我放在根节点下),所以我没用。经常回滚的可以参考一下。

    还有几个提醒:
1、备份备份备份!光有回滚不能保证你的数据安全。
2、/boot是独立的,所以没有内核回滚能力,请自行备份内核。
3、(和2矛盾)如果用新版本内核提供的挂载选项挂载过btrfs文件系统,再用老版本内核可能会挂载出错!请仔细看挂载选项后表明的内核版本。

    最后有一个疑问:为什么oracle要研发btrfs呢?当时sun的solaris和linux在服务器领域有竞争(我想他们不会认为bsd有和他们竞争的能力),sun的ZFS是一大法宝,而且采用CDDL发布,使Linux无法使用;oracle一方面闭源了ZFS,另一方面却开发GPL的btrfs,GPL意味着它不能将btrfs私有化。Oracle想什么呢?

参考资料:



%68%74%74%70%3a%2f%2f%67%6d%67%31%33%37%2e%67%6f%6f%67%6c%65%63%6f%64%65%2e%63%6f%6d%2f%66%69%6c%65%73%2f%62%74%72%66%73%25%45%36%25%39%36%25%38%37%25%45%34%25%42%42%25%42%36%25%45%37%25%42%33%25%42%42%25%45%37%25%42%42%25%39%46%25%45%34%25%42%44%25%42%46%25%45%37%25%39%34%25%41%38%25%45%38%25%41%46%25%41%36%25%45%38%25%41%37%25%41%33%2e%70%64%66&ei=TtBLUc3rGcmrlAWbg4DwCw&usg=AFQjCNHwowLF7K8X2FElP12YDUFWIMYogA&sig2=RVahrpaz9_ERGGsvZR6p2g
阅读(2963) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~