如何在不影响当前数据的情况下访问 ZFS 快照的内容?

STW*_*STW 11 zfs

我有一个 ZFS 数据集,它每小时拍摄一次快照。昨天修改了一些需要还原的文件;但是,数据集有不应该恢复的持续更改。

我有哪些选项可以在不干扰当前数据副本的情况下访问快照?我可以将只读模式的快照挂载到新的挂载点吗?

jim*_*gee 16

自从我使用 zfs 已经有一段时间了,但是您应该能够使用它zfs list -t snapshot来查找可用快照并访问.zfszfs 挂载点下特殊目录下的文件。

[~]# zfs list -t snapshot
NAME                       USED  AVAIL  REFER  MOUNTPOINT
mypool                    1.49G   527M   528M  /mnt/zfspool
mypool@snap1                28K      -   993M  -
mypool@snap2                28K      -   993M  -
mypool@snap3                28K      -   993M  -

[~]# cd /mnt/zfspool/.zfs/snapshot/snap1
[snap1]# ls
Run Code Online (Sandbox Code Playgroud)

IIRC,快照已经是只读的,因此尝试更改快照目录中的数据应该会失败。如果真实 fs 中的数据发生变化,则快照应该增长,因为它会复制预先更改的数据以保持快照一致。

您需要zfs clone将快照复制到新位置,以便对快照进行编辑(此时,它就不再是快照了)。

不过,正如我所说,已经有一段时间了,所以先测试一下......

参考:http : //www.googlux.com/zfs-snapshot.html

  • @STW - 根据 https://groups.google.com/a/zfsonlinux.org/forum/#!topic/zfs-discuss/Ktbndmd3rNo,您需要 ZoL 0.6.0rc8,内核 > 2.6.37。根据http://lists.freebsd.org/pipermail/freebsd-fs/2008-November/005345.html,您需要`zfs set snapdir=visible /mnt/zfspool` 使其可见,但您不应该需要它访问你的快照(即你应该能够做`cd /mnt/zfspool/.zfs/snapsot/snap1`无论如何)...... (9认同)
  • @STV 你不会看到 .zfs 但你仍然可以进入它。快照存储在其父数据集中,因此必须安装父数据集才能访问 .zfs (9认同)
  • 是的,ZFS 快照绝对是只读的。 (3认同)