btrfs文件系統在centos中的應用

btrfs作爲Linux下一代文件系統與zfs有着許多相似的功能

  • 擴展性 (scalability) 相關的特性,btrfs 最重要的設計目標是應對大型機器對文件系統的擴展性要求。 ExtentB-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 格式如下        \\這步是爲了防止編譯中報錯

  1. #include <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 
  14.  

分區 #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 
  11.   

可以從上面的例子看到,快照 snap1 保存的內容不會被後續的寫操作所改變。

 

 

縮減空間:

這個操作不建議使用,縮減磁盤可能會導致數據的丟失,如果一定要做,請做好備份,或想上面的步驟做一個鏡像 

  1. [root@localhost ~]# df 
  2.  
  3. Filesystem           1K-blocks      Used Available Use% Mounted on 
  4.  
  5. /dev/mapper/VolGroup-lv_root 
  6.  
  7.                       18102140   3151972  14030616  19% / 
  8.  
  9. tmpfs                   515396         0    515396   0% /dev/shm 
  10.  
  11. /dev/sda1               495844     50384    419860  11% /boot 
  12.  
  13. /dev/sdb1             10490412        64   8364544   1% /Bfs   
  14.  
  15. [root@localhost ~]# btrfsctl -r -3G /Bfs/ 
  16.  
  17. operation complete 
  18.  
  19. Btrfs Btrfs v0.19 
  20.  
  21. [root@localhost ~]# df 
  22.  
  23. Filesystem           1K-blocks      Used Available Use% Mounted on 
  24.  
  25. /dev/mapper/VolGroup-lv_root 
  26.  
  27.                       18102140   3151972  14030616  19% / 
  28.  
  29. tmpfs                   515396         0    515396   0% /dev/shm 
  30.  
  31. /dev/sda1               495844     50384    419860  11% /boot 
  32.  
  33. /dev/sdb1              7344684        64   5218816   1% /Bfs 

追加磁盤:

將sdc追加到Bfs中 

  1. [root@localhost ~]# df 
  2.  
  3. Filesystem           1K-blocks      Used Available Use% Mounted on 
  4.  
  5. /dev/mapper/VolGroup-lv_root 
  6.  
  7.                       18102140   3151972  14030616  19% / 
  8.  
  9. tmpfs                   515396         0    515396   0% /dev/shm 
  10.  
  11. /dev/sda1               495844     50384    419860  11% /boot 
  12.  
  13. /dev/sdb1              7344684        64   5218816   1% /Bfs 
  14.  
  15. [root@localhost ~]# btrfs-vol -a /dev/sdc /Bfs/ 
  16.  
  17. ioctl returns 0 
  18.  
  19. [root@localhost ~]# df 
  20.  
  21. Filesystem           1K-blocks      Used Available Use% Mounted on 
  22.  
  23. /dev/mapper/VolGroup-lv_root 
  24.  
  25.                       18102140   3151972  14030616  19% / 
  26.  
  27. tmpfs                   515396         0    515396   0% /dev/shm 
  28.  
  29. /dev/sda1               495844     50384    419860  11% /boot 
  30.  
  31. /dev/sdb1             28316204        64  26189312   1% /Bfs 

 

同理  btrfs-vol -r DEV mount_point  移除設備

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章