Btrfs文件系统在CentOS中的应用

 

Btrfs作为Linux下一代文件系统与zfs有着许多相似的功能。

扩展性 (scalability) 相关的特性,btrfs 最重要的设计目标是应对大型机器对文件系统的扩展性要求。 Extent,B-Tree 和动态 inode 创建等特性保证了 btrfs 在大型机器上仍有卓越的表现,其整体性能而不会随着系统容量的增加而降低。

其次是数据一致性 (data integrity) 相关的特性。系统面临不可预料的硬件故障,Btrfs 采用 COW 事务技术来保证文件系统的一致性。

btrfs 还支持 checksum,避免了 silent corrupt 的出现。而传统文件系统则无法做到这一点。

第三是和多设备管理相关的特性。 Btrfs 支持创建快照 (snapshot),和克隆 (clone) 。 btrfs 还能够方便的管理多个物理设备,使得传统的卷管理软件变得多余。

最后是其他难以归类的特性。这些特性都是比较先进的技术,能够显著提高文件系统的时间 / 空间性能,包括延迟分配,小文件的存储优化,目录索引等。

btrfs 文件系统中所有的 metadata 都由 BTree 管理。使用 BTree 的主要好处在于查找,插入和删除操作都很高效。可以说 BTree 是 btrfs 的核心。

它的特性我已经download一篇官方的文档,以供参照

下面的操作是为了使CentOS能够方便使用btrfs

我的操作系统是centos6.2内核版本是2.6.32

yum install rpm-build fuse-devel libtool libtool-ltdl-devel boost-devel libedit-devel git e2fsprogs-devel

wget http://www.kernel.org/pub/linux/kernel/people/mason/btrfs/btrfs-progs-0.19.tar.gz

wget http://downloads.sourceforge.net/e2fsprogs/e2fsprogs-1.41.14.tar.gz

tar xvzf  e2fsprogs-1.41.14.tar.gz

进入e2fsprogs-1.41.14目录后执行

/configure –prefix=/usr/local/e2fsprogs

make

make install

然后把uuid目录拷过去

cp -r lib/uuid/    /usr/include/  \\这一步是为下面编译准备uuid/uuid.h库的

ln -sv /lib/ln -s /lib/libuuid.so.1.3.0 /usr/lib/libuuid.so  \\这步是为了防止编译时报错can not find -luuid 这个错误的

tar xf btrfs-progs-0.19.tar.gz

cd btrfs-progs-0.19

在btrfsck.c中包含头文件stat.h 格式如下        \\这步是为了防止编译中报错

#including <sys/stat.h>

make

make install

试使用btrfs文件系统

关机添加一块新磁盘 系统默认识别为/dev/sdb

Centos默认将btrfs编译成模块,如果想使用需要事先加载
1.[root@localhost ~]# modprobe btrfs 
2. 
3.[root@localhost ~]# lsmod |grep btrfs 
4. 
5.btrfs                 534417  0 
6. 
7.zlib_deflate           19141  1 btrfs 
8. 
9.lzo_decompress          2155  1 btrfs 
10. 
11.lzo_compress            1979  1 btrfs 
12. 
13.libcrc32c                841  1 btrfs

 

分区 #fdisk /dev/sdb  建立一个分区1 使用默认的设置

格式化

