Btrfs文件系統

一:概述

    1.1簡介

        Btrfs被稱為是下一代Linux文件系統。通常念成 Butter FS,Better FS 或B-tree FS。它采用了很多先進的文件系統設計,不僅解決了 ext2/3的擴展性問題,支持寫時拷貝(copy-on-write),支持高效的snapshot和clone,使用b-tree作為存儲的數據結構。讓人們看到了下一代文件系統所具有的許多其他特性。

    1.2原理及特性
    擴展性相關特性
        B-Tree:btrfs文件系統中所有的metadata都由BTree管理。使用 BTree 的主要好處在于查找,插入和刪除操作都很高效。
        基于Extent的文件存儲:Extent就是一些連續的block,一個extent由起始的block加上長度進行指定,故Extent 能有效地減少元數據開銷。
        動態inode分配:每一個inode只是BTree中的一個節點,用戶可以無限制地任意插入新的inode,其物理存儲位置是動態分配的。所以btrfs沒有對文件個數的限制。
        SSD優化支持:Btrfs文件系統針對SSD的分布寫操作技術特性做優化,不僅能提高SSD的使用壽命,而且能提高讀寫性能。
    數據一致性相關特性
        COW(copy-on-write):即每次寫磁盤數據時,先將更新數據寫入一個新的“塊”,當新數據寫入成功之后,再更新相關的數據結構指向新 “塊”。
        Checksum技術:保證了數據的可靠性,避免silent corruption現象。因硬件原因,從磁盤上讀出的數據會出錯,而且這樣的錯誤是不會被上層軟件所察覺。解決這個問題的方法是保存數據的校驗和,在讀取數據后檢查校驗和。如果不符合,便知道數據出現了錯誤。
    多設備管理特性
        Subvolume(子卷管理):采用subvolume技術,可以將一個大的文件系統可以被劃分為多個子文件系統,這些子文件系統共享底層的設備空間,在需要磁盤空間時便從底層設備中分配。
        Snapshot(快照管理):快照是對文件系統某一時刻的完全備份。建立快照之后,對文件系統的修改不會影響快照中的內容。
        軟件RAID:基于多物理磁盤設備的前提條件下,Btrfs對metadata及date支持軟件RAID技術,使其數據安全性及冗余性更高。默認情況下對metadata實施RAID1。

二:命令指令

    2.1操作系統環境&軟件版本信息

