Linux btrfs文件系統及管理
linux文件系統,具有寫時復制COW(-on-write),改善ext3文件系統單文件大小限制,並加入其他特性,如可寫快照,快照的快照,內建RAID,子卷(subvloume),專注於容錯,修復和易於管理,下面一起來看看什麼是linux btrfs文件系統及管理關系吧!
什麼是btrfs?
Btrfs(B-tree文件系統,通常念成Butter FS,Better FS或B-tree FS),linux文件系統,具有寫時復制COW(-on-write),改善ext3文件系統單文件大小限制,握孝塌並加入其他特性,如可寫快照,快照的快照,內建RAID,子卷(subvloume),專注於容錯,修復和易於管理。單段圓文件可達16EB,最大文件數量2^64,最大卷容量16EB,等。
btrfs功能特性
1,COW:寫時復制,每次寫入數據時,先將數據寫入到新的block,寫入成功後,更改舊數據塊指針到新數據塊,而非更改本身。
2,多物理卷支持,btrfs內建raid,可在線增刪磁碟設備,可在線擴展和縮減磁碟空間。
3,數據和元數據校驗碼,checksum
4,子卷,可單獨掛載子卷
5,可寫慎租快照,快照的快照,單個文件快照。
6,透明壓縮
7,ext3/4和btrfs無痛互轉
btrfs 基本用法:
bash/shell Code復制內容到剪貼板
[root@localhost ~]# btrfs --help #查看幫助可以看到btrfs 有很多子命令,用法也很多,這里只舉例常用選項。
usage: btrfs [--help] [--version] [...] []
btrfs subvolume create [-i ] [/] #創建子卷
Create a subvolume
btrfs subvolume delete [options] [...] #刪除子卷
Delete subvolume(s)
btrfs subvolume list [options] [-G [+|-]value] [-C [+|-]value] [--sort=gen,ogen,rootid,path] #顯示子卷列表
List subvolumes (and snapshots)
btrfs subvolume snapshot [-r] [-i ] |[/] #創建子卷快照
Create a snapshot of the subvolume
btrfs subvolume get-default #獲取子卷默認的文件系統
Get the default subvolume of a filesystem
btrfs subvolume set-default #設置默認系統給子卷
Set the default subvolume of a filesystem
btrfs subvolume find-new #列出btrfs文件系統中最近修改的文件,結合find命令
List the recently modified files in a filesystem
btrfs subvolume show #顯示更多的子卷信息
Show more information of the subvolume
btrfs subvolume sync [...] #子卷同步,類似mount同步模式,內存數據同步到磁碟,有待查證。
Wait until given subvolume(s) are completely removed from the filesystem.
btrfs filesystem df [options] #顯示掛載的文件系統詳細信息。
Show space usage information for a mount point
btrfs filesystem show [options] [|||label] #顯示創建文件系統的磁碟信息。
Show the structure of a filesystem
btrfs filesystem sync #強制文件系統同步,
Force a sync on a filesystem
btrfs filesystem defragment [options] |
[|...] #碎片整理
Defragment a file or a directory
btrfs filesystem resize [devid:][+/-][kKmMgGtTpPeE]|[devid:]max #btrfs文件系統在線擴展和縮減空間
Resize a filesystem
btrfs filesystem label [|] [] #改變btrfs文件系統卷標
Get or change the label of a filesystem
btrfs filesystem usage [options] [..] #顯示文件系統當前的使用信息。
Show detailed information about internal filesystem usage .
btrfs balance start [options] #改變磁碟chunk,在線改 數據和元數據 存儲方式,單盤改raid,前提滿足raid要求。
Balance chunks across the devices
btrfs balance pause #暫停chunk更改,數據量較大,轉換時間較長時,先暫停。
Pause running balance
btrfs balance cancel #取消chunk更改,如上
Cancel running or paused balance
btrfs balance resume #中斷balance的操作,如上
Resume interrupted balance
btrfs balance status [-v] #顯示balance操作狀態 如上
Show status of running or paused balance
btrfs device add [options] [...] #文件系統增加磁碟
Add a device to a filesystem
btrfs device delete [...] #文件系統刪除磁碟
Remove a device from a filesystem
btrfs device scan [(-d|--all-devices)| [...]] #文件系統磁碟掃描
Scan devices for a btrfs filesystem
btrfs device ready #猜測是檢測加入的設備有沒有被掛載
Check device to see if it has all of its devices in cache for mounting
btrfs device stats [-z] | #顯示文件系統的設備狀態
Show current device IO stats. -z to reset stats afterwards.
btrfs device usage [options] [..] #顯示文件系統內部設備詳細使用信息
Show detailed information about internal allocations in devices.
btrfs文件系統管理
為分區創建btrfs文件系統
bash/shell Code復制內容到剪貼板
[root@localhost ~]# fdisk -l | grep "^Disk /dev/sd[a-z]" #准備sd{b,c,d,e}4塊20G磁碟,未做任何分區。
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Disk /dev/sde: 21.5 GB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdd: 21.5 GB, 21474836480 bytes, 41943040 sectors
創建單分區btrfs並查看
bash/shell Code復制內容到剪貼板
[root@localhost ~]# mkfs.btrfs -L 'btrfs' /dev/sdb
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 'skinny-metadata': reced-size metadata extent refs
fs created label btrfs on /dev/sdb
nodesize 16384 leafsize 16384 sectorsize 4096 size 20.00GiB
[root@localhost ~]# btrfs filesystem show
Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a
Total devices 1 FS bytes used 112.00KiB
devid 1 size 20.00GiB used 2.04GiB path /dev/sdb
btrfs-progs v3.19.1
[root@localhost ~]# mount -o compress=lzo -L btrfs /btrfs/ 掛載時可以設定透明壓縮機制。
[root@localhost ~]# btrfs filesystem df /btrfs
Data, single: total=8.00MiB, used=256.00KiB
System, DUP: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00B
Metadata, DUP: total=1.00GiB, used=112.00KiB
Metadata, single: total=8.00MiB, used=0.00B
GlobalReserve, single: total=16.00MiB, used=0.00B
再添加一塊磁碟
bash/shell Code復制內容到剪貼板
[root@localhost ~]# btrfs device add /dev/sdc /btrfs #添加磁碟,刪除用btrfs device delete /dev/sdc /btrfs
[root@localhost ~]# btrfs fi sh
Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a
Total devices 2 FS bytes used 384.00KiB
devid 1 size 20.00GiB used 2.04GiB path /dev/sdb
devid 2 size 20.00GiB used 0.00B path /dev/sdc
btrfs-progs v3.19.1
[root@localhost ~]#
在線增加或縮減空間,在線改變空間,可以讓lvm坐冷板凳了。
bash/shell Code復制內容到剪貼板
[root@localhost ~]# btrfs fi resize -10G /btrfs/ #在線縮減空間
Resize '/btrfs/' of '-10G'
[root@localhost ~]# btrfs fi sh
Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a
Total devices 2 FS bytes used 384.00KiB
devid 1 size 10.00GiB used 2.04GiB path /dev/sdb
devid 2 size 20.00GiB used 0.00B path /dev/sdc
btrfs-progs v3.19.1
[root@localhost ~]# btrfs fi resize +7G /btrfs/ #在線增加空間
Resize '/btrfs/' of '+7G'
[root@localhost ~]# btrfs fi sh
Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a
Total devices 2 FS bytes used 384.00KiB
devid 1 size 17.00GiB used 2.04GiB path /dev/sdb
devid 2 size 20.00GiB used 0.00B path /dev/sdc
btrfs-progs v3.19.1
[root@localhost ~]#
在線更改數據和元數據的結構
bash/shell Code復制內容到剪貼板
[root@localhost ~]# btrfs fi df /btrfs/
Data, single: total=8.00MiB, used=256.00KiB
System, DUP: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00B
Metadata, DUP: total=1.00GiB, used=112.00KiB
Metadata, single: total=8.00MiB, used=0.00B
GlobalReserve, single: total=16.00MiB, used=0.00B
[root@localhost ~]# btrfs balance start -mconvert=raid1 /btrfs/ #-mconvert 為改變metadata元數據區的存儲結構
Done, had to relocate 4 out of 5 chunks
[root@localhost ~]# btrfs fi sh
Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a
Total devices 2 FS bytes used 192.00KiB
devid 1 size 17.00GiB used 296.00MiB path /dev/sdb
devid 2 size 20.00GiB used 288.00MiB path /dev/sdc
btrfs-progs v3.19.1
[root@localhost ~]# btrfs fi df /btrfs/
Data, single: total=8.00MiB, used=64.00KiB
System, RAID1: total=32.00MiB, used=16.00KiB
Metadata, RAID1: total=256.00MiB, used=112.00KiB #對比上改為了raid1
GlobalReserve, single: total=16.00MiB, used=0.00B
[root@localhost ~]# btrfs balance start -dconvert=raid1 /btrfs/ #-dconvert 為改變data數據區的存儲結構
Done, had to relocate 1 out of 3 chunks
B. linux支持的文件系統有哪些
比如Btrfs、JFS、ReiserFS、ext、ext2、ext3、ext4、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
Linux操作系統使用虛擬文件系統(VFS)向上和用戶進程文件訪問系統調用介面,向下和具體不同文件系統的實現介面。VFS屏蔽了具體文件的實現細節,向上提供統一的操作介面。通過VFS可以實現任意的文件系統,這些文件系統通過文件訪問系統調用都可以訪問。所以Linux系統核心可以支持十多種文件系統類型。
(2)linuxbtrfs擴展閱讀:
EXT是延伸文件系統(英語:Extended file system,縮寫為 ext或 ext1),也譯為擴展文件系統,一種文件系統,於1992年4月發表,是為linux核心所做的第一個文件系統。採用Unix文件系統(UFS)的元數據結構,以克服MINIX文件系統性能不佳的問題。它是在linux上,第一個利用虛擬文件系統實現出的文件系統,在linux核心0.96c版中首次加入支持,最大可支持2GB的文件系統
EXT3是第三代擴展文件系統(英語:Third extended filesystem,縮寫為ext3),是一個日誌文件系統,常用於Linux操作系統。它是很多Linux發行版的默認文件系統。Stephen Tweedie在1999年2月的內核郵件列表中,最早顯示了他使用擴展的ext2,該文件系統從2.4.15版本的內核開始,合並到內核主線中。
C. SSD 裝 Linux 選 Ext4 還是 Btrfs 好
Linux kernel 自 2.6.28
開 始正式支持新的文件系統 Ext4。 Ext4 是 Ext3 的改進版,修改了 Ext3 中部分重要的數據結構,而不僅僅像 Ext3 對
Ext2 那樣,只是增加了一個日誌功能而已。Ext4 可以提供更佳的性能和可靠性,還有更為豐富的功能:
1. 與 Ext3 兼容。執行若干條命令,就能從 Ext3 在線遷移到 Ext4,而無須重新格式化磁碟或重新安裝系統。原有 Ext3 數據結構照樣保留,Ext4 作用於新數據,當然,整個文件系統因此也就獲得了 Ext4 所支持的更大容量。
2. 更大的文件系統和更大的文件。較之 Ext3 目前所支持的最大 16TB 文件系統和最大 2TB 文件,Ext4 分別支持 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系統,以及 16TB 的文件。
3. 無限數量的子目錄。Ext3 目前只支持 32,000 個子目錄,而 Ext4 支持無限數量的子目錄。
4. Extents。Ext3 采
用間接塊映射,當操作大文件時,效率極其低下。比如一個 100MB 大小的文件,在 Ext3 中要建立 25,600 個數據塊(每個數據塊大小
為 4KB)的映射表。而 Ext4 引入了現代文件系統中流行的 extents 概念,每個 extent
為一組連續的數據塊,上述文件則表示為「 該文件數據保存在接下來的 25,600 個數據塊中」,提高了不少效率。
5. 多塊分配。當
寫 入數據到 Ext3 文件系統中時,Ext3 的數據塊分配器每次只能分配一個 4KB 的塊,寫一個 100MB 文件就要調用 25,600
次數據 塊分配器,而 Ext4 的多塊分配器「multiblock allocator」(mballoc) 支持一次調用分配多個數據塊。
6. 延遲分配。Ext3 的數據塊分配策略是盡快分配,而 Ext4 和其它現代文件操作系統的策略是盡可能地延遲分配,直到文件在 cache 中寫完才開始分配數據塊並寫入磁碟,這樣就能優化整個文件的數據塊分配,與前兩種特性搭配起來可以顯著提升性能。
7. 快速 fsck。以前執行 fsck 第一步就會很慢,因為它要檢查所有的 inode,現在 Ext4 給每個組的 inode 表中都添加了一份未使用 inode 的列表,今後 fsck Ext4 文件系統就可以跳過它們而只去檢查那些在用的 inode 了。
8. 日誌校驗。日誌是最常用的部分,也極易導致磁碟硬體故障,而從損壞的日誌中恢復數據會導致更多的數據損壞。Ext4 的日誌校驗功能可以很方便地判斷日誌數據是否損壞,而且它將 Ext3 的兩階段日誌機制合並成一個階段,在增加安全性的同時提高了性能。
9. 「無日誌」(No Journaling)模式。日誌總歸有一些開銷,Ext4 允許關閉日誌,以便某些有特殊需求的用戶可以藉此提升性能。
10. 在線碎片整理。盡管延遲分配、多塊分配和 extents 能有效減少文件系統碎片,但碎片還是不可避免會產生。Ext4 支持在線碎片整理,並將提供 e4defrag 工具進行個別文件或整個文件系統的碎片整理。
11. inode 相關特性。Ext4 支
持更大的 inode,較之 Ext3 默認的 inode 大小 128 位元組,Ext4 為了在 inode 中容納更多的擴展屬性(如納秒時間戳
或 inode 版本),默認 inode 大小為 256 位元組。Ext4 還支持快速擴展屬性(fast extended
attributes) 和 inode 保留(inodes reservation)。
12. 持久預分配(Persistent preallocation)。P2P 軟
件為了保證下載文件有足夠的空間存放,常常會預先創建一個與所下載文件大小相同的空文件,以免未來的數小時或數天之內磁碟空間不足導致下載失 敗。
Ext4 在文件系統層面實現了持久預分配並提供相應的 API(libc 中的 posix_fallocate()),比應用軟體自己實現更有
效率。
13. 默認啟用 barrier。磁
盤 上配有內部緩存,以便重新調整批量數據的寫操作順序,優化寫入性能,因此文件系統必須在日誌數據寫入磁碟之後才能寫 commit 記錄, 若
commit 記錄寫入在先,而日誌有可能損壞,那麼就會影響數據完整性。Ext4 默認啟用 barrier,只有當 barrier 之前的數據
全部寫入磁碟,才能寫 barrier 之後的數據。(可通過 "mount -o barrier=0" 命令禁用該特性。)
D. linux系統硬碟,沒有掛載,拔掉一塊會怎麼樣
linux系統硬碟,沒有掛載,拔掉一塊會怎麼樣
linux操作系統是一個文件系統。磁碟分區後,同樣需要掛載才能正常使用,並且需要將硬碟文件路徑或者設備的uuid寫入配置文件/etc/fstab才能永久生效。
本文將帶來linux下的磁碟管理中的硬碟掛載,Linux操作系統掛載硬碟需要了解的一些知識。這可能是迄今為止介紹的最最最實用的linux硬碟掛載的文章了,比較詳細。由於工作原因,平時使用的比較多。主要目的,只是想讓更多人的了解到linux下掛載磁碟也不是那麼困難。
有幾種常見的文件系統,以前的老牌文件系統ext文件系統(ext2、ext3、ext4)。
在Redhat7系列還是推薦一款優秀的xfs文件系統,早鋒辯在性能上已經超越了ext文件系統。XFS文件系統是矽谷圖形公司(Silicon Graphic Inc,簡稱SGI)開發的用於IRIX(一個Unix操作系統)的文件系統,後來將其移植到Linux操作系統上。XFS是一個高級日誌文件系統,其優勢是極具伸縮性,同樣也極具健壯性。
還有一款btrfs(B-tree文件系統通常讀作Buffer FS、Better FS、B-tree FS)文件系統同樣很優秀,Redhat7安裝就自帶。 btrfs具有很多特性。例如:寫快照、快照的快照、內建RAID(通常稱為磁碟陣列)、子卷(subvolume),其最核心的理念是設計 容錯、修復以及易於管理。btrfs最大容量卷為16EB,單個最大文件為16EB。
須知:本文全程使用的是安裝選擇語言是簡體中文版的,所以看到的漢字顯示,請不要驚訝。
正文
開局一張圖,文章全靠編。開個玩笑,純屬逗大家樂基皮一樂。下面的圖片,已經點明了本文的核心內容。
建議:進行測試,可以使用虛擬機配合linux(Redhat系列或者Ubuntu搭建環境)測試。
一、查看系統分區情況
fdisk參數說明 刪除存在的陸缺硬碟分區,此時會提示需要刪除的序列號是哪一個。
刪除分區:d
新增分區:n
查看分區信息:p
保存分區變更信息:w
不保存並退出:q
獲取幫助信息:m
1、列出分區表
列出分區表,從下面的列出的選項可以看出,原始的磁碟磁碟 /dev/sda:21.5 GB是初始安裝linux操作系統就分配的。另外一塊磁碟,是我新增的磁碟sdb用於測試演示。
fidsk -l
[root@cnwangk /]# fdisk -l
磁碟 /dev/sda:21.5 GB, 21474836480 位元組,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標簽類型:dos
磁碟標識符:0x0001805e
設備 Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 4507647 2048000 83 Linux
/dev/sda3 4507648 8603647 2048000 82 Linux swap / Solaris
/dev/sda4 8603648 41943039 16669696 5 Extended
/dev/sda5 8605696 41943039 16668672 83 Linux
磁碟 /dev/sdb:10.7 GB, 10737418240 位元組,20971520 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標簽類型:dos
磁碟標識符:0x95df3b22
設備 Boot Start End Blocks Id System
/dev/sdb2 10485760 20971519 5242880 83 Linux
直接輸入fdisk命令,中文版會提示幫助信息以及使用方法
fdisk [選項] <磁碟> 更改分區表
#例如新增的磁碟sdb
fdisk /dev/sdb
fdisk [選項] -l <磁碟> 列出分區表
fdisk -s <分區> 給出分區大小(塊數)
二、建立linux文件系統
1、xfs文件系統
如下所示,我將新建xfs文件系統,指向的是新增的一塊磁碟文件路徑/dev/sdb。同樣也是Redhat7系列默認推薦的使用格式。
mkfs.xfs /dev/sdb
做一個簡單說明:xfs文件系統提供了備份分區工具xfsmp以供用戶使用。優勢在於用戶不用藉助第三方軟體就可以實現對xfs文件系統上的數據實施備份。備份過程如下所示:
xfsmp /backup/mp_sdc1 /sdc1
2、btrfs文件系統
如下所示,我將新建btrfs文件系統,指向的是新增的一塊磁碟文件路徑/dev/sdb,下面最終演示的也是btrfs文件系統的配置。
mkfs.btrfs /dev/sdb
3、ext文件系統
在Redhat6以及之前,用的還是ext文件系統。後來到7系列推薦使用xfs文件系。
mkfs.ext4 /dev/sdb
三、創建要掛載的路徑
1、創建掛載的文件data
使用mkdir命令創建data目錄,用於後續掛載新增的磁碟。
mkdir /data
查看創建好的掛載路徑data,初始是空的
E. 在 Linux 上給用戶賦予指定目錄的讀寫許可權
在 Linux 上指定目錄的讀寫許可權賦予用戶,有兩種方法可以實現這個目標:第一種是使用 ACL (訪問控制列表),第二種是創建用戶組來管理文件許可權,下面會一一介紹。為了完成這個教程,我們將使用以下設置:
請確認所有的命令都是使用 root 用戶執行的,或者使用 sudo 命令來享受與之同樣的許可權。讓我們開始吧!下面,先使用 mkdir 命令來創建一個名為 share 的目錄。
1. 使用 ACL 來為用戶賦予目錄的讀寫許可權
重要提示: 打算使用此方法的話,您需要確認您的 Linux 文件系統類型(如 ext3 和 ext4, NTFS, BTRFS)支持 ACL。
1.1. 首先, 依照以下命令在您的系統中檢查當前文件系統類型,並且查看內核是否支持 ACL:
從下方的截屏可以看到,文件系統類型是 ext4,並且從 CONFIG_EXT4_FS_POSIX_ACL=y 選項可以發現內核是支持 POSIX ACL 的。
[圖片上傳失敗...(image-c85622-1574572716190)]
1.2. 查看文件系統(分區)掛載時是否使用了 ACL 選項。
[圖片上傳失敗...(image-bdb4d9-1574572716190)]
通過上邊的輸出可以發現,默認的掛載項目中已經對 ACL 進行了支持。如果發現結果不如所願,你可以通過以下命令對指定分區(此例中使用 /dev/sda3)開啟 ACL 的支持)。
1.3. 指定目錄 share 的讀寫許可權分配給名為 shenweiyan 的用戶了,依照以下命令執行即可。
[圖片上傳失敗...(image-dfb909-1574572716190)]
在上方的截屏中,通過輸出結果的第二行 getfacl 命令可以發現,用戶 shenweiyan 已經成功的被賦予了 /data/share 目錄的讀寫許可權。
如果想要獲取 ACL 列表的更多信息。請參考:
2. 使用用戶組來為用戶賦予指定目錄的讀寫許可權
2.1. 如果用戶已經擁有了默認的用戶組(通常組名與用戶名相同),就可以簡單的通過變更文件夾的所屬用戶組來完成。
另外,我們也可以通過以下方法為多個用戶(需要賦予指定目錄讀寫許可權的)新建一個用戶組。如此一來,也就創建了一個共享目錄。
2.2. 接下來將用戶 shenweiyan 添加到 dbshare 組中:
2.3. 將目錄的所屬用戶組變更為 dbshare:
2.4. 現在,給組成員設置讀寫許可權。
ok,在 Linux 上給用戶賦予指定目錄的讀寫許可權就介紹到這里 !
參考資料: