我在 FreeNAS 8.0.4 中使用 ZFS,并使用 iSCSI 为 Vmware ESXi 5.0 提供 LUN。
我将其发布于http://forums.freenas.org/showthread.php?10990-Memory-utilization-and-performance-problem/page4,但我相信这里的人们可能对 ZFS 更了解。
FreeNAS 没有 iSCSI 取消映射。我已在 ZFS iSCSI 之间创建/移动/删除虚拟机。过了一会儿,zpool list 报告容量已使用 95%。但是,Vmware 显示 VMFS 仅使用了 50% 的容量。
据我所知,创建虚拟机时,zvol 分配了磁盘空间。 但是,当我们移动/删除虚拟机时,zvol 没有更新/没有意识到更新可用容量。
[root@data1] ~# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
data1 2.25T 2.07T 185G 95% ONLINE /mnt
现在,我相信由于 zpool list 中报告的可用容量错误,性能受到了严重影响。
我该怎么做才能让 ZFS 知道真正的可用容量。
非常感谢。
zpool 状态 -v
pool: data1
state: ONLINE
scrub: scrub stopped after 10h31m with 0 errors on Wed Feb 6 13:32:53 2013
config:
NAME STATE READ WRITE CKSUM
data1 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ada0p2 ONLINE 0 0 0
ada1p2 ONLINE 0 0 0
ada2p2 ONLINE 0 0 0
ada3p2 ONLINE 0 0 0
ada4p2 ONLINE 0 0 0
spares
ada5p2 AVAIL
errors: No known data errors
zpool 列表
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
data1 2.25T 2.08T 179G 92% ONLINE /mnt
答案1
您的 zvol 太大了,并且您的 ZFS 实现没有取消映射释放块的能力!
防止这种情况发生的最佳方法是减少您提供给 VMware 的 LUN 数量。由于我们知道当磁盘接近满时 ZFS 性能会下降,因此最好限制 zvol 的最大大小。
例如,如果您有 200GB 的 zpool 存储空间,请确保您向 VMware 呈现的 zvols 小于该大小 - 可能是 150GB。
ZFS 不知道 zvol 块设备上正在使用的文件系统,因此 VMFS 卷上发生的一切就是它知道它有 50% 的可用空间。ZFS 无法知道这一点。如果没有重新格式化/重新创建卷或者扩大 zvol。
就您而言,更好的解决方案是使用 NFS 而不是 iSCSI。如果您没有足够仔细地监控虚拟机磁盘利用率和增长以防止这种情况在 iSCSI 中发生,NFS 可能更有意义。我在 ZFS+VMware 设置中使用 NFS。
另请参阅:当使用 ZFS 的精简配置时,如何确保不会耗尽物理磁盘空间?
和
答案2
您正确地确定了原因 - 顺便说一句,即使使用 SCSI UNMAP,这种情况仍可能发生,因为目前对 TRIM 和 UNMAP 的支持矩阵非常糟糕。但是,有一个解决方案没有人提到过。
首先 - 启用压缩(compress=on 或 compress=lzjb,我不喜欢 compress=gzip,尤其是对于 VM),如果没有这个,这一切都将无法工作。
如果您处理的驱动器已提供给虚拟机(或作为虚拟机的操作系统驱动器),然后使用文件系统进行格式化,则可以使用 Linux 的“zerofree”或 Windows 的“sdelete”等实用程序将所有空闲块写为零。由于 ZFS 在压缩文件系统上处理 0 块的方式存在怪癖,这将释放空间在 zvol 上,使 zvol 更加符合实际使用的容量。
如果您已完成上述操作并且它不起作用(不太可能)或仍然存在很大的差异(也不太可能),即使在位于 LUN 顶部的所有 VM 上的所有驱动器上运行此操作后,您也可以尝试这篇文章 - 请注意我根本没有测试过这个,所以不保证:http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2014849