https://www.freebsd.org/doc/zh_TW/books/handbook/zfs-zfs.html
快照會掛載在父資料集下的隱藏目錄:.zfs/snapshots/
。預設不會顯示這些目錄,即使是用 snapshotname
ls -a
指令。雖然該目錄不會顯示,但該目錄實際存在,而且可以像一般的目錄一樣存取。一個名稱為 snapdir
的屬性可以控制是否在目錄清單中顯示這些隱藏目錄,設定該屬性為可見 (visible
) 可以讓這些目錄出現在 ls
以及其他處理目錄內容的指令中。
#
zfs get snapdir mypool/var/tmp
NAME PROPERTY VALUE SOURCE
mypool/var/tmp snapdir hidden default
%
ls -a /var/tmp
. .. passwd vi.recover
#
zfs set snapdir=visible mypool/var/tmp
%
ls -a /var/tmp
. .. .zfs passwd vi.recover
要還原個別檔案到先前的狀態非常簡單,只要從快照中複製檔案到父資料集。在 .zfs/snapshot
目錄結構下有一個與先前所做的快照名稱相同的目錄,可以很容易的找到。在下個範例中,我們會示範從隱藏的 .zfs
目錄還原一個檔案,透過從含有該檔案的最新版快照複製:
#
rm /var/tmp/passwd
%
ls -a /var/tmp
. .. .zfs vi.recover
#
ls /var/tmp/.zfs/snapshot
after_cp my_recursive_snapshot
#
ls /var/tmp/.zfs/snapshot/after_cp
passwd vi.recover
#
cp /var/tmp/.zfs/snapshot/after_cp/passwd
/var/tmp
執行 ls .zfs/snapshot
時,雖然 snapdir
可能已經設為隱藏,但仍可能可以顯示該目錄中的內容,這取決於管理者是否要顯示這些目錄,可以只顯示特定的資料集,而其他的則不顯示。從這個隱藏的 .zfs/snapshot
複製檔案或目錄非常簡單,除此之外,嘗試其他的動作則會出現以下錯誤:
#
cp /etc/rc.conf
/var/tmp/.zfs/snapshot/after_cp/
cp: /var/tmp/.zfs/snapshot/after_cp/rc.conf: Read-only file system
這個錯誤用來提醒使用者快照是唯讀的,在建立之後不能更改。無法複製檔案進去或從該快照目錄中移除,因為這會變更該資料集所代表的狀態。
快照所消耗的空間是依據自快照之後父檔案系統做了多少變更來決定,快照的 written
屬性可以用來追蹤有多少空間被快照所使用。
使用 zfs destroy
可以摧毀快照並回收空間。加上 dataset
@snapshot
-r
可以遞迴移除所有在父資料集下使用同名的快照。加入 -n -v
來顯示將要移除的快照清單以及估計回收的空間,而不會實際執行摧毀的操作。