
我一直在使用 LVM 快照來備份 MySQL 資料庫。
FLUSH TABLES WITH READ LOCK
lvcreate --snapshot --size 4G
由於在快照處於活動狀態時資料庫處於活動狀態,因此(snap_percent
用於追蹤拍攝快照時檔案系統原始狀態的增量的快照儲存量)開始增加。snap_percent
每天對此進行監控,如果--size
達到 80%,則增加。
我的問題是是否存在等效的統計數據或屬性ZFS用於決定快照消耗的空間佔池中剩餘空間的百分比?顯然,我不需要傳遞--size
參數,zfs snapshot
但如何確定基於該快照的克隆是否接近池的限制。
希望這是有道理的,現在我讀到它時,這聽起來確實是一個令人費解的問題。
答案1
ZFS 快照空間反映在檔案系統的消耗中。您可以透過監控下面最合適的欄位來得出您所要求的內容。
最後,您將觀察檔案系統的「可用」空間...看看「已使用」+「可用」如何小於「大小」?
root@deore:~# df -h /volumes/vol1/LA_Specialty
Filesystem size used avail capacity Mounted on
vol1/LA_Specialty 800G 391G 254G 61% /volumes/vol1/LA_Specialty
我已經過濾了下面的輸出zfs get all pool/filesystem
以顯示相關屬性。下面,我有一個 800GB 的檔案系統(配額),其中使用了 545GB。 391GB 是引用的,這意味著這是真實數據的大小。 154GB 用於快照。
root@deore:/volumes# zfs get all vol1/LA_Specialty
NAME PROPERTY VALUE SOURCE
vol1/LA_Specialty type filesystem -
vol1/LA_Specialty creation Sat Sep 24 18:44 2011 -
vol1/LA_Specialty used 545G -
vol1/LA_Specialty available 255G -
vol1/LA_Specialty referenced 391G -
vol1/LA_Specialty compressratio 2.96x -
vol1/LA_Specialty quota 800G local
vol1/LA_Specialty reservation none default
vol1/LA_Specialty recordsize 16K local
vol1/LA_Specialty mountpoint /volumes/vol1/LA_Specialty inherited from vol1
vol1/LA_Specialty usedbysnapshots 154G -
vol1/LA_Specialty usedbydataset 391G -
vol1/LA_Specialty usedbychildren 0 -
vol1/LA_Specialty usedbyrefreservation 0 -
然後查看快照...可以看到快照的單一大小以及它們引用的總資料大小。
root@deore:/volumes# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
vol1/LA_Specialty@snap-daily-1-2013-09-07-020003 57.6G - 389G -
vol1/LA_Specialty@snap-daily-1-2013-09-08-020003 1.95G - 391G -
vol1/LA_Specialty@snap-daily-1-2013-09-09-020008 3.42G - 392G -
vol1/LA_Specialty@snap-daily-1-2013-09-10-020003 3.05G - 391G -
vol1/LA_Specialty@snap-daily-1-2013-09-11-020003 2.81G - 391G -
vol1/LA_Specialty@snap-daily-1-2013-09-12-020004 2.65G - 391G -
vol1/LA_Specialty@snap-daily-1-2013-09-13-020003 2.70G - 391G -
vol1/LA_Specialty@snap-daily-1-2013-09-14-020003 25K - 391G -
vol1/LA_Specialty@snap-daily-1-latest 25K - 391G -
以及du
快照目錄的列表......
root@deore:/volumes/vol1/LA_Specialty/.zfs/snapshot# du -skh *
389G snap-daily-1-2013-09-07-020003
391G snap-daily-1-2013-09-08-020003
392G snap-daily-1-2013-09-09-020008
391G snap-daily-1-2013-09-10-020003
391G snap-daily-1-2013-09-11-020003
391G snap-daily-1-2013-09-12-020004
391G snap-daily-1-2013-09-13-020003
391G snap-daily-1-2013-09-14-020003
391G snap-daily-1-latest
答案2
ZFS 快照中包含大量隱藏資料。一般來說我會推薦你
zfs list -ro space
其中顯示的輸出類似:
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
rootpool/export/home 6.37G 11.7G 2.80G 8.87G 0 0
rootpool/export/[email protected] - 134M - - - -
rootpool/export/[email protected] - 320M - - - -
rootpool/export/[email protected] - 251M - - - -
rootpool/export/[email protected] - 1.02M - - - -
rootpool/export/[email protected] - 1.04M - - - -
rootpool/export/[email protected] - 850K - - - -
rootpool/export/[email protected] - 747K - - - -
rootpool/export/[email protected] - 326K - - - -
rootpool/export/[email protected] - 454K - - - -
rootpool/export/[email protected] - 319K - - - -
這將告訴您,我在此特定資料集上總共使用了 11.7G,快照使用了 2.8G,實際檔案系統(活動資料)使用了 8.87G。然而,每個快照旁邊的已使用大小非常具有誤導性。
如果您將快照的「已使用」欄位中的所有數字相加,您將發現它們與「USEDSNAP」總數相差甚遠。這是因為USED值是多少獨特的每個快照所佔的空間。
例如:
如果我有一個名為「newpool」的池,並且它有 2 個 1G 檔案(fileA 和 fileB):
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 0.00G 2.0G 0 0
現在我斷言:
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 0.00G 2.0G 0 0
newpool@snap1 11.0G 0.0G 0.00G 2.0G 0 0
現在我刪除1個1G檔(fileA):
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 1.00G 1.0G 0 0
newpool@snap1 - 1.0G - - - -
現在我建立一個新的1G檔案(fileC):
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 10.0G 3.0G 1.00G 2.0G 0 0
newpool@snap1 - 1.0G - - - -
現在我又拍了一遍
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 10.0G 3.0G 1.00G 2.0G 0 0
newpool@snap1 - 1.0G - - - -
newpool@snap2 - 0.0G - - - -
現在我刪除 fileB(在兩個快照中):
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 10.0G 3.0G 2.00G 1.0G 0 0
newpool@snap1 - 1.0G - - - -
newpool@snap2 - 0.0G - - - -
注意快照 USED 欄位的表現不是反映變化?這是因為 fileB 被兩個快照引用,並且由於它不是唯一的,因此不會顯示在任何特定快照的已使用計數中。 USEDSNAP 欄位反映該空間已被快照使用,但它不會將其與任何特定的快照關聯。
現在,如果您要刪除 snap1:
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 1.00G 1.0G 0 0
newpool@snap2 - 1.0G - - - -
snap2 現在顯示它已使用 1.0G,因為該資料現在對於該快照是唯一的。
USED 欄位將顯示如果刪除該單一快照可以回收多少空間,但不會真正顯示該快照保留了多少空間。
既然我已經說了這一切——
如果您打算僅保留任何特定資料集的一個快照,那麼zfs 列表 -ro 空間命令應該會給你你正在尋找的東西。
如果您要同時擁有多個快照,則此數據可能會產生誤導。在處理多個快照時,不要自然而然地假設 USED 列具有任何意義。也,杜在快照目錄上是一個糟糕的選擇,因為它只顯示快照引用的內容,而不是快照實際使用的空間。
zfs 線上說明頁介紹了其中的一些內容,但它並不能很好地顯示這些關係。
答案3
ZFS 中沒有直接等效的東西。最接近的等價物是池中的可用空間,您可以從 獲得zfs list
。在 ZFS 上,您的快照可以成長,直到整個池空間耗盡。