戰(zhàn)指南:如何快速重平衡數(shù)據(jù)、切換RAID布局)
btrfs-progs balance實(shí)戰(zhàn)指南如何快速重平衡數(shù)據(jù)、切換RAID布局【免費(fèi)下載鏈接】btrfs-progsDevelopment of userspace BTRFS tools項(xiàng)目地址: https://gitcode.com/gh_mirrors/bt/btrfs-progsbtrfs balance 是 btrfs-progs 項(xiàng)目BTRFS 文件系統(tǒng)的用戶態(tài)工具集中最核心的命令之一一次操作就能把散落在磁盤上的數(shù)據(jù)重新均勻分布、切換 RAID 布局如 single → RAID1/RAID10還能壓縮稀疏塊組回收空間。本指南帶你從零看懂 balance 的完整工作流查看用量 → 執(zhí)行平衡 → 處理中斷無需了解 BTRFS 內(nèi)部結(jié)構(gòu)也能放心使用。上圖是 BTRFS 葉子節(jié)點(diǎn)Leaf的內(nèi)部結(jié)構(gòu)balance 正是在這種塊組Block Group級別上搬運(yùn)和整理數(shù)據(jù)的。一分鐘認(rèn)識 btrfs balanceBTRFS 把空間切成一個(gè)個(gè)塊組通常 1GiB 或 256MiB 一個(gè)文件數(shù)據(jù)分散存放在這些塊組里。隨著寫入、刪除、快照塊組的空間利用率會越來越碎片化甚至數(shù)據(jù)都堆在單塊磁盤上。btrfs balance的作用就是按需重新挑選塊組把數(shù)據(jù)搬到新位置讓整體布局符合你的 RAID 策略。三個(gè)最典型的用途切換 RAID 布局——給新加的磁盤開啟冗余如把數(shù)據(jù)轉(zhuǎn)成 RAID1壓縮稀疏塊組——把利用率低的塊組數(shù)據(jù)合并回收幽靈空間定向整理——只處理某塊磁盤或某個(gè)范圍內(nèi)的數(shù)據(jù)幾個(gè)必須知道的安全特性特性說明需要已掛載balance 只能作用于已掛載的文件系統(tǒng)保留 reflink共享 extent 和硬鏈接關(guān)系不會被打斷文件不會被碎片化或重新壓縮隨時(shí)可中斷掉電、重啟都不會破壞文件系統(tǒng)重新掛載后自動續(xù)跑加skip_balance可跳過I/O 密集移動大量數(shù)據(jù)期間磁盤和 CPU 壓力大機(jī)械硬盤上會明顯變慢動手前的概念自查塊組與 Profile三種塊組類型數(shù)據(jù)塊組data存放文件內(nèi)容對應(yīng)-d參數(shù)元數(shù)據(jù)塊組metadata存放目錄樹、extent 樹等結(jié)構(gòu)對應(yīng)-m參數(shù)系統(tǒng)塊組system物理到邏輯地址的映射表對應(yīng)-s參數(shù)需加-f強(qiáng)制 元數(shù)據(jù)一旦損壞整個(gè)文件系統(tǒng)就廢了所以很多用戶會把元數(shù)據(jù)放在更高冗余的 profile 上。常見 Profile布局Profile特點(diǎn)single單副本空間利用率最高無冗余dup雙副本但可能同盤適合單盤raid1/raid10雙盤/多盤鏡像安全性好raid5/raid6條帶校驗(yàn)大容量盤組常用單盤 BTRFS 默認(rèn)是數(shù)據(jù) single 元數(shù)據(jù) dup多盤默認(rèn)元數(shù)據(jù)為 RAID1。第一步balance 前先查看磁盤用量先搞清楚空間分布避免盲目全盤平衡不加任何過濾器的全盤 balance 會移動所有數(shù)據(jù)耗時(shí)極長$ btrfs filesystem df /mnt Data, single: total75.81GiB, used64.44GiB System, RAID1: total32.00MiB, used20.00KiB Metadata, RAID1: total15.87GiB, used8.84GiB讀法used / total就是平均塊組利用率。上例數(shù)據(jù)約 85%說明塊組已經(jīng)比較滿如果只有 40%用 usage 過濾器收益就很大。第二步三大高頻 balance 場景場景一壓縮稀疏塊組回收空間usage 過濾器塊組只要還有 1 字節(jié)數(shù)據(jù)就不會被釋放。usageN表示只處理利用率低于 N%的塊組把它們的數(shù)據(jù)挪到別的塊組后整塊回收# btrfs balance start -dusage50 /mnt Done, had to relocate 2 out of 97 chunks小技巧從 10 這種小數(shù)字起步逐步加大到 50、70每次處理量小、速度快空間會一點(diǎn)點(diǎn)被擰干。利用率超過 50% 的塊組再處理就只是原樣搬家基本沒有空間收益。場景二切換 RAID 布局convert 過濾器給多盤文件系統(tǒng)升級冗余是最常見的需求。原則是先元數(shù)據(jù)、后數(shù)據(jù)$ btrfs balance start -v -mconvertraid1 /mnt $ btrfs balance start -v -dconvertraid1,soft /mntsoft參數(shù)會讓已轉(zhuǎn)換好的塊組直接跳過轉(zhuǎn)換中途斷掉后重跑同一條命令即可繼續(xù)降低冗余如 RAID1 → single屬于危險(xiǎn)操作必須加-f顯式確認(rèn)??千萬別為了踢掉壞盤而降低冗余——balance 可能把新塊組恰好寫到壞盤上這種情況應(yīng)該使用btrfs device replace場景三定向整理某塊磁盤devid / drange 過濾器用btrfs filesystem show /mnt可以看到每塊磁盤的 devid然后只平衡指定磁盤上的塊組$ btrfs balance start -ddevid2,usage0 /mnt 特別推薦usage0它只清理完全沒用過的空塊組刪快照、清大文件后常見而且不需要任何工作空間是空間緊張時(shí)的首選急救手段。第三步長時(shí)間任務(wù)的管控pause / resume / cancel / statusbalance 動輒幾個(gè)小時(shí)官方提供了完整的遙控器子命令作用btrfs balance pause /mnt暫停進(jìn)度和過濾器狀態(tài)寫入磁盤btrfs balance resume /mnt恢復(fù)之前被中斷/暫停的 balancebtrfs balance cancel /mnt取消內(nèi)核 5.7 起響應(yīng)速度大幅提升btrfs balance status /mnt查看運(yùn)行/暫停狀態(tài)的進(jìn)度命令行實(shí)時(shí)盯進(jìn)度$ watch btrfs filesystem usage -T /mnt; btrfs balance status /mnt避坑指南ENOSPC 不是磁盤寫滿了balance 報(bào)錯(cuò)No space left on device是新手最大的坑。它需要的不是剩余空間而是工作空間work space——即完全空閑、沒有任何塊組的設(shè)備空間用來先建新塊組、搬數(shù)據(jù)、再刪舊塊組。計(jì)算方法btrfs filesystem show輸出size 53.90GiB, used 51.90GiB → 空閑工作空間 53.90 - 51.90 2.00GiB應(yīng)對方案先跑btrfs balance start -dusage0 /mnt清空塊組它不消耗工作空間刪除大文件/舊快照釋放空間后重試轉(zhuǎn)換到條帶類 profileRAID0/5/6時(shí)每塊盤都需要足夠工作空間且被中斷的轉(zhuǎn)換會留下部分填充的塊組繼續(xù)占用空間源碼與文檔入口想深入原理或查閱完整參數(shù)這些文件值得一看完整 man page 源文件Documentation/btrfs-balance.rst全部過濾器profiles / usage / devid / drange / vrange / limit / stripes / soft詳解Documentation/ch-balance-filters.rst單盤加盤、逐步轉(zhuǎn) RAID1 的典型用例Documentation/ch-volume-management-intro.rstbalance 子命令的用戶態(tài)實(shí)現(xiàn)含 cancel / pause / resume / statuscmds/balance.c一句話總結(jié)先filesystem df摸清底數(shù)用usage從小往大擰空間用convertsoft換布局隨時(shí)pause/resume兜底——這就是 btrfs balance 的全部心法。【免費(fèi)下載鏈接】btrfs-progsDevelopment of userspace BTRFS tools項(xiàng)目地址: https://gitcode.com/gh_mirrors/bt/btrfs-progs創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考