#mkfs.btrfs /dev/sdb1
1.[root@localhost ~]# btrfs-debug-tree /dev/sdb1 
2. 
3.root tree 
4. 
5.leaf 29364224 items 9 free space 2349 generation 7 owner 1 
6. 
7.fs uuid c6fab1d8-9a6c-47bb-86d9-55a7dac98bff 
8. 
9.chunk uuid a877c5ab-4296-4ff0-9f8e-9d6d26757a0a 
10. 
11.         item 0 key (EXTENT_TREE ROOT_ITEM 0) itemoff 3756 itemsize 239 
12. 
13.                   root data bytenr 29368320 level 0 dirid 0 refs 1 
14. 
15.         item 1 key (DEV_TREE ROOT_ITEM 0) itemoff 3517 itemsize 239 
16. 
17.                   root data bytenr 29372416 level 0 dirid 0 refs 1 
18. 
19.         item 2 key (FS_TREE INODE_REF 6) itemoff 3500 itemsize 17 
20. 
21.                   inode ref index 0 namelen 7 name: default 
22. 
23.         item 3 key (FS_TREE ROOT_ITEM 0) itemoff 3261 itemsize 239 
24. 
25.                   root data bytenr 29360128 level 0 dirid 256 refs 1 
26. 
27.         item 4 key (ROOT_TREE_DIR INODE_ITEM 0) itemoff 3101 itemsize 160 
28. 
29.                   inode generation 4 size 0 block group 0 mode 40555 links 1 
30. 
31.         item 5 key (ROOT_TREE_DIR INODE_REF 6) itemoff 3089 itemsize 12 
32. 
33.                   inode ref index 0 namelen 2 name: .. 
34. 
35.         item 6 key (ROOT_TREE_DIR DIR_ITEM 2378154706) itemoff 3052 itemsize 37 
36. 
37.                   location key (FS_TREE ROOT_ITEM 18446744073709551615) type 2 
38. 
39.                   namelen 7 datalen 0 name: default 
40. 
41.         item 7 key (CSUM_TREE ROOT_ITEM 0) itemoff 2813 itemsize 239 
42. 
43.                   root data bytenr 29376512 level 0 dirid 0 refs 1 
44. 
45.         item 8 key (DATA_RELOC_TREE ROOT_ITEM 0) itemoff 2574 itemsize 239 
46. 
47.                   root data bytenr 29380608 level 0 dirid 256 refs 1 
48. 
49.chunk tree 
50. 
51.leaf 20971520 items 6 free space 3283 generation 5 owner 3 
52. 
53.fs uuid c6fab1d8-9a6c-47bb-86d9-55a7dac98bff

btrfs-debug-tree 这个命令能够显示各个 BTree 的变化情况,从而进一步理解每一个文件系统功能的内部实现细节

创建 Snapshot

下面的例子中,创建快照 snap1 时系统存在 2 个文件。创建快照之后,对 test1 的内容进行修改。再回到 snap1,打开 test1 文件,可以看到 test1 的内容依旧是之前的内容。
1.#ls /Bfs 
2. test1 test2 
3. #vi test1 
4. this is a test 
5. #btrfsctl – s snap1 /Bfs 
6.#vi test1 
7. Test1 is modified 
8. #cd /Bfs/snap1 
9. #cat test1 
10. this is a test

可以从上面的例子看到,快照 snap1 保存的内容不会被后续的写操作所改变。

原创文章,作者:会飞的猪,如若转载,请注明出处:http://www.178linux.com/11217

(0)
会飞的猪会飞的猪
上一篇 2016-01-19 20:59
下一篇 2016-01-21 14:03

相关推荐

  • N22-love cat第19周 – 基于Apache + Tomcat +2种模式实现负载均衡以及配置集群seesion服务

      基于Apache+Tomcat实现负载均衡和集群服务 一、概念     从Tomcat权威指南中的测试数据,我们不难发现,对于静态页面的数据,Tomcat的处理速度比Apache要快很多,所以为什么要整合apache虽然在处理静态页面速度上比Apache快,但是Tomcat经不起大的并发量容易死。为此,我们就需要A…

    Linux干货 2016-08-29
  • linux学习心得

    Linux学习心得 之前没怎么了解过linux运维,机缘巧合来到了这里,刚刚开始一脸蒙圈,或者说现在仍然是,不过最大的收获是我在这里真正认真学习了,有了一个端正的态度,一切都是好的开始。 这一周,我学习了linux的发展史,如何安装系统,一些简单的命令等。。。。下面我一一介绍一下,初学者,可能简单粗暴,多多指教! 系统安装: 1:首先用光盘进行linuxIS…

    2017-07-16
  • Mysql 多表联合查询效率分析及优化

    1. 多表连接类型 1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如:  SELECT * FROM table1 CROSS JOIN table2  &nb…

    Linux干货 2015-04-13
  • Bash Shell脚本基础-变量类型-位置变量

    Bash Shell脚本基础–变量类型–位置变量   §·bash shell脚本编程概述: 1 §·bash shell脚本中的变量 2     *什么是变量 2     *变量的类型 2     *ba…

    Linux干货 2016-08-12
  • 阿里巴巴开源项目nginx_concat_module企业部署实例

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1580194        公司的前端开发工程师今天找我,让我给他搞下淘宝的一个开源项目 nginx_concat_m…

    Linux干货 2016-08-15
  • TCP协议详解

    TCP协议详解。     I,TCP数据段报文解释 1,tcp数据段头部20(固定)+40(可变)字节构成,此数据由报头偏移位构成,计算单位为四个字节 表示TCP报文段的首部长度,共4位,由于TCP首部包含一 个长度可变的选项部分,需要指定这个TCP报文段到底有多长。它指 出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。…

    Linux干货 2017-06-26