Loading... <p> </p> <p>Btrfs作为Linux下一代文件系统与zfs有着许多相似的功能。</p> <p>扩展性 (scalability) 相关的特性,btrfs 最重要的设计目标是应对大型机器对文件系统的扩展性要求。 Extent,B-Tree 和动态 inode 创建等特性保证了 btrfs 在大型机器上仍有卓越的表现,其整体性能而不会随着系统容量的增加而降低。</p> <p>其次是数据一致性 (data integrity) 相关的特性。系统面临不可预料的硬件故障,Btrfs 采用 COW 事务技术来保证文件系统的一致性。</p> <p>btrfs 还支持 checksum,避免了 silent corrupt 的出现。而传统文件系统则无法做到这一点。</p> <p>第三是和多设备管理相关的特性。 Btrfs 支持创建快照 (snapshot),和克隆 (clone) 。 btrfs 还能够方便的管理多个物理设备,使得传统的卷管理软件变得多余。</p> <p>最后是其他难以归类的特性。这些特性都是比较先进的技术,能够显著提高文件系统的时间 / 空间性能,包括延迟分配,小文件的存储优化,目录索引等。</p> <p>btrfs 文件系统中所有的 metadata 都由 BTree 管理。使用 BTree 的主要好处在于查找,插入和删除操作都很高效。可以说 BTree 是 btrfs 的核心。</p> <p>它的特性我已经download一篇官方的文档,以供参照</p> <p>下面的操作是为了使CentOS能够方便使用btrfs</p> <p>我的操作系统是centos6.2内核版本是2.6.32</p> <p>yum install rpm-build fuse-devel libtool libtool-ltdl-devel boost-devel libedit-devel git e2fsprogs-devel</p> <p>wget http://www.kernel.org/pub/linux/kernel/people/mason/btrfs/btrfs-progs-0.19.tar.gz</p> <p>wget http://downloads.sourceforge.net/e2fsprogs/e2fsprogs-1.41.14.tar.gz</p> <p>tar xvzf e2fsprogs-1.41.14.tar.gz</p> <p>进入e2fsprogs-1.41.14目录后执行</p> <p>/configure –prefix=/usr/local/e2fsprogs</p> <p>make</p> <p>make install</p> <p>然后把uuid目录拷过去</p> <p>cp -r lib/uuid/ /usr/include/ \\这一步是为下面编译准备uuid/uuid.h库的</p> <p>ln -sv /lib/ln -s /lib/libuuid.so.1.3.0 /usr/lib/libuuid.so \\这步是为了防止编译时报错can not find -luuid 这个错误的</p> <p>tar xf btrfs-progs-0.19.tar.gz</p> <p>cd btrfs-progs-0.19</p> <p>在btrfsck.c中包含头文件stat.h 格式如下 \\这步是为了防止编译中报错</p> <p>#including <sys/stat.h></p> <p>make</p> <p>make install</p> <p>试使用btrfs文件系统</p> <p>关机添加一块新磁盘 系统默认识别为/dev/sdb</p> <p>Centos默认将btrfs编译成模块,如果想使用需要事先加载<br />1.[root@localhost ~]# modprobe btrfs <br />2. <br />3.[root@localhost ~]# lsmod |grep btrfs <br />4. <br />5.btrfs 534417 0 <br />6. <br />7.zlib_deflate 19141 1 btrfs <br />8. <br />9.lzo_decompress 2155 1 btrfs <br />10. <br />11.lzo_compress 1979 1 btrfs <br />12. <br />13.libcrc32c 841 1 btrfs</p> <p> </p> <p>分区 #fdisk /dev/sdb 建立一个分区1 使用默认的设置</p> <p>格式化</p> <p>#mkfs.btrfs /dev/sdb1<br />1.[root@localhost ~]# btrfs-debug-tree /dev/sdb1 <br />2. <br />3.root tree <br />4. <br />5.leaf 29364224 items 9 free space 2349 generation 7 owner 1 <br />6. <br />7.fs uuid c6fab1d8-9a6c-47bb-86d9-55a7dac98bff <br />8. <br />9.chunk uuid a877c5ab-4296-4ff0-9f8e-9d6d26757a0a <br />10. <br />11. item 0 key (EXTENT_TREE ROOT_ITEM 0) itemoff 3756 itemsize 239 <br />12. <br />13. root data bytenr 29368320 level 0 dirid 0 refs 1 <br />14. <br />15. item 1 key (DEV_TREE ROOT_ITEM 0) itemoff 3517 itemsize 239 <br />16. <br />17. root data bytenr 29372416 level 0 dirid 0 refs 1 <br />18. <br />19. item 2 key (FS_TREE INODE_REF 6) itemoff 3500 itemsize 17 <br />20. <br />21. inode ref index 0 namelen 7 name: default <br />22. <br />23. item 3 key (FS_TREE ROOT_ITEM 0) itemoff 3261 itemsize 239 <br />24. <br />25. root data bytenr 29360128 level 0 dirid 256 refs 1 <br />26. <br />27. item 4 key (ROOT_TREE_DIR INODE_ITEM 0) itemoff 3101 itemsize 160 <br />28. <br />29. inode generation 4 size 0 block group 0 mode 40555 links 1 <br />30. <br />31. item 5 key (ROOT_TREE_DIR INODE_REF 6) itemoff 3089 itemsize 12 <br />32. <br />33. inode ref index 0 namelen 2 name: .. <br />34. <br />35. item 6 key (ROOT_TREE_DIR DIR_ITEM 2378154706) itemoff 3052 itemsize 37 <br />36. <br />37. location key (FS_TREE ROOT_ITEM 18446744073709551615) type 2 <br />38. <br />39. namelen 7 datalen 0 name: default <br />40. <br />41. item 7 key (CSUM_TREE ROOT_ITEM 0) itemoff 2813 itemsize 239 <br />42. <br />43. root data bytenr 29376512 level 0 dirid 0 refs 1 <br />44. <br />45. item 8 key (DATA_RELOC_TREE ROOT_ITEM 0) itemoff 2574 itemsize 239 <br />46. <br />47. root data bytenr 29380608 level 0 dirid 256 refs 1 <br />48. <br />49.chunk tree <br />50. <br />51.leaf 20971520 items 6 free space 3283 generation 5 owner 3 <br />52. <br />53.fs uuid c6fab1d8-9a6c-47bb-86d9-55a7dac98bff</p> <p>btrfs-debug-tree 这个命令能够显示各个 BTree 的变化情况,从而进一步理解每一个文件系统功能的内部实现细节</p> <p>创建 Snapshot</p> <p>下面的例子中,创建快照 snap1 时系统存在 2 个文件。创建快照之后,对 test1 的内容进行修改。再回到 snap1,打开 test1 文件,可以看到 test1 的内容依旧是之前的内容。<br />1.#ls /Bfs <br />2. test1 test2 <br />3. #vi test1 <br />4. this is a test <br />5. #btrfsctl – s snap1 /Bfs <br />6.#vi test1 <br />7. Test1 is modified <br />8. #cd /Bfs/snap1 <br />9. #cat test1 <br />10. this is a test</p> <p>可以从上面的例子看到,快照 snap1 保存的内容不会被后续的写操作所改变。</p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信