Solaris
如何刪除除最後一個以外的所有內容nnnZFS 快照?
我目前正在每晚和每週對基於 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@Auto
與grep ^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
.