对于我曾经尝试过的所有 ZFS-on-Linux 版本,zfs list
用于列出文件系统或卷 ( zfs list -r -t snapshot -H -o name pool/filesystem
) 的所有快照的运行时间总是比 运行时间多几个数量级ls .zfs/snapshot
,这是立即的:
$ time ls -1 /srv/vz/subvol-300-disk-1/.zfs/snapshot
[list of 1797 snapshots here]
real 0m0.023s
user 0m0.008s
sys 0m0.014s
# time zfs list -r -t snapshot -H -o name vz/subvol-300-disk-1
[same list of 1797 snapshots]
real 1m23.092s
user 0m0.110s
sys 0m0.758s
此错误是否特定于 ZFS-on-Linux?
任何拥有 Solaris 或 FreeBSD ZFS 机器的人都可以执行类似的测试(在旋转硬盘上具有数百个快照的文件系统上)吗?
是否有一种解决方法可以快速获取卷的快照列表,该卷本质上没有.zfs
目录?
我已经在内核 2.6.32-43-pve x86_64 (Proxmox) 上使用 ZFS-on-Linux 0.6.5.2-2-wheezy 运行了上述测试,但我总是在较旧和较新的 ZFS 和内核上看到这个问题版本。
以下是泳池数据:
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
vz 25.2T 9.42T 15.8T - 5% 37% 1.00x ONLINE -
它包含 114 个文件系统和 1 个卷,每个卷都有数百个快照,因为这是一个zfs send
/zfs recv
备份服务器。
解决方案: zfs list
速度很慢,因为它会获取额外的信息,即使它没有显示。解决方案是同时添加-o name -s name
,即使用zfs list -t snapshot -o name -s name