參考資料:https://www.freebsd.org/doc/zh_TW/books/handbook/zfs-zfs.html
以下是原文
ZFS 提供了內建指令可以用來比對兩個快照 (Snapshot) 之間的差異,在使用者想要查看一段時間之間檔案系統所的變更時非常有用。例如 zfs diff
可以讓使用者在最後一次快照中找到意外刪除的檔案。對前面一節所做的兩個快照使用這個指令會產生以下結果:
#
zfs list -rt all mypool/var/tmp
NAME USED AVAIL REFER MOUNTPOINT
mypool/var/tmp 206K 93.2G 118K /var/tmp
mypool/var/tmp@my_recursive_snapshot 88K - 152K -
mypool/var/tmp@after_cp 0 - 118K -
#
zfs diff mypool/var/tmp@my_recursive_snapshot
M /var/tmp/
+ /var/tmp/passwd
指令會列出指定快照 (在這個例子中為
) 與目前檔案系統間的更改。第一個欄位是更改的類型:mypool/var/tmp@my_recursive_snapshot
+ | 加入了該路徑或檔案。 |
- | 刪除了該路徑或檔案。 |
M | 修改了該路徑或檔案。 |
R | 重新命名了該路徑或檔案。 |
對照這個表格來看輸出的結果,可以明顯的看到
是在快照 passwd
建立之後才加入的,結果也同樣看的到掛載到 mypool/var/tmp@my_recursive_snapshot
的父目錄已經做過修改。/var/tmp
在使用 ZFS 備份功能來傳輸一個資料集到另一個主機備份時比對兩個快照也同樣很有用。
比對兩個快照需要提供兩個資料集的完整資料集名稱與快照名稱:
#
cp /var/tmp/passwd /var/tmp/passwd.copy
#
zfs snapshot mypool/var/tmp@diff_snapshot
#
zfs diff mypool/var/tmp@my_recursive_snapshot
mypool/var/tmp@diff_snapshot
M /var/tmp/
+ /var/tmp/passwd
+ /var/tmp/passwd.copy
#
zfs diff mypool/var/tmp@my_recursive_snapshot
mypool/var/tmp@after_cp
M /var/tmp/
+ /var/tmp/passwd
備份管理者可以比對兩個自傳送主機所接收到的兩個快照並查看實際在資料集中的變更。請參考 備份 一節來取得更多資訊。