btrfs作为Linux下一代文件系统与zfs有着许多相似的功能
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 格式如下 \\这步是为了防止编译中报错
- #include <sys/stat.h>
make
make install
试使用btrfs文件系统
关机添加一块新磁盘 系统默认识别为/dev/sdb
Centos默认将btrfs编译成模块,如果想使用需要事先加载
- [root@localhost ~]# modprobe btrfs
- [root@localhost ~]# lsmod |grep btrfs
- btrfs 534417 0
- zlib_deflate 19141 1 btrfs
- lzo_decompress 2155 1 btrfs
- lzo_compress 1979 1 btrfs
- libcrc32c 841 1 btrfs
分区 #fdisk /dev/sdb 建立一个分区1 使用默认的设置
格式化
#mkfs.btrfs /dev/sdb1
- [root@localhost ~]# btrfs-debug-tree /dev/sdb1
- root tree
- leaf 29364224 items 9 free space 2349 generation 7 owner 1
- fs uuid c6fab1d8-9a6c-47bb-86d9-55a7dac98bff
- chunk uuid a877c5ab-4296-4ff0-9f8e-9d6d26757a0a
- item 0 key (EXTENT_TREE ROOT_ITEM 0) itemoff 3756 itemsize 239
- root data bytenr 29368320 level 0 dirid 0 refs 1
- item 1 key (DEV_TREE ROOT_ITEM 0) itemoff 3517 itemsize 239
- root data bytenr 29372416 level 0 dirid 0 refs 1
- item 2 key (FS_TREE INODE_REF 6) itemoff 3500 itemsize 17
- inode ref index 0 namelen 7 name: default
- item 3 key (FS_TREE ROOT_ITEM 0) itemoff 3261 itemsize 239
- root data bytenr 29360128 level 0 dirid 256 refs 1
- item 4 key (ROOT_TREE_DIR INODE_ITEM 0) itemoff 3101 itemsize 160
- inode generation 4 size 0 block group 0 mode 40555 links 1
- item 5 key (ROOT_TREE_DIR INODE_REF 6) itemoff 3089 itemsize 12
- inode ref index 0 namelen 2 name: ..
- item 6 key (ROOT_TREE_DIR DIR_ITEM 2378154706) itemoff 3052 itemsize 37
- location key (FS_TREE ROOT_ITEM 18446744073709551615) type 2
- namelen 7 datalen 0 name: default
- item 7 key (CSUM_TREE ROOT_ITEM 0) itemoff 2813 itemsize 239
- root data bytenr 29376512 level 0 dirid 0 refs 1
- item 8 key (DATA_RELOC_TREE ROOT_ITEM 0) itemoff 2574 itemsize 239
- root data bytenr 29380608 level 0 dirid 256 refs 1
- chunk tree
- leaf 20971520 items 6 free space 3283 generation 5 owner 3
- fs uuid c6fab1d8-9a6c-47bb-86d9-55a7dac98bff
btrfs-debug-tree 这个命令能够显示各个 BTree 的变化情况,从而进一步理解每一个文件系统功能的内部实现细节
创建 Snapshot
下面的例子中,创建快照 snap1 时系统存在 2 个文件。创建快照之后,对 test1 的内容进行修改。再回到 snap1,打开 test1 文件,可以看到 test1 的内容依旧是之前的内容。
- #ls /Bfs
- test1 test2
- #vi test1
- this is a test
- #btrfsctl – s snap1 /Bfs
- #vi test1
- Test1 is modified
- #cd /Bfs/snap1
- #cat test1
- this is a test
可以从上面的例子看到,快照 snap1 保存的内容不会被后续的写操作所改变。
缩减空间:
这个操作不建议使用,缩减磁盘可能会导致数据的丢失,如果一定要做,请做好备份,或想上面的步骤做一个镜像
- [root@localhost ~]# df
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/mapper/VolGroup-lv_root
- 18102140 3151972 14030616 19% /
- tmpfs 515396 0 515396 0% /dev/shm
- /dev/sda1 495844 50384 419860 11% /boot
- /dev/sdb1 10490412 64 8364544 1% /Bfs
- [root@localhost ~]# btrfsctl -r -3G /Bfs/
- operation complete
- Btrfs Btrfs v0.19
- [root@localhost ~]# df
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/mapper/VolGroup-lv_root
- 18102140 3151972 14030616 19% /
- tmpfs 515396 0 515396 0% /dev/shm
- /dev/sda1 495844 50384 419860 11% /boot
- /dev/sdb1 7344684 64 5218816 1% /Bfs
追加磁盘:
将sdc追加到Bfs中
- [root@localhost ~]# df
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/mapper/VolGroup-lv_root
- 18102140 3151972 14030616 19% /
- tmpfs 515396 0 515396 0% /dev/shm
- /dev/sda1 495844 50384 419860 11% /boot
- /dev/sdb1 7344684 64 5218816 1% /Bfs
- [root@localhost ~]# btrfs-vol -a /dev/sdc /Bfs/
- ioctl returns 0
- [root@localhost ~]# df
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/mapper/VolGroup-lv_root
- 18102140 3151972 14030616 19% /
- tmpfs 515396 0 515396 0% /dev/shm
- /dev/sda1 495844 50384 419860 11% /boot
- /dev/sdb1 28316204 64 26189312 1% /Bfs
同理 btrfs-vol -r DEV mount_point 移除设备