我正在运行一个 Oracle 11 机器作为 ZFS 存储设备,我正在通过cron
.
过去,我知道如果我想从快照中抓取一个特定的文件,只读副本会保留在.zfs/snapshot/{name}/
里面,我可以导航到那里并拉出文件。这记录在 Oracle 的网站上。
然而,前几天我去做这件事,发现快照目录中的 ZFS 目录都是空的。zfs list -t snapshot
正确显示应该存在的快照列表,并.zfs/snapshots
正确包含每个快照的目录,并且在每个快照中每个 ZFS 文件系统都有一个目录。但是,这些目录似乎是空的。
我刚刚通过触摸一个很少使用的共享中的文件并回滚到最新的每小时快照来测试恢复,这似乎工作正常。所以回滚功能就在那里。
Oracle 是否改变了快照的制作方式?或者这里有什么严重的错误?
如果您有后代 ZFS 文件系统,例如
tank/newfs
. 然后你不会在文件夹中找到文件tank/newfs
,/tank/.zfs/mysnapshot
只有挂载点newfs
存在。如果您想访问您需要在文件夹中查找文件的/tank/newfs/.zfs/mysnapshot
文件。中列出的快照
.zfs/snapshot/
会在浏览时按需自动挂载,不再使用时会自动卸载。在目录中做一个简单
ls
的操作显然不足以被视为“需求”。您将需要cd
进入有问题的目录,然后发出ls
命令。您可能还需要
snapdir=visible
为文件系统进行设置。在 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 启动菜单启动):
/etc/fstab
(例如:)zpool/ROOT/rootfs / zfs defaults 0 0
并重新启动mkdir /sysroot && mount -o bind / /sysroot
; 然后可以通过访问快照/sysroot/.zfs/
选择您喜欢的解决方法(您不需要两者)。
根据对相关问题的评论: