Performance
有效地從 ZFS 中刪除 10M+ 文件
我編寫了一個錯誤的程序,它意外地在 /tmp 下創建了大約 30M 的文件。(這個錯誤是幾週前引入的,它每秒創建幾個子目錄。)我可以將 /tmp 重命名為 /tmp2,現在我需要刪除這些文件。系統是 FreeBSD 10,根文件系統是 zfs。
與此同時,鏡像中的一個驅動器出了問題,我已經更換了它。該驅動器有兩個 120GB SSD 磁碟。
問題是:更換硬碟驅動器並重新同步整個陣列只用了不到一個小時。刪除文件 /tmp2 是另一回事。我編寫了另一個程序來刪除文件,它每秒只能刪除 30-70 個子目錄。刪除所有文件需要 2-4 天。
重新同步整個陣列需要一個小時,但從磁碟中刪除需要 4 天,這怎麼可能?為什麼我的表現這麼差?70 次刪除/秒似乎非常非常糟糕的性能。
我可以手動刪除 /tmp2 的 inode,但這不會釋放空間,對吧?
這可能是 zfs 或硬碟驅動器的問題嗎?
ZFS 中的刪除代價高昂。如果您在文件系統上啟用了重複數據刪除,則更是如此(因為取消引用重複數據文件的成本很高)。快照也可能使事情複雜化。
您最好刪除
/tmp
目錄而不是其中包含的數據。如果
/tmp
是 ZFS 文件系統,請將其刪除並重新創建。
重新同步整個陣列需要一個小時,但從磁碟中刪除需要 4 天,這怎麼可能?
考慮一棟辦公樓。
從所有樓層的所有辦公室移除所有電腦、家具和固定裝置需要很長時間,但辦公室可以立即供其他客戶使用。
使用 RDX 拆除整棟建築要快得多,但下一個客戶很可能會抱怨這個地方有多通風。