Bash

刪除最舊的 ZFS 快照如何不會中斷數據流?

  • July 21, 2021

我對 ZFS 並不陌生。我已經使用它幾年了,但我才剛剛開始製作快照,並且我創建了一個 cronjob 和腳本來為我的一些數據集拍攝每日快照,這些數據集都位於同一個池中。

我正在尋找一種在另一個 cron 腳本中列出我的快照的快速方法,以便我可以銷毀最舊的一個。目標是擁有一組連續滾動的 7 個快照:因此我可以回滾到過去 7 天中的任何一天。

我的腳本正在執行,我目前只有一組快照(今天)。我在https://serverfault.com/users/15810/AaronLS找到了一個非常酷的答案,用於查找最舊的快照並銷毀它。我計劃將它添加到我的 bash 腳本中,以便它每天拍攝一個快照,然後立即找到最舊的一個並將其銷毀。

AaronLS 的答案在這個問題中:How to delete all but last$$ n $$ZFS 快照?

我的問題是一個無知,真的。我認為您從任何給定數據集製作的第一個快照是該數據集的完整圖像,任何進一步的快照都基於該第一個快照,而任何最近的快照只是自第一個快照以來的更改記錄。

因此,如果我刪除了最舊的快照,ZFS 是否必須更改第二舊的快照才能再次獲得完整的“第一個快照”映像?

我是否正確解釋了自己?當然,如果您刪除原始快照,那麼現在下一個最舊的快照將成為“原始”快照,並且需要在其中處理一些數據才能成為完整的數據集圖像?

有人可以用外行的方式向我解釋為什麼我的假設是錯誤的嗎?我覺得我有點理解快照,但我只是缺乏信心。我打算今晚嘗試在 10 分鐘的 crontab 上執行我的腳本,這樣我就可以在 70 分鐘內模擬一周的快照,但我不確定在繼續之前我是否理解數學。

我也為糟糕的格式道歉。如果我知道如何正確引用使用者名並連結到另一篇文章,我將編輯這篇文章以使其更整潔。我很久沒有在這裡發帖了。

謝謝。

如果我沒記錯的話,當你拍攝快照時,什麼都沒有發生,它只是一個時間戳。然後你的數據開始改變。在每次更改之前,原始數據都會復製到快照中。

每個快照都是在某個時間點表示文件系統所需的數據的完整索引。除了共享數據空間之外,快照是完全相互獨立的。

您正在考慮增量,但 zfs 快照不是增量。它們不包含任何實際數據,因此這樣做沒有任何好處。

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