Btrfs

BtrFS 快照會殺死我的 SSD 嗎?

  • February 12, 2018

據我所知,BtrFS 快照實際上並不複製數據。我想,每次更改快照數據時都會執行實際複製。

那麼,啟用快照的 SSD 上的 BtrFS 分區是否會使 SSD 記憶體的磨損加倍?一次寫入新數據,第二次寫入將差異記錄到快照。

我已經使用帶有快照的/BtrFS 作為分區的文件系統已經有相當長的一段時間了,而且有好幾次它確實對我有幫助。但現在我要在 SSD 上安裝系統。

TL;博士

不,它不會減少 SSD 的壽命,就像使用沒有快照的 BTRFS 一樣。

解釋

有幾種不同的方法可以在軟體中實現快照:

  1. 您儲存所有被快照的數據的精確副本。這不是很有效(在空間和時間方面),但它是儲存數據真實歷史副本的唯一選項,並且實現起來非常簡單。由於效率問題,它沒有廣泛用於快照,但這本質上是卷的完整備份。
  2. 您儲存數據的目前狀態和歷史狀態之間差異的副本。此方法在讀取數據時存在性能問題,因為系統必須在請求的時間計算請求數據的狀態。這可以通過以下兩種方式之一進行分層:

一種。每個快照儲存數據的目前狀態與拍攝快照時數據的狀態之間的差異。這是節省空間的,但不節省時間(因為寫出更改的時間與快照數量成線性關係)。快照的讀取性能很差,但對於目前數據來說還不錯。這種方法並沒有被廣泛使用,因為它實現起來有些棘手,而且寫入性能非常糟糕,你還不如只儲存一個完整的副本。

灣。拍攝的第一個快照存檔了當時數據的狀態,隨後的快照僅儲存自該副本以來的差異,目前狀態是一種特殊情況,會隨著使用者更新而改變。如果您只修改現有數據而不添加或刪除任何數據,這只會節省空間,但比 2a 更節省時間。大多數快照和目前數據的讀取性能都很差,但對於第一個快照來說還不錯。這就是增量備份的工作方式,並且在一個特殊的安排中,每個差異都與以前的版本是版本控制軟體所做的,但它並沒有被廣泛用於快照,因為下一個選項幾乎在所有方面都更好。 3. 快照是通過寫時複製 (COW) 語義實現的。這是最節省空間的選項,並且平均比方法 2 的兩種變體更節省時間。使用 COW 快照,任何給定的數據都儲存一次,並且包含該數據的每個快照都會引用它。這解決了選項 1 和 2 的大部分問題。也有兩種方法可以處理 COW 快照:

一種。噹噹前版本中給定的一條數據發生變化時,將舊數據複製到快照中,然後更新新數據。這會導致在拍攝快照後對某個位置的第一次寫入出現性能問題,但隨後的寫入很好,並且性能在其他方面是合理的。這就是 LVM 實現快照的方式,因為它很容易附加到尚未使用 COW 語義的現有數據集。

灣。噹噹前版本中的給定數據發生更改時,在目前版本中創建該位置的新副本並將更改的數據儲存在那裡。這避免了選項 3a 的首次寫入性能問題,但在刪除快照時會導致性能損失(因為您必須驗證每一位數據的引用以確定是否可以刪除它)。這就是 ZFS 和 BTRFS 實現快照的方式(儘管 BTRFS 在某些非常特殊的情況下使用方法 3a)。

因為 BTRFS 使用方法 3b,在處理元數據時使用快照唯一增加的成本,這應該佔 BTRFS 寫入的實際數據的很小百分比(並且元數據更新無論如何都會發生,它們只是稍微小一點,沒有快照)。

引用自:https://unix.stackexchange.com/questions/423587