Btrfs+LXC:有什麼方法可以顯示託管 LXC 容器的配額子磁碟區的粗略估計可用空間?

Btrfs+LXC:有什麼方法可以顯示託管 LXC 容器的配額子磁碟區的粗略估計可用空間?

我正在嘗試使用 Btrfs 作為後備存儲來使用 LXC。 Btrfs 允許輕鬆進行快照/重複資料刪除,並且非常適合啟動多個「偽虛擬機器」。

我遇到的問題是我測試的一些應用程式將大量資料轉儲到磁碟。我試圖限制 Btrfs 磁碟區的使用,因此我為 LXC 為特定容器建立的子磁碟區分配了配額。

該應用程式確實有一個故障安全測試 - 當它發現寫入的檔案系統上的可用磁碟空間少於一定量(例如 512MB)時,它開始清除舊日誌以為新日誌騰出空間。

問題是,即使應用了配額,LXC 根檔案系統仍然會報告主機 Btrfs 檔案系統的完整大小。

範例:如果我的 Btrfs 檔案系統為 250GB,並且我使用-B btrfs-s選項建立了一個 LXC 容器,那麼現在 Btrfs 檔案系統中有一個子卷,代表這個新容器的根。然後我想限制容器佔用的空間,因此我對容器應用了 32GB 的 qgroup 限制。然而,df當在 LXC 容器中執行該命令時,仍顯示檔案系統總大小為 250GB,以及大致基於主機檔案系統實際可用空間的可用空間;即配額限制不會顯示到df

這意味著我的日誌應用程式可以填滿整個配額,並且仍然相信它有 200+GB 的空間可供寫入,因此它不會回收舊資料。最終,超出了配額,並且由於 COW 文件系統的限制,我必須禁用配額並手動刪除舊日誌 - 如果仍然以相同大小強制執行配額,則無法刪除數據,因為那裡沒有額外的空間用於刪除操作。

我已經閱讀了足夠多的內容並且對Btrfs 有足夠的了解,明白“自由空間”的概念在Btrfs 中令人困惑,並且可能是一個挑戰,但是有沒有什麼方法可以從LXC 中獲得“大概”的數字還剩下多少配額空間?優選地,這應該由用於獲取磁碟可用空間(df使用的)的標準 API 來完成,因為這意味著它也適用於存取檔案系統並需要知道其大致可用空間的其他應用程式。

如果我可以想像得到 1GB 左右的實際可用空間(由配額提供),這足以讓我調整日誌過期參數,以便檔案系統不會超過配額。

答案1

這是我發現的處理 btrfs 子卷空間分配的最佳工具: 取得 BTRFS 快照的大小 | PoisonPacket 博客

所有積分均歸凱爾·阿格羅尼克(該腳本的作者)所有

相關內容