btrfs管理及應用

一. 簡介

    btrfs有著強大的功能,它支持在多個及各種物理設備(包括RAID)上創建一個文件系統,并支持動態擴展或減小,支持快照功能,甚至快照的快照,支持子卷功能。

二. 如何使用btrfs文件系統?

    我的準備材料:3塊20G的硬盤

[root@localhost ~]# ls -l /dev | grep "\<[sh]d"
......
brw-rw----. 1 root disk      8,  16 Dec  6 10:33 sdb
brw-rw----. 1 root disk      8,  32 Dec  6 10:33 sdc
brw-rw----. 1 root disk      8,  48 Dec  6 10:33 sdd

    btrfs命令簡介:

    btrfs本身是個文件系統名稱,同時又是一個命令名,它是一個大的命令,其中有分成一些小命令,我們可以通過man btrfs看到, 常用的有:

       subvolume    <--子卷管理命令,可以man btrfs-subvolume查看器詳細信息;
           Create/delete/list/manage btrfs subvolume.
           See btrfs-subvolume(8) for details.
       filesystem    <--用來管理btrfs文件系統,可以man btrfs-filesystem查看詳細信息;
           Manage a btrfs filesystem, including label setting/sync and so on.
           See btrfs-filesystem(8) for details.
       balance    <--用來均衡各物理卷直接的數據量,man btrfs-balance;
           Balance btrfs filesystem chunks across single or several devices.
           See btrfs-balance(8) for details.
       device    <--管理物理設備的命令,man btrfs-device;
           Manage devices managed by btrfs, including add/delete/scan and so on.
           See btrfs-device(8) for details.

    廢話少說,先創建一個btrfs文件系統看看再說吧;創建btrfs文件應使用mkfs.btrfs命令;

[root@localhost ~]# mkfs.btrfs -L T_BTRFS /dev/sdb /dev/sdc /dev/sdd
Btrfs v3.16.2
See http://btrfs.wiki.kernel.org for more information.
Turning ON incompat feature 'extref': increased hardlink limit per file to 65536
adding device /dev/sdc id 2
adding device /dev/sdd id 3
fs created label T_BTRFS on /dev/sdb
nodesize 16384 leafsize 16384 sectorsize 4096 size 60.00GiB

    注: -L 后指定的是文件系統的LABEL

    查看btrfs的信息:

下面兩條命令效果相同,所以“–all-devices”省去比較好

[root@localhost ~]# btrfs filesystem show
Label: 'T_BTRFS'  uuid: c99895c8-5b14-4276-80c7-ecf1c96f25c1
Total devices 3 FS bytes used 112.00KiB
devid    1 size 20.00GiB used 2.02GiB path /dev/sdb
devid    2 size 20.00GiB used 1.01GiB path /dev/sdc
devid    3 size 20.00GiB used 2.01GiB path /dev/sdd
Btrfs v3.16.2
[root@localhost ~]# btrfs filesystem show --all-devices    
# show是個“btrfs filesystem”命令下的一個小命令,其實還有其他小命令,可以自行man查看;
Label: 'T_BTRFS'  uuid: c99895c8-5b14-4276-80c7-ecf1c96f25c1
Total devices 3 FS bytes used 112.00KiB
devid    1 size 20.00GiB used 2.02GiB path /dev/sdb
devid    2 size 20.00GiB used 1.01GiB path /dev/sdc
devid    3 size 20.00GiB used 2.01GiB path /dev/sdd
Btrfs v3.16.2

    可見T_BTRFS也有自己的UUID,我們可以通過查看任意一個裝置的信息來查詢T_BTRFS的UUID:

[root@localhost ~]# blkid /dev/sdd
/dev/sdd: LABEL="T_BTRFS" UUID="c99895c8-5b14-4276-80c7-ecf1c96f25c1" UUID_SUB="b73a6dfa-e5b8-4621
-b92e-9c8301b71da6" TYPE="btrfs" 
[root@localhost ~]# blkid /dev/sdc
/dev/sdc: LABEL="T_BTRFS" UUID="c99895c8-5b14-4276-80c7-ecf1c96f25c1" UUID_SUB="1e96c869-f99d-461c
-8792-23bc0faa5ac4" TYPE="btrfs"

    可見btrfs的任何一個底層設備都能作為btrfs文件系統的一個入口。

    掛載文件系統有兩種方式,一種是使用btrfs文件系統的LABEL,另一種是使用文件系統的任何一個底層設備:

[root@localhost ~]# mount /dev/sdc /mnt/TEST_BTRFS/
[root@localhost ~]# umount /mnt/TEST_BTRFS/
[root@localhost ~]# mount -L "T_BTRFS" /mnt/TEST_BTRFS/

    此后的很多操作時需要一個掛載點(此處是/mnt/TEST_BTRFS/)作為一個參數傳遞到命令中去的,所以創建好btrfs文件系統后,掛載很有必要;

    從T_BTRFS中移除一個設備:

使用的是btrfs device命令下的detect命令,其需要要移除的設備號及掛載點作為參數;

[root@localhost ~]# btrfs device delete /dev/sdd /mnt/TEST_BTRFS/
[root@localhost ~]# btrfs filesystem show
Label: 'T_BTRFS'  uuid: c99895c8-5b14-4276-80c7-ecf1c96f25c1
Total devices 2 FS bytes used 192.00KiB
devid    1 size 20.00GiB used 308.00MiB path /dev/sdb
devid    2 size 20.00GiB used 288.00MiB path /dev/sdc
Btrfs v3.16.2

    可見/dev/sdd已從T_BTRFS中移除;

    同上,只是使用了add命令;

[root@localhost ~]# btrfs device add /dev/sdd /mnt/TEST_BTRFS/
[root@localhost ~]# btrfs filesystem show
Label: 'T_BTRFS'  uuid: c99895c8-5b14-4276-80c7-ecf1c96f25c1
Total devices 3 FS bytes used 192.00KiB
devid    1 size 20.00GiB used 308.00MiB path /dev/sdb
devid    2 size 20.00GiB used 288.00MiB path /dev/sdc
devid    3 size 20.00GiB used 0.00 path /dev/sdd
Btrfs v3.16.2

    在btrfs下的各設備間均衡數據的命令:

    在各設備間均衡數據需要用到btrfs balance命令,其下有start,pause,cancel,resume,status小命令;

    start命令用于開始操作,它的下面又有一些OPTION,比較有用的有:

           -d[<filters>]
               act on data chunks. See FILTERS section for details about <filters>.
           -m[<filters>]
               act on metadata chunks. See FILTERS section for details about <filters>.
   <filters>見man btrfs-balance說明;

這兩個OPTION看用于修改btrfs文件系統的RAID級別;

    pause,暫停,因為在設備間均衡數據比較消耗資源,消耗時間,所以有必要在合適的時候暫停操作;

    cancel,取消;

    resume,恢復操作;

    status,查看均衡操作執行的狀態;

    先來看看start命令吧:

[root@localhost ~]# btrfs balance start /mnt/TEST_BTRFS/    <--注意傳遞給start的參數是掛載點
Done, had to relocate 5 out of 5 chunk

    修改RAID級別:

[root@localhost ~]#  btrfs balance start -mconvert=raid5 -dconvert=raid5 /mnt/TEST_BTRFS/
Done, had to relocate 3 out of 3 chunks

    -mconvert=raid5,修改元數據的存儲方式為raid5

    -dconvert=raid5,修改數據的存儲方式為raid5

    注意大小寫及參數。

    創建子卷:

[root@localhost ~]# btrfs subvolume create /mnt/TEST_BTRFS/logs
Create subvolume '/mnt/TEST_BTRFS/logs'

    創建子卷就好比在父卷下創建一個目錄;

    查看子卷信息:

[root@localhost ~]# btrfs subvolume list /mnt/TEST_BTRFS/
ID 263 gen 64 top level 5 path logs

    263為subvolid,掛載時有用;   

    掛載子卷:

    若想使用子卷,須umount父卷,因為要么掛載子卷要么掛載父卷,只能選其一;

[root@localhost ~]# umount /mnt/TEST_BTRFS/
[root@localhost ~]# mount -o subvol=logs /dev/sdc /mnt/logs/

    注意:掛載子卷須使用mount的-o選項的subvol,且參數是btrfs的任意底層設備和掛載目錄名;

    也可以使用subvolid:

[root@localhost ~]# mount -o subvolid=263 /dev/sdc /mnt/logs/

    若在子卷中寫入數據,當把子卷卸載,把父卷掛載之后,也可以通過“父卷/子卷目錄”的方式訪問原來存于子卷中的數據:

[root@localhost ~]# cp /etc/fstab /mnt/logs/   
[root@localhost ~]# ls /mnt/logs/
fstab
[root@localhost ~]# umount /mnt/logs/
[root@localhost ~]# mount -L "T_BTRFS" /mnt/TEST_BTRFS/
[root@localhost ~]# ls -l /mnt/TEST_BTRFS/logs/
total 4
-rw-r--r--. 1 root root 747 Dec  6 12:19 fstab

    

    使用快照:

    快照相當于創建子卷,但是它是另一個子卷的副本;

    快照使用的命令是:

    btrfs subvoloume snapshot /PATH/OT/SOURCE /PATH/TO/DEST

    可以指定-r選項,是其只讀;

[root@localhost ~]# btrfs subvolume snapshot /mnt/TEST_BTRFS/logs /mnt/TEST_BTRFS/logs_bak
       COMMENTS: 創建快照;
Create a snapshot of '/mnt/TEST_BTRFS/logs' in '/mnt/TEST_BTRFS/logs_bak'
[root@localhost ~]# btrfs subvolume list /mnt/TEST_BTRFS/
ID 263 gen 68 top level 5 path logs        COMMENTS: 查看所有子卷,快照屬于子卷的一類;
ID 264 gen 68 top level 5 path logs_bak
[root@localhost ~]# mkdir /mnt/logs_bak
[root@localhost ~]# umount /mnt/TEST_BTRFS/
[root@localhost ~]# mount -o subvol=logs /dev/sdc /mnt/logs    COMMENTS: 使用子卷名掛載;
[root@localhost ~]# mount -o subvolid=264 /dev/sdc /mnt/logs_bak/    COMMENTS:使用子卷ID掛載;
[root@localhost ~]# ls -l /mnt/logs
total 4
-rw-r--r--. 1 root root 747 Dec  6 12:19 fstab
[root@localhost ~]# ls -l /mnt/logs_bak/        COMMENTS: 快照中存在同樣的文件;
total 4
-rw-r--r--. 1 root root 747 Dec  6 12:19 fstab
[root@localhost ~]# vim /mnt/logs/fstab 
[root@localhost ~]# cat /mnt/logs/fstab 
#
# /etc/fstab
# Created by anaconda on Sat Dec  5 19:08:23 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=5a0ee49d-e4de-49c9-9ea2-ea67aad90822 /                       ext4    defaults        1 1
UUID=3ca1f6c5-90d7-4b6e-bdf1-6417bf043869 /boot                   ext4    defaults        1 2
UUID=edfb83c3-b202-462c-a2b6-6721fefceee1 /home                   ext4    defaults        1 2
/dev/mapper/centos-usr  /usr                    ext4    defaults        1 2
/dev/mapper/centos-var  /var                    ext4    defaults        1 2
UUID=b188dad5-83fa-4edb-b044-3887fa66b838 swap                    swap    defaults        0 0
NEW LINE HOW ARE YOU?        <-- COMMENTS:修改原文件,添加新行;
[root@localhost ~]# cat /mnt/logs_bak/fstab 
#
# /etc/fstab
# Created by anaconda on Sat Dec  5 19:08:23 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=5a0ee49d-e4de-49c9-9ea2-ea67aad90822 /                       ext4    defaults        1 1
UUID=3ca1f6c5-90d7-4b6e-bdf1-6417bf043869 /boot                   ext4    defaults        1 2
UUID=edfb83c3-b202-462c-a2b6-6721fefceee1 /home                   ext4    defaults        1 2
/dev/mapper/centos-usr  /usr                    ext4    defaults        1 2
/dev/mapper/centos-var  /var                    ext4    defaults        1 2
UUID=b188dad5-83fa-4edb-b044-3887fa66b838 swap                    swap    defaults        0 0
    COMMENTS: 快照中的文件沒有變化。

   

    我們還能在一般的文件系統和btrfs文件系統之間轉換:

btrfs-convert /dev/sdd1        COMMENTS: 一般文件系統轉換成btrfs文件系統;

btrfs-convert -r /dev/sdd1     COMMENTS:btrfs文件系統轉換回一般文件系統。

    btrfs更詳細的用法請man吧^_^。

原創文章,作者:Jacen,如若轉載,請注明出處:http://www.www58058.com/9717

(0)
JacenJacen
上一篇 2015-12-06 20:37
下一篇 2015-12-10 11:01

相關推薦

  • linux基礎學習之SElinux

    1、SElinux簡介 SELinux: Secure Enhanced Linux,是美國國家安全局「NSA=The National Security Agency」和SCC(Secure Computing Corporation)開發的Linux的一個強制訪問控制的安全模塊。2000年以GNU GPL發布,Linux內核2.6版本后集成在內核中 2、…

    Linux干貨 2016-09-15
  • 第二十六天 iptables 初識

      Iptables是位于用戶空間,是linux系統上的防火墻管理配置規則的工具,主要用于添加、刪除、管理netfilter的規則,   Netfilter是位于內核中真正的防火墻,由5個鉤子組成,也叫五個規則鏈。 Netfilter的作用:起到過濾封包,轉換與映射IP地址和端口,拆分和修改封包內容,追蹤封包等功能 Iptabl…

    Linux干貨 2016-07-02
  • LVS DR模式

    一、測試環境說明 操作系統:CentOS6.7-X64 IP_VS版本:1.2.26 DR:10.10.10.130 VIP:10.10.10.140 RS1:10.10.10.131 RS2:10.10.10.132 二、LVS-DR模式原理 a)客戶端發送一個請求(源地址為CIP,目標地址為VIP,我們簡稱為CIP:VIP)到LVS的DR b)通過在調度…

    Linux干貨 2016-09-19
  • keepalived+haproxy實現wordpress的動靜分離及負載均衡、高可用

    實驗目的:使用keepalived+haproxy實現wordpress的動靜分離及負載均衡、高可用 實驗要求:客戶端請求的動態資源代理至動態資源web組,請求的靜態代理至靜態資源web組,啟用統計面信息并只對特定啟用統計面管理功能,啟用https安全連接 系統環境:CentOS 7.3、關閉selinux和清除iptables規則,A和B主機各需要兩塊網卡…

    2017-05-18
  • 文本處理相關工具

    文本工具       操作系統中,文本的處理這一操作,比如操作一些內容,查看一些內容等等這些東西在linux中都得借助工具來完成對文本的操作。下面來說說對文本處理的工具;  其中:        查看文件內容工具:more、less、cat     &nbsp…

    Linux干貨 2016-08-05
  • CentOS 7 RPM包方式安裝LAMP

    細節要求: (1) 三者分離于兩臺主機; (2) 一個虛擬主機用于提供phpMyAdmin;另一個虛擬主機用于提供wordpress; (3) 提供xcache加速; (4) 為phpMyAdmin提供https虛擬主機; 一、準備CentOS 7主機環境以及Repo倉庫提供基于rpm安裝包方式的程序包安裝源 安裝主機程序包規劃: 主機1:web-serve…

    Linux干貨 2017-02-16
欧美性久久久久