Identifying ZFS Snapshot Differences (zfs diff)
You can determine ZFS snapshot differences by using the zfs diff command.
For example, assume that the following two snapshots are created:
$ ls /system1/home/kaydo fileA $ zfs snapshot system1/home/cpark@snap1 $ ls /system1/home/kaydo fileA fileB $ zfs snapshot system1/home/cpark@snap2
To identify the differences between the two snapshots, you would use syntax similar to the following example:
$ zfs diff system1/home/cpark@snap1 system1/home/cpark@snap2
M /system1/home/kaydo/
+ /system1/home/kaydo/fileBIn the output, the M indicates that the directory has been modified. The + indicates that fileB exists in the later snapshot.
The R in the following output indicates that a file in a snapshot has been renamed.
$ mv /system1/kaydo/fileB /system1/kaydo/fileC $ zfs snapshot system1/kaydo@snap2 $ zfs diff system1/kaydo@snap1 system1/kaydo@snap2 M /system1/kaydo/ R /system1/kaydo/fileB -> /system1/kaydo/fileC
The following table summarizes the file or directory changes that are identified by the zfs diff command.
| File or Directory Change | Identifier |
|---|---|
|
File or directory has been modified or file or directory link has changed |
|
|
File or directory is present in the older snapshot but not in the more recent snapshot |
|
|
File or directory is present in the more recent snapshot but not in the older snapshot |
|
|
File or directory has been renamed |
|
For more information, see the
zfs(8) man page.
If you compare different snapshots by using thezfs diff command, the high level differences are displayed such as a new file system or directory. For example, the sales file system has 2 descendant file systems, data and logs with files within each descendant file system.
$ zfs list -r sales
NAME USED AVAIL REFER MOUNTPOINT
sales 1.75M 66.9G 33K /sales
sales/data 806K 66.9G 806K /sales/data
sales/logs 806K 66.9G 806K /sales/logsThe high-level differences can be displayed between sales@snap1 and sales@snap2, where the primary difference is addition of the sales/logs file system.
$ zfs diff sales@snap1 sales@snap2
M /sales/
+ /sales/logs
You can recursively identify snapshot differences including file names by using syntax similar to the following:
$ zfs diff -r -E sales@snap1 D /sales/ (sales) + /sales/data D /sales/data/ (sales/data) + /sales/data/dfile.1 + /sales/data/dfile.2 + /sales/data/dfile.3 $ zfs diff -r -E sales@snap2 D /sales/ (sales) + /sales/data + /sales/logs D /sales/logs/ (sales/logs) + /sales/logs/lfile.1 + /sales/logs/lfile.2 + /sales/logs/lfile.3 D /sales/data/ (sales/data) + /sales/data/dfile.1 + /sales/data/dfile.2 + /sales/data/dfile.3
In the output, the lines that begin with D and end with (name) indicate a file system (dataset) and mount point.