linux文件系统btrfs的管理及应用(自用整理)
btrfs简介
btrfs(通常念成Butter FS,B-tree FS,Better FS),由Oracle于2007年宣布并进行中的COW(copy-on-write式,即写时复制)文件系统。目标是取代Linux目前的ext3文件系统,改善ext3的限制,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验和特性。加入目前ext3/4未支持的一些功能,例如可写的磁盘快照(snapshots),以及支持递归的快照(snapshots of snapshots),内建磁盘阵列(RAID)支持,支持子卷(Subvolumes)的概念,允许在线调整文件系统大小。
btrfs 文件系统中所有的 metadata 都由 BTree 管理。使用 BTree 的主要好处在于查找,插入和删除操作都很高效。可以说 BTree 是 btrfs 的核心。
FS Tree 管理文件相关的元数据,如 inode,dir; chunk tree管理设备,每一个磁盘设备都在chunk tree中有一个item; extent tree 管理磁盘空间分配,btrfs 每分配一段磁盘空间,便将该磁盘空间的信息插入到 extent tree 。查询extent tree将得到空闲的磁盘空间信息;Tree of root tree保存很多 BTree 的根节点。比如用户每建立一个快照,btrfs 便会创建一个FS Tree 。为了管理所有的树,btrfs 采用Tree of root tree来保存所有树的根节点;checksum Tree保存数据块的校验和。
btrfs应用
创建文件系统
首先使用fdisk命令创建 /dev/sda5 分区,使用mkfs.btrfs 命令建立一个 btrfs 格式的文件系统,并将其挂载到 /btrfsdisk 目录下
# mkfs.btrfs /dev/sda5
# mkdir /btrfsdisk
# mount -t btrfs /dev/sda5 /btrfsdisk
创建 subvolume
使用 btrfs 命令可以方便的建立 subvolume 。
# mkdir /mnt/subname
# btrfsctl -S sub1 /btrfsdisk
# mount -t btrfs -o subvol=sub1 /dev/sda5 /mnt/subname
创建 RAID(RAID0,RAID1)
# mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd
# mkfs.btrfs -m raid0 -d raid1 /dev/sdb /dev/sdc /dev/sdd
# mkfs.btrfs -d raid1 /dev/sdb /dev/sdc /dev/sdd
# mount /dev/sdb /mnt
# df /mnt #查看挂载数据和元数据详细的信息
数据压缩
# mount -o compress=lzo /dev/sdb /mnt #进行lzo数据压缩
# mount -o compress=zlib /dev/sdb /mnt #进行zlib数据压缩
# mount -o compress /dev/sdb /mnt #默认为zlib压缩
恢复挂载
# mount -o recovery /dev/sdb /mnt
系统缩减
# btrfs filesystem resize -2g /mnt #/mnt容量减小2G
# btrfs filesystem resize -500m /mnt
# btrfs filesystem resize +2g /mnt #/mnt容量增大2G
# btrfs filesystem resize max /mnt # /mnt容量增加到最大
增加/删除设备
# btrfs device add /dev/sde /mnt
# btrfs filesystem show /dev/sdb #查看文件系统使用信息
# btrfs filesystem balance /mnt #文件系统平衡
# umount /mnt
# mount -o degraded /dev/sdb /mnt
# btrfs devive delete /dev/sdc /mnt
同步文件系统
# btrfsctl -c /btrfdisk