# cat /proc/version
Linux version 3.10.0-327.13.1.el7.x86_64 (builder@kbuilder.dev.centos.org) 
(gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Thu Mar 31 16:04:38 UTC 2016

# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)     #Minimal

# btrfs version
btrfs-progs v3.19.1

# mkfs.btrfs -V
mkfs.btrfs, part of btrfs-progs v3.19.1

    2.2安裝
        Centos_7.2系統默認集成Btrfs及相關工具

    2.3命令說明

mkfs.btrfs [options] <device> [<device>...]            #用于創建Btrfs文件系統
常用選項:
    -d PROFILE    #data存儲級別:raid0, raid1, raid5, raid6, raid10, dup or single
    -f    #強制覆蓋已存在的文件系統
    -L LABEL    #設置磁盤卷表
    -m PROFILE    #metadata存儲級別:raid0, raid1, raid5, raid6, raid10, dup or single
    -n SIZE    #設置nodesize大小
    -O LIST    #設置或者羅列文件系統特性
    -U UUID    #指定UUID設備號
btrfs <command> [<args>]            #對Btrfs文件系統進行管理及控制
常用子命令:
    balance    #磁盤數據分布平衡操作
    check    #btrfs磁盤掃描&校驗
    device    #磁盤物理設備管理及控制
    filesystem    #文件系統的信息查詢及修改
    subvolume    #子卷管理&快照管理
btrfs-convert    #將ext2文件系統轉換成btrfs文件系統
常用選項:
        -r    #將btrfs文件系統還原回ext2文件系統

三:使用教程

    前期準備工作:為虛擬機添加4塊磁盤

新建位圖圖像.bmp

# fdisk -l
Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/sdd: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/sde: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/sdc: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000187db
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048     3123199     1048576   82  Linux swap / Solaris
/dev/sda3         3123200    83886079    40381440   83  Linux

    3.1創建btrfs文件系統

# mkfs.btrfs -L mybtrfs -d raid5 -m raid5 /dev/sdb /dev/sdc /dev/sdd 
btrfs-progs v3.19.1
See http://btrfs.wiki.kernel.org for more information.

Turning ON incompat feature 'extref': increased hardlink limit per file to 65536
Turning ON incompat feature 'raid56': raid56 extended format
Turning ON incompat feature 'skinny-metadata': reduced-size metadata extent refs
adding device /dev/sdc id 2
adding device /dev/sdd id 3
fs created label mybtrfs on /dev/sdb
    nodesize 16384 leafsize 16384 sectorsize 4096 size 6.00GiB

創建btrfs文件系統,指定卷標為 mybtrfs,并指定matadata與data數據存儲級別為raid5(PS:需要3盤磁盤支持,raid10需要4塊,raid1&raid0需要2塊)

    3.2查看btrfs文件系統相關信息

# btrfs filesystem show
Label: 'mybtrfs'  uuid: b8557848-3dde-41b7-8025-056e8e7d2938
    Total devices 3 FS bytes used 112.00KiB
    devid    1 size 2.00GiB used 437.50MiB path /dev/sdb
    devid    2 size 2.00GiB used 417.50MiB path /dev/sdc
    devid    3 size 2.00GiB used 417.50MiB path /dev/sdd

# blkid /dev/sdb /dev/sdc /dev/sdd
/dev/sdb: LABEL="mybtrfs" UUID="b8557848-3dde-41b7-8025-056e8e7d2938" UUID_SUB="ba10169d-0487-41cd-a27c-0c4f3c175be3" TYPE="btrfs" 
/dev/sdc: LABEL="mybtrfs" UUID="b8557848-3dde-41b7-8025-056e8e7d2938" UUID_SUB="666ffc52-9c45-40e5-aaf9-869746ae5d7c" TYPE="btrfs" 
/dev/sdd: LABEL="mybtrfs" UUID="b8557848-3dde-41b7-8025-056e8e7d2938" UUID_SUB="d2927b8d-ac87-4191-8edf-c19658b67245" TYPE="btrfs"

    3.3掛載并使用btrfs文件系統

# mount -t btrfs LABEL=mybtrfs /mnt
# mount -t btrfs -o SSD LABEL=mybtrfs /mnt    #SSD 優化選項
# mount
/dev/sdb on /mnt type btrfs (rw,relatime,seclabel,space_cache)
# umount /mnt/

    3.4掛載設備磁盤空間的增加及減少(邏輯空間的收縮及擴張)

# btrfs filesystem resize -1G /mnt    #掛載空間縮小1G空間
Resize '/mnt' of '-1G'
# df -Th
/dev/sdb       btrfs     5.0G   17M  4.2G   1% /mnt

# btrfs filesystem resize max /mnt    #空間增長還原至邏輯空間最大值
Resize '/mnt' of 'max'
# df -Th
/dev/sdb       btrfs     6.0G   17M  5.2G   1% /mnt

    3.5磁盤空間的增加及減少(物理磁盤設備的增加及減少)

# btrfs device add /dev/sde /mnt    #添加新物理磁盤到現有btrfs文件系統中

# btrfs filesystem show
Label: 'mybtrfs'  uuid: b8557848-3dde-41b7-8025-056e8e7d2938
    Total devices 4 FS bytes used 256.00KiB
    devid    1 size 2.00GiB used 437.50MiB path /dev/sdb
    devid    2 size 2.00GiB used 417.50MiB path /dev/sdc
    devid    3 size 2.00GiB used 417.50MiB path /dev/sdd
    devid    4 size 2.00GiB used 0.00B path /dev/sde

# btrfs balance start /mnt    #新添加進的磁盤空間利用率為0,為使數據平均分布在各個磁盤,使用balance子命令平衡數據分布
Done, had to relocate 6 out of 6 chunks
# btrfs filesystem show
Label: 'mybtrfs'  uuid: b8557848-3dde-41b7-8025-056e8e7d2938
    Total devices 4 FS bytes used 384.00KiB
    devid    1 size 2.00GiB used 416.00MiB path /dev/sdb
    devid    2 size 2.00GiB used 416.00MiB path /dev/sdc
    devid    3 size 2.00GiB used 416.00MiB path /dev/sdd
    devid    4 size 2.00GiB used 416.00MiB path /dev/sde

# btrfs device delete /dev/sde /mnt    #刪除新物理磁盤到現有btrfs文件系統中
# btrfs filesystem show
Label: 'mybtrfs'  uuid: b8557848-3dde-41b7-8025-056e8e7d2938
    Total devices 3 FS bytes used 320.00KiB
    devid    1 size 2.00GiB used 480.00MiB path /dev/sdb
    devid    2 size 2.00GiB used 480.00MiB path /dev/sdc
    devid    3 size 2.00GiB used 480.00MiB path /dev/sdd
#PS:刪除物理磁盤時,切記要檢查原btrfs文件系統中文件總容量大小。確保
# (磁盤刪除前磁盤空間總容量) - (磁盤刪除后磁盤空間總容量) > (磁盤刪除前磁盤文件總容量)

    3.6子卷創建管理&快照管理

btrfs子卷即可理解成linux文件系統"根"目錄及下掛節點目錄,可以把btrfs子卷與根的概念理解成獨立的文件目錄系統結構。

“根”節點即是btrfs磁盤系統最上層掛載點,下掛文件目錄節點既可理解成是btrfs子卷。

子卷可以被單獨掛載使用,但是如果上級目錄或頂層節點被掛載使用后,其子卷自動被掛載。

btrfs快照功能實則是子卷管理的一種衍生應用,即對需快照文件夾創建一個具備映射功能的子卷

# btrfs subvolume create /mnt/test_sub    #創建子卷,該子卷可獨立掛載在其他目錄節點上
Create subvolume '/mnt/test_sub'

# ll /mnt/
total 0
drwxr-xr-x. 1 root root 0 Apr 15 14:58 test_sub

# btrfs subvolume delete /mnt/test_sub    #刪除子卷
# ll /mnt/    #原文件系統文件列表
total 4
-rw-r--r--. 1 root root 501 Apr 15 15:06 fstab

# btrfs subvolume snapshot /mnt /mnt/snapshot_dir/    #創建/mnt文件夾的快照文件夾/mnt/snapshot_dir/
Create a snapshot of '/mnt' in '/mnt/snapshot_dir'    #可通過修改/mnt/fstab文件查看快照功能的實現

# btrfs subvolume delete snapshot_dir    #刪除快照

    3.7btrfs & ext2fs 格式轉換

# btrfs-convert /dev/sda3    #ext2 --> btrfs
# btrfs-convert -r /dev/sda3    #btrfs --> ext2


四:項目拓展

    編撰ing~~~

原創文章,作者:蘇門答臘,如若轉載,請注明出處:http://www.www58058.com/14770

(0)
蘇門答臘蘇門答臘
上一篇 2016-04-19 11:37
下一篇 2016-04-19

相關推薦

  • 說說linux權限管理(1)

    在這篇文章當中你可以看到: 1、linux系統文件普通權限 2、文件所屬主的設置,組的指定 3、特殊權限 4、acl權限 5、su命令及其注意事項和sudo權限 6、權限管理的注意點 0、首先,在linux下用戶賬戶是分角色的,由于角色的不同,每個角色,每個用戶的的權限和所能完成的任務也不同。而在實際管理中,用戶的角色是通過UID(用戶id號)來標識的,每個…

    Linux干貨 2016-04-30
  • 作業–權限管理

    1、當用戶wangcai對/testdir目錄無寫權限時,該目錄下的只讀文件file1是否可修改和刪除? [root@liang testdir]# su wangcai [wangcai@liang testdir]$ ll -a 總用量 8 drwxr-xr-x. &nbsp…

    Linux干貨 2016-08-05
  • 計算機基礎

    小白入門

    2018-03-08
  • Codis集群3.03安裝配置基礎

    Codis基礎 01.codis是一個分布式的Redis解決方案,對于上層的應用來說,連接Codis Proxy和連接原生的Redis Server沒有明顯的區別。 codis底層會處理請求的轉發,不停機的數據遷移等工作,所有后邊的一切事情,對于前面客戶端來說是透明的,可以簡單的認為后邊連接是一個內存無限大的Redis服務。 codis架構圖如下: 02.c…

    Linux干貨 2016-09-26
  • N22第三周作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可 [root@localhost ~]# who |cut -d' ' -f1 |sort -u   root   xuc 2、取出…

    Linux干貨 2016-08-29
  • 文本處理以及shell編程知識點

    文本處理、shell

    Linux干貨 2018-03-18
欧美性久久久久