如何访问 ZFS zvol SNAPSHOT 块设备?

如何访问 ZFS zvol SNAPSHOT 块设备?

我有一个运行 ZFS 的 Ubuntu 16.04 机器。我使用 zfs-auto-snapshot 脚本来创建常规快照。我的 ZFS 设置中包含一个 ZVOL 块设备。我想访问(只读)此 ZVOL 的快照,但找不到资源。

当我执行 zfs list -t 快照时,我会看到该块设备的许多快照,例如

zfspool/folio_drbd@zfs-auto-snap_monthly-2017-12-01-1711 2.59G
- 178G - zfspool/folio_drbd@zfs-auto-snap_weekly-2017-12-08-1511 31.3G - 207G - zfspool/folio_drbd@zfs-auto-snap_weekly-2017-12-22-1511 1.97G
- 194G - zfspool/folio_drbd@zfs-auto-snap_weekly-2017-12-29-1511 908M - 197G -

这些没有出现在 /zfspool/.zfs/snapshot/zfs-auto-snap-* 中 - 我如何访问 ZVOL 快照?

答案1

zvol 的快照不会像文件系统快照那样自动显示在文件系统层次结构中(因为它们可以包含任何其他文件系统),但您可以mount在所选目标处访问它们(同样,这取决于 zvol 的内容)。如果挂载失败,您可以尝试先克隆,然后挂载克隆,详情请参阅此邮件列表帖子

你运行了吗dmesg | tail?我猜想 fs 需要日志回复,但由于快照是不可变的,因此会失败。安装克隆将解决此问题。

首先尝试克隆它,例如zfs clone tank/vmdk1@ckpnt2 tank/vmdk1-ckpnt2-clone,然后mount /dev/zvol/tank/vmdk1-ckpnt2-clone /mnt/snap1

答案2

参加聚会有点晚了,但是......

我刚刚偶然发现了同样的问题。与 OP 稍有不同,我没想到我的 ZVOL 快照会位于 中/zfspool/.zfs,而是位于/dev树中的某个位置。

最初,我在那里找不到它们。读完之后man zfs,问题就清楚了。默认情况下,它们是隐藏的,但我们可以通过snapdev相应地设置属性轻松地使它们可见。在我的例子中,我有一个 ZVOL rpool/vm-temp。要使其快照可见,我只需执行

zfs set snapdev=visible rpool/vm-temp

但是,我恢复了这个设置,因为我有数千个快照至少在两个地方可见:直接以编号表示法/dev(例如/dev/zd9984p1:),以及以符号名称表示/dev/zvol/rpool/(例如/dev/zvol/rpool/vm-temp@Y-2020-06-29-13-44-12-part1:),其中后者只是前者的符号链接。

可以想象,几千个快照设备会直接导致/dev无法/dev使用,因此我仅在出现问题时暂时使 ZVOL 快照设备可见,否则将其隐藏。

一个非常有趣的附加方面:

如果您有一个 ZVOL 充当虚拟机的磁盘(假设),那么其中可能有几个分区。如果有N分区,您将在每个快照中获得N+1额外的快照设备,因为 ZVOL 本身被视为磁盘设备,而分区被识别为分区。因此,就像具有多个分区的裸机磁盘一样,1 + number of partitions每个 ZVOL 快照都会获得新的块设备。

您可以从上面的示例中看到这一点:我有,但还有一个带有而不是 的vm-temp@Y-2020-06-29-13-44-12-part1设备(因为我在这个 ZVOL 中有两个分区),再加上一个完全没有尾随的设备,代表 ZVOL 本身。-part2-part1-part...

因此,这个问题的答案是:

/dev/zvol/zfspool您可以使用或 中的设备访问快照,前提是您已通过将相关 ZVOL 的属性/dev设置为 使它们可见。snapdevvisible

不幸的是,您实际上只能在快照设备可见的情况下才能使用这些快照设备,因此另一个答案中显示的方法(克隆快照,使用克隆)可能是更好的方法,具体取决于您拥有的快照数量以及您是否可以忍受它们使目录混乱/dev。无论快照设备是否在树中可见,克隆快照/dev都可以工作。

所以到目前为止,另一个答案是正确的。我只是想补充说明如何实际显示这些设备,使您能够直接使用它们,而无需克隆它们。

相关内容