btrfs初步應用

前言

一種技術要知其然,還要知其所以然。

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也宣稱專注在“容錯、修復及易于管理”。

引用于(https://zh.wikipedia.org/wiki/Btrfs

Btrfs文件系統的核心特性

1.多物理卷支持:btrfs文件系統可由多個底層物理卷組成;支持RAID,以聯機“添加”、“移除”,“修改”;

2.寫時復制更新機制(CoW): 所謂 COW,即每次寫磁盤數據時,先將更新數據寫入一個新的 block,當新數據寫入成功之后,再更新相關的數據結構指向新 block 。復制、更新及替換指針,而非“就地”更新; ”就地“更新是指地址指針指向。

3.數據及元數據校驗碼(checksum):btrfs在讀取數據的同時會讀取其相應的 checksum 。如果最終從磁盤讀取出來的數據和 checksum 不相同,btrfs 會首先嘗試讀取數據的鏡像備份,如果數據沒有鏡像備份,btrfs 將返回錯誤。寫入磁盤數據之前,btrfs 計算數據的 checksum 。然后將 checksum 和數據同時寫入磁盤。

4.子卷:Subvolume 是很優雅的一個概念。即把文件系統的一部分配置為一個完整的子文件系統,稱之為 subvolume 。 采用 subvolume,一個大的文件系統可以被劃分為多個子文件系統,這些子文件系統共享底層的設備空間,在需要磁盤空間時便從底層設備中分配,類似應用程序調用 malloc() 分配內存一樣。可以稱之為存儲池。這種模型有很多優點,比如可以充分利用 disk 的帶寬,可以簡化磁盤空間的管理等

5.快照:支持快照的快照;可以在快照中在做快照

6.透明壓縮:在用戶寫入數據時系統會自動進行壓縮,而用戶調用數據的過程是一個解壓縮的過程,但是這個過程,對用戶來說是透明的,是自動進行的。

7.多設備管理:Btrfs 支持動態添加設備。用戶在系統中增加新的磁盤之后,可以使用 btrfs 的命令將該設備添加到文件系統中。為了靈活利用設備空間,Btrfs 將磁盤空間劃分為多個 chunk 。每個 chunk 可以使用不同的磁盤空間分配策略。比如某些 chunk 只存放 metadata,某些 chunk 只存放數據。一些 chunk 可以配置為 mirror,而另一些 chunk 則可以配置為 stripe 。這為用戶提供了非常靈活的配置可能性。

引用于(http://lirui213.blog.51cto.com/4449582/1689754) 進行了一點修改

Btrfs的應用和管理常用的命令

Btrfs文件系統創建需要用到的命令:

mkfs.btrfs -L 'LABEL':建立卷標。

-d : raid0, raid1, raid5, raid6, raid10, single指明確文件系統的類型

-m : raid0, raid1, raid5, raid6, raid10, single, dup指明類型

-O 指明格式化是,啟動的特性 -O list-all: 列出支持的所有feature;

Btrfs的文件掛載和管理

屬性查看:

btrfs filesystem show

掛載文件系統:

mount -t btrfs /dev/sdb MOUNT_POINT

透明壓縮機制:

mount -o compress={lzo|zlib} DEVICE MOUNT_POINT 常用的子命令 1.subvolume
<–子卷管理命令,可以man btrfs-subvolume查看器詳細信息; btrfs初步應用

btrfs subvolume create /PATH/subvolumename:創建子卷 此路徑必須在btrfs文件系統的掛載目錄下

btrfs subvolume delete 刪除子卷

btrfs subvolume list:列出所有子卷

btrfs subvolume snapshot

| :創建快照

btrfs subvolume get-default:默認卷

btrfs subvolume set-default:設置默認卷

btrfs subvolume show:用來查看子卷的詳細信息

2.filesystem 
<–用來管理btrfs文件系統,可以man btrfs-filesystem查看詳細信息; btrfs初步應用

btrfs filesystem show:顯示詳細信息

btrfs filesystem show –mounted:顯示已經掛載的文件系統的詳細信息

btrfs filesystem show –all-device:顯示所有文件系統的詳細信息

btrfs filesystem show /PATH: 顯示指定的文件系統的詳細

btrfs filesystem label:顯示文件系統的label

btrfs filesystem resize:縮減或者增大文件系統的容量

btrfs filesystem df:顯示已經掛載的文件系統的信息

btrfs filesystem sync同步操作

3.balance <–用來均衡各物理卷直接的數據量,man btrfs-balance; btrfs初步應用

btrfs balance start:開始均衡文件系統

btrfs balance start -dconvert:修改數據的組織機制,即raid級別

btrfs balance start -mconvert修改元數據的組織機制,即raid級別

btrfs balance start -sconvert:修改系統的組織機制,即raid級別

btrfs balance pause:停止

btrfs balance cancel取消

btrfs balance resume繼續

btrfs balance status 查看均衡狀態

4.device <–管理物理設備的命令,man btrfs-device;

btrfs初步應用

btrfs device add :添加設備

btrfs device delete :從文件系統中移除或者去除設備

btrfs device ready :

btrfs device stats [-z] |:

實驗

實驗環境:centos 7 實驗材料:3塊10G的硬盤

第一步:先用VMware來創建3個虛擬硬盤, btrfs初步應用

第二步:mkfs.btrfs -L experiment /dev/sdb /dev/sdc:就是把sdb和sdc兩塊硬盤格式化成以卷標為experiment的文件系統 btrfs初步應用

第三步: mount /dev/sdb 或者/dev/sdc都可以掛載 將兩塊硬盤掛載到/mnt/experiment btrfs初步應用

第四步: btrfs filesystem df /mnt blkid /dev/sdb blkid /dev/sdc btrfs初步應用blkid命令 獲取文件系統類型、UUID 發現父UUID都是一樣的,但是子UUID是不一樣的,可以看出它是支持多卷的。

第五步: 對btrfs文件的size縮小和增大 btrfs初步應用

第6步: 對btrfs文件添加硬盤 btrfs初步應用 btrfs device add :添加設備 btrfs device delete :從文件系統中移除或者去除設備

第七步: 剛加進來的硬盤數據時0,想要讓后加進來的硬盤有數據,那就得進行數據均衡,數據均衡就要用到 btrfs balance

btrfs初步應用

第八步: 對btrfs文件系統的硬盤卸載 btrfs初步應用 btrfs初步應用 發現數據會自動移動 還未卸載的硬盤上 數據沒有丟失,

第八步: 對btrfs文件系統進行子卷操作

 [root@localhost experiment]# btrfs subvolume create /mnt/experiment/subvolume
 Create subvolume '/mnt/experiment/subvolume'
  #創建子卷subvolume

[root@localhost experiment]# btrfs subvolume list /mnt/experiment/subvolume/
  ID 262 gen 62 top level 5 path subvolume 
    #ID 是這個子卷的ID可以此ID進行掛載
    #查看子卷信息

[root@localhost experiment]# btrfs subvolume show /mnt/experiment/subvolume/
/mnt/experiment/subvolume
Name:           subvolume
uuid:           39fc0341-19d0-1a43-9a0b-64ea90b29ab5
Parent uuid:        -
Creation time:      2016-05-22 21:27:29
Object ID:      262
Generation (Gen):   62
Gen at creation:    62
Parent:         5
Top Level:      5
Flags:          -
Snapshot(s):

 [root@localhost tmp]# mount -o subvol=subvolume /dev/sdb /tmp/subvolume
 #進行掛載

Note: 我忘了mount的這個用法,就重新在看看。

            -o options:(掛載文件系統的選項)
            async:異步模式;一般使用異步模式
            sync:同步模式;
            atime/noatime:包含目錄和文件的訪問時間戳;默認情況下使用
            diratime/nodiratime:目錄的訪問時間戳
            auto/noauto:是否支持自動掛載
            exec/noexec:是否支持將文件系統上應用程序運行為進程
            dev/nodev:是否支持在此文件系統上使用設備文件;
            suid/nosuid:是否支持suid
            remount:重新掛載
            ro:表示只讀
            rw: 表示讀寫
            user/nouser:是否允許普通用戶掛載此設備
            acl:啟用此文件系統上的acl功能  acl訪問控制列表

[root@localhost tmp]# ls /tmp/subvolume/

[root@localhost tmp]# btrfs subvolume show /tmp/subvolume
/tmp/subvolume
Name:           subvolume
uuid:           39fc0341-19d0-1a43-9a0b-64ea90b29ab5
Parent uuid:        -
Creation time:      2016-05-22 21:27:29
Object ID:      262
Generation (Gen):   62
Gen at creation:    62
Parent:         5
Top Level:      5
Flags:          -
Snapshot(s):

查看子卷

[root@localhost tmp]# cp /var/log/messages /tmp/subvolume/

復制數據到子卷

 [root@localhost tmp]# ls /tmp/subvolume/
 messages
 [root@localhost tmp]# ls /mnt/experiment/
grub2.cfg  issue      subvolume/ 
[root@localhost tmp]# ls /mnt/experiment/subvolume/
messages
[root@localhost tmp]# umount /tmp/subvolume/
[root@localhost tmp]# mkdi
mkdict  mkdir   
[root@localhost tmp]# mkdir /tmp/test
[root@localhost tmp]# mount /dev/sdb /tmp/test/
[root@localhost tmp]# ls /tmp/test/
grub2.cfg  issue  subvolume
[root@localhost tmp]# ls /tmp/test/subvolume/
messages

Note:子卷中的內容是可見,所以一旦父卷掛載,子卷就被自動被掛載了 如果只有單單掛載了子卷,父卷內容是不會自動掛載的,其內容是不可見的。

第九步:刪除子卷 [root@localhost tmp]# umount /tmp/test/

[root@localhost tmp]# btrfs subvolume delete /mnt/experiment/subvolume/
Delete subvolume (no-commit): '/mnt/experiment/subvolume'
    #刪除子卷
[root@localhost tmp]# btrfs subvolume list /mnt/experiment/
grub2.cfg  issue   
    #子卷信息沒了

總結 還有很多操作還沒做,以后有時間在更新,還有子卷快照,ext文件系統和btrfs文件系統互轉等等

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

(1)
N19_kingN19_king
上一篇 2016-05-21
下一篇 2016-05-23

相關推薦

  • Linux不同發行版之間的聯系與區別

    Linux發行版有商業版、社區版兩類。兩者的共同點都是GNU/Linux發行版,區別在于商業版是由商業公司維護,社區版是社區組織維護。由于linux發行版都要遵循GPL協定,任何人都有使用、共享、修改軟件源代碼的自由,所以商業版的收入主要來自向企業提供支持服務,它的軟件基本都是免費的。

    Linux干貨 2018-03-04
  • find命令簡單總結

     find     字符串類查詢:            -type   //根據文件類型查找       &…

    Linux干貨 2015-09-14
  • 6

    請詳細總結vim編輯器的使用并完成以下練習題; 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/ rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; #   cp /etc/rc.d/rc.sysinit /tmp/ #   vim…

    Linux干貨 2017-02-07
  • N22-妙手-第十周博客作業

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)     (1) POST階段         加電自檢,確保每個設備能正常工作     (2) BIOS  &nb…

    Linux干貨 2016-12-05
  • rpm及yum

    庫文件 查看二進制程序所依賴的庫文件: ldd /PATH/TO/BINARY_FILE [root@localhost ~]# ldd /bin/bash 管理及查看本機裝載的庫文件: ldconfig /sbin/ldconfig -p:  顯示本機已經緩存的所有可用庫文件 名及文件路徑映射關系 配置文件:/etc/ld.so.conf, /e…

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

    計算機組成 計算機發展史 采用電子管的第一代計算機(1946~1959年) 第一代計算機的內部元件使用的是電子管。第一代計算機主要用于科學研究和工程計算。 采用晶體管的第二代計算機(1960~1964年) 第二代計算機的內部元件使用的是晶體管,晶體管比電子管小得多,處理更迅速、更可靠。第二代計算機主要用于商業、大學教學和政府機關。 采用集成電路的第三代計算機…

    Linux干貨 2017-12-03
欧美性久久久久