我正在使用 ZFS 运行 FreeBSD 主机。
假设我正在使用以下命令在远程主机上存储一系列增量 ZFS 快照图像zfs send
:
zfs send -i zpool/data/foo@04hoursago zpool/data/foo@10hoursago > /nfs/backups/foo.zfs
或者我想通过 FTP 服务器发送流:
% ftp backup
ftp> put "| zfs send -i zpool/data/foo@04hoursago zpool/data/foo@10hoursago" /backups/foo.zfs
我想验证这个远程图像。我想打印此图像中的快照列表,或者选择提取校验和或其他元数据以帮助检查图像是否有效并包含我预期的快照。
如何查询图像文件并查看里面的内容?
我已经尝试zfs receive
使用-nv
(no-op
和verbose
) 标志来列出图像中的快照,但这可能不适用于实时系统:
# zfs receive -nv zpool < /nfs/backups/foo.zfs
cannot receive new filesystem stream: destination 'zpool' exists
must specify -F to overwrite it
# zfs receive -nv -F zpool < /nfs/backups/foo.zfs
cannot receive new filesystem stream: destination has snapshots (eg. zpool@09hoursago)
must destroy them to overwrite it
更现代的 ZFS 版本提供了一个名为的命令,该命令
zstreamdump
可以从使用zfs send
.这是使用命令行的示例:
还有一个来自 FTP 的例子:
这为我提供了实际快照的名称,以及该快照的校验和。当然,它不会为我提供快照中的文件列表,因为该信息存在于不同的层。
我实际上并没有在使用创建的增量快照上尝试过这个
zfs send -i
,但这可能是我想要的。我认为您的
-nv
方法的问题是在接收时没有创建中间文件系统-n
,因此每次都会失败,而它在没有 no-op 标志的情况下工作(但扩展完整的文件系统可能需要很长时间)。不幸的是,大多数在线文档/博客不使用此标志,因此他们从未像您(和我)那样遇到此错误。还有来自Solaris Internals ZFS Best Practices Guide的警告:
特别是对于大型数据集,这意味着三件事:
zfs list -r
和zfs diff
.-v
开关按预期工作并且可以轻松解析。