Solaris

如何刪除除最後一個以外的所有內容nnnZFS 快照?

  • July 6, 2021

我目前正在每晚和每週對基於 ZFS 的 NAS 進行快照,這個過程已經節省了我幾次。然而,雖然快照的創建是自動的(來自 cron),但刪除舊快照仍然是一項手動任務。顯然,如果我被公共汽車撞到,或者沒有執行手動任務,NAS 可能會耗盡磁碟空間。

有沒有人有任何好的方法/腳本來管理儲存在 ZFS 系統上的快照數量?理想情況下,我想要一個腳本,它遍歷給定 ZFS 文件系統的所有快照,並刪除該文件系統的除最後n 個快照之外的所有快照。

例如,我有兩個文件系統,一個被稱為tank,另一個被稱為sastank. 快照以它們的創建日期命名:sastank@AutoD-2011-12-13所以一個簡單的sort命令應該按順序列出它們。我希望保留過去 2 週的每日快照tank,但僅保留最後兩天的快照sastank

你可能會發現這樣的東西更簡單一些

zfs list -t snapshot -o name | grep ^tank@Auto | tac | tail -n +16 | xargs -n 1 zfs destroy -r
  • 輸出快照列表(僅名稱)zfs list -t snapshot -o name
  • 過濾以僅保留tank@Autogrep ^tank@Auto
  • 反轉列表(以前從最舊到最新排序)tac
  • 將輸出限制為第 16 個最舊的結果,然後使用tail -n +16
  • 然後銷毀xargs -n 1 zfs destroy -vr

以相反的順序刪除快照據說效率更高,或者按創建的相反順序排序。

zfs list -t snapshot -o name -S creation | grep ^tank@Auto | tail -n +16 | xargs -n 1 zfs destroy -vr

...|xargs -n 1 echo.

引用自:https://serverfault.com/questions/340837