btrfs及壓縮工具
part1.btrfs文件系統介紹
Btrfs(B-tree 文件系統,通常念成 Butter FS,Better FS或B-tree FS),一種支持寫入時復制(COW)的文件系統,運行在 Linux 操作系統上,采用 GPL 授權。Oracle 於 2007 年對外宣布這項計劃,並發布源代碼,2014 年 8 月發布穩定版。目標是取代 Linux 當時主流的 ext3 文件系統,擺脫 ext3 的一些限制,特別是單文件大小,文件系統總大小和文件校驗,並加入 ext3 不支持的一些功能,比如可寫快照(writable snapshots)、快照的快照(snapshots of snapshots)、內建磁盤陣列(RAID),以及子卷(subvolumes)。Btrfs 也宣稱專註於容錯、修復及易於管理。
可以這樣理解,btrfs文件系統本來是打算替換掉ext3,4文件系統的,但是它本身是由oracle研發的,所以呢,redhat不樂意,就引用了unix開源給linux的xfs文件系統,來抗衡oralce對linux的侵入。
核心特性:
多物理卷支持,可以同時將sda,sdb等硬盤格式化為文件系統,支持raid,以及聯機“添加”“移除”“修改”;
寫時復制更新機制(CoW):復制、更新及替換指針,而非“就地”更新;數據及元數校驗碼checksum,子卷:sub_volume;快照:支持快照的快照,透明壓縮。
文件系統的創建
mkfs.btrfs
-L 'LABEL' 指明文件系統的LABEL
-d <type>:raid0 raid1 raid5,raid10 single 指定文件系統的級別
-m <profile>raid0 raid1 raid5,raid10 single dup
-O <feature> 格式化時就需要指明的特性
-O list-all 列出支持的所有feature
屬性查看
btrfs filesystem show
btrfs --help可以查看btrfs的幫助
掛載文件系統
mount -t btrfs /dev/sdb MOUNT_POINT
指定任何一個設備即可,再指明掛載點
透明壓縮機制
mount -o compress -{lzo|zlib} DEVICE MOUNT_POINT
查看btrfs諸多選項
[root@ad1 ~]# mkfs.btrfs -O list-all
查看btrfs的幫助
[root@ad1 ~]# man btrfs-filesystem
part2.創建btrfs文件系統
創建btrfs文件系統,指明卷標為mydata,使用db,dc,dd三塊磁盤
[root@ad1 ~]# mkfs.btrfs -L mydata /dev/sdb /dev/sdc /dev/sdd
顯示B-Tree文件系統
屬性查看
[root@ad1 ~]# btrfs filesystem show /dev/sdb
blkid device 也可以用來查看設備的詳細信息的
[root@ad1 ~]# blkid /dev/sdb /dev/sdc /dev/sdd
創建目錄並掛載
[root@ad1 ~]# mkdir /mydata [root@ad1 ~]# mount -t btrfs /dev/sdb /mydata [root@ad1 ~]# mount /dev/sdb on /mydata type btrfs (rw,relatime,seclabel,space_cache,subvolid=5,subvol=/)
將數據壓縮之後進行存放,這種行為對用戶來講是透明的,所以用戶無法感知
[root@ad1 ~]# mount -o compress=lzo /dev/sdb /mydata
將文件系統減少並查看
[root@ad1 ~]# btrfs filesystem resize -10G /mydata [root@ad1 ~]# btrfs filesystem df /mydata
給文件系統擴展一個設備,並查看
[root@ad1 ~]# btrfs device add /dev/sde /mydata [root@ad1 ~]# btrfs filesystem show /mydata
如何將原先盤的數據均衡到新加設備上
開始數據均衡
[root@ad1 ~]# btrfs balance start /mydata
移除sde硬盤,並查看
[root@ad1 ~]# btrfs device delete /dev/sde /mydata [root@ad1 ~]# btrfs filesystem show /mydata
修改數據的raid級別
[root@ad1 ~]# btrfs balance start -mconvert=raid5 /mydata
part3.btrfs文件系統還支持子卷
創建子卷
[root@ad1 mydata]# btrfs subvolume create /mydata/logs [root@ad1 mydata]# btrfs subvolume create /mydata/cache
查看子卷
[root@ad1 mydata]# btrfs subvolume list /mydata ID 264 gen 66 top level 5 path logs ID 265 gen 67 top level 5 path cache
掛載卷時,如果掛載的是頂級卷,那麽所有的卷都會自動掛載
[root@ad1 ~]# umount /mydata ##卸載文件系統 [root@ad1 ~]# mount -o subvol=logs /dev/sdb /mnt ##掛載子卷
顯示某個子卷文件系統的詳細信息
[root@ad1 ~]# btrfs subvolume show /mnt /mnt Name: logs UUID: 1fe8d9d3-0033-0941-a14a-18036ea187fe Parent UUID: - Received UUID: - Creation time: 2018-02-27 20:17:19 -0500 Subvolume ID: 264 Generation: 66 Gen at creation: 66 Parent ID: 5 Top level ID: 5 Flags: - Snapshot(s):
拷貝文件到/mnt下,然後卸載子卷,掛載btrfs文件系統至/mydata,查看數據是否存在
[root@ad1 ~]# cp /var/log/messages /mnt [root@ad1 ~]# umount /mnt [root@ad1 ~]# mount /dev/sdb /mydata [root@ad1 ~]# ls /mydata/logs messages
可以看到,btrfs文件系統中存在了此數據
我們還可以使用卷ID的形式掛載子卷
[root@ad1 ~]# mount /dev/sdb /mydata [root@ad1 ~]# btrfs subvolume list /mydata ID 264 gen 69 top level 5 path logs ID 265 gen 67 top level 5 path cache [root@ad1 ~]# mount -o subvolid=265 /dev/sdb /mnt ##卷ID形式掛載子卷 [root@ad1 ~]# cd /mnt
子卷的刪除,並查看
[root@ad1 ~]# btrfs subvolume delete /mydata/logs Delete subvolume (no-commit): '/mydata/logs' [root@ad1 ~]# btrfs subvolume list /mydata ID 265 gen 67 top level 5 path cache
btrfs及壓縮工具