为什么我的所有 ZFS 快照目录都是空的?

为什么我的所有 ZFS 快照目录都是空的?

我正在运行一个 Oracle 11 盒作为 ZFS 存储设备,并且通过定期对 ZFS 文件系统进行快照cron

过去,我知道如果我想从快照中抓取某个文件,会保留一个只读副本.zfs/snapshot/{name}/,我只需导航到那里并提取文件即可。这已记录在案在 Oracle 网站上

但是,前几天我去执行此操作时,发现快照目录中的 ZFS 目录都是空的。zfs list -t snapshot正确显示了应该存在的快照列表,并.zfs/snapshots正确包含每个快照的目录,并且每个快照中都有每个 ZFS 文件系统的目录。但是,这些目录似乎为空。

我刚刚测试了恢复,方法是触碰一个不常用的共享中的文件并回滚到最新的每小时快照,这似乎运行良好。所以回滚功能是存在的。

Oracle 是否改变了快照的生成方式?或者这里出了什么严重问题?

答案1

例如,如果您有一个后代 ZFS 文件系统tank/newfs。那么您将不会在文件夹tank/newfs中找到文件/tank/.zfs/mysnapshot,只有挂载点newfs存在。如果您想访问文件,您需要在/tank/newfs/.zfs/mysnapshot文件夹中查找文件。

答案2

列出的快照.zfs/snapshot/会在浏览时按需自动安装,不再使用时会自动卸载。

在目录中执行简单操作ls显然不足以被视为“需求”。您需要cd进入相关目录,然后发出ls命令。

您可能还需要设置snapdir=visible文件系统。

答案3

在 ZoL 上(尽管最初的 q 指的是 Solaris),漏洞目前存在一个问题,即 @Daniel 描述的自动挂载功能无法工作,导致快照目录为空。这似乎专门发生在 ZFS 根文件系统上(快照通常在 下访问/.zfs/snapshot)。

一个明显的迹象是/proc/spl/kstat/zfs/dbgmsg阅读中的条目Unable to automount <snapdir_path> error=512

两个都此处建议的解决方法对我有用(我在 Ubuntu 21.10 上运行 ZoL 2.0.6 并通过 ZFS 启动菜单启动):

  1. 将您的 ZFS 根文件系统挂载点添加到/etc/fstab(例如zpool/ROOT/rootfs / zfs defaults 0 0:)并重新启动
  2. mkdir /sysroot && mount -o bind / /sysroot;然后可以通过以下方式访问 snap/sysroot/.zfs/

选择您喜欢的解决方法(不需要两者)。

根据对相关问题

这个错误发生在带有 initramfs 的系统上,该系统将 chroot(2) 转换为新的根文件系统,并通过运行 switch_root(8) 启动 init 进程。

答案4

如果安装快照失败,该.zfs/snapshot/my_snapshot文件夹也会显示为空。

在我的例子中,运行sudo mount -t zfs tank/my_dataset@my_snapshot /mnt/mountpoint失败,出现输入/输出错误,这是 zfs 版本从 升级0.8.something2.1.5引入的。请参阅github 问题

相关内容