访问“仅差异”ZFS快照

时间:2016-02-25 09:41:44

标签: zfs

是否可以安装仅包含特定于快照的文件的虚拟分区?我知道隐藏的zfs目录,但它包含快照时的所有文件。 我的目标是让差异备份更快......

提前致谢

格雷格

2 个答案:

答案 0 :(得分:5)

虽然Andrew提出的[ { "x": 2, "y": 8 }, { "x": 3, "y": 9 }, { "x": 4, "y": 19 }, {} ] 是使用差异快照的正确方法,但如果您只想查看差异并在自己的脚本或其他平台上使用它们ZFS支持,还有zfs send

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.

此外,如果您使用的是Oracle Solaris 11.3,那么您还可以# 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 切换以递归方式对所有子数据集进行差异化。

答案 1 :(得分:2)

无法通过“正常”文件访问直接访问差异数据,即使您可以获取,也无法应用从一个获取的数据。如果只有一两个块发生变化,你怎么能只读出文件中的差异呢?如果您只能阅读差异,您将如何知道如何仅将更改的数据应用于更改的文件?如果您正在尝试加速差异备份,那么这种“补丁”式更新可能会非常缓慢。

简单的“普通”文件访问不提供进行仅差异备份所需的信息。

要对ZFS执行差异备份,请使用增量zfs send ...命令:

zfs send -i pool@snap1 pool@snap2 ...

这就是它的意思,并且实际上没有办法更快地完成它,因为ZFS文件系统是从头开始设计的,以了解它们之间的差异。