有没有办法挂载一个只包含特定于快照的文件的虚拟分区?我知道隐藏的 zfs 目录,但它包含快照时的所有文件。我的目标是让差异备份更快......
提前致谢
格雷格
尽管 Andrew 的建议zfs send
是使用差异快照的正确方法,但如果您只想查看差异并在您自己的脚本或其他没有 ZFS 支持的平台上使用它们,还有zfs diff
:
zfs diff [-FHt] snapshot snapshot|filesystem
Display the difference between a snapshot of a given filesystem
and another snapshot of that filesystem from a later time or
the current contents of the filesystem. The first column is a
character indicating the type of change, the other columns
indicate pathname, new pathname (in case of rename), change in
link count, and optionally file type and/or change time.
The types of change are:
- The path has been removed
+ The path has been created
M The path has been modified
R The path has been renamed
-F
Display an indication of the type of file, in a manner
similar to the -F option of ls(1).
B Block device
C Character device
/ Directory
> Door
| Named pipe
@ Symbolic link
P Event port
= Socket
F Regular file
-H
Give more parsable tab-separated output, without header
lines and without arrows.
-t
Display the path's inode change time as the first column of
output.
请注意,两个数据集的顺序必须按时间顺序排列。您可以解析结果列表并仅使用您感兴趣的那些文件名。
手册页的示例输出:
# zfs diff -F tank/test@before tank/test
M / /tank/test/
M F /tank/test/linked (+1)
R F /tank/test/oldname -> /tank/test/newname
- F /tank/test/deleted
+ F /tank/test/created
M F /tank/test/modified
此外,如果您使用 Oracle Solaris 11.3,您还可以-r
切换以递归方式区分所有子数据集。
无法通过“正常”文件访问直接访问差异数据,即使您可以获得从其中获得的数据也无法应用。如果仅更改一两个块,您如何仅读取文件中的差异?如果您可以仅读取差异,您怎么知道如何将更改的数据应用到更改的文件中?如果您要加快差异备份的速度,那是一种“补丁”式的更新,可能会非常缓慢。
简单的“正常”文件访问不提供进行仅差异备份所需的信息。
要对 ZFS 进行差异备份,请使用增量zfs send ...
命令:
zfs send -i pool@snap1 pool@snap2 ...
这就是它的意义所在,实际上没有办法更快地做到这一点,因为 ZFS 文件系统是从头开始设计的,以了解差异。