在 btrfs 文件系統上刪除數千個文件的最快方法是什麼?
目前我有一個結構如下的 btrfs 掛載點:#
/mountpoint/month/day/hourAs24/
每個葉子目錄包含 5,000 到 20,000 個小文件。我在那裡保存了兩個月的文件。每天我使用命令刪除超過 60 天的目錄
rm -R /mountpoint/month/day/
此命令需要很長時間才能執行,並且在命令執行時伺服器上的負載非常高。
/mountpoint/month/
每天在下創建 btrfs 子卷,然後在一個命令中清除子卷會更好嗎?是否有任何其他快速且輕量級的解決方案可以在單個命令中刪除一個 btrfs 目錄下的文件?
編輯: 澄清情況。在結構中,文件夾
month
和day
是hourAs24
由目前日期時間的對應值替換的變數。解決方案後編輯: 它在我的測試機器上執行順利。以下所有作品都安裝了掛載點!首先,我為每個月創建普通目錄
mkdir /mountpoint/month
然後我為每月的每一天創建 btrfs 子卷
btrfs subvolume create /mountpoint/month/day
然後我為一天中的每個小時創建正常目錄
mkdir /mountpoint/month/day/hourAs24
60 天后,我可以輕鬆清除當天的目錄
btrfs subvolume delete /mountpoint/month/day
(現在我要等 60 天才能看到生產伺服器上的性能)
我自己會走子卷路線。你只是無法在速度上擊敗它,如果你歪著頭瞇著眼睛,你甚至可以說它看起來像是儲存文件的“正確”方式……
解除安裝然後刪除一個文件系統,然後創建一個新的文件系統並安裝它,將比刪除單個文件系統中的數千個對象快得多。刪除所需的元數據操作比批量刪除然後重新創建新操作所需的 I/O 操作高幾個數量級。
LVM 足夠靈活,可以處理這類事情。
或者,如果這不可能,您可以在 BTRFS 文件系統中創建大型環回文件,然後將其格式化為 BTRFS 並掛載到您的目錄。不如 LVM 方法快,但仍然比取消連結所有這些文件快得多(或應該快得多)。IIRC,BTRFS 還支持稀疏文件,如果你去那裡,這可能是這條路線的不錯選擇。