我正在考虑使用Linux上的ZFS从ext3迁移到ZFS,以便在我的Debian Linux主机上进行数据存储。 我真正想要的ZFS的一个杀手function是它的数据完整性保证。 随着我的存储需求的增加,轻松增长存储的能力也是我期待的。
不过,我也在同一台主机上运行了一些虚拟机。 (虽然通常,在我的情况下,一次只有一个虚拟机在主机上运行。)
考虑到ZFS的数据校验和写时复制行为,再加上VM磁盘镜像是比较庞大的文件(我的主VM的磁盘映像文件当前位于31 GB), VM guest虚拟机内部的性能影响如何迁移? 我可以采取哪些措施来减less可能对性能造成的负面影响?
如果有必要的话,我可以在虚拟机磁盘映像上使用较less的数据完整性保证(我不会在任何虚拟机内部做任何真正关键的操作),并且可以很容易地将它们与文件系统的其余部分分开,但是如果我不不必(甚至有select地)closures大多数让我想要迁移到不同文件系统的function。
硬件对于工作站级系统来说非常有用,但对于高端服务器(32GB RAM,很less使用10GB以上,6核3.3GHz CPU,目前2.6TB可用)磁盘空间根据df和共约1.1 TB的免费;迁移到ZFS可能会增加一些更多的可用空间 ),我不打算运行重复数据删除(因为开启重复数据删除就不会增加太多我的情况) 。 计划是从一个JBODconfiguration开始的(显然具有良好的备份),但是如果条件允许的话,我可能会最终转向双向镜像设置。
由于ZFS在块级别上工作,文件的大小没有区别。 ZFS需要更多的内存和CPU,但作为一个文件系统本质上并不会太慢。 尽pipe您需要知道RAIDZ在速度上与RAID5不相等。 在速度优先的地方,RAID10是很好的。
体面的(即buff)硬件上的ZFS可能会比其他文件系统更快,您可能希望在快速(即SSD)位置创buildZIL。 这本质上是一个caching写入的位置(好吧,更像是在ext3 / 4中的日记)。 这使得在实际的主轴有数据之前,该框会写入写入磁盘。
您也可以在SSD上创build用于读取caching的L2 ARC。 在虚拟机环境中,您可以同时启动多个虚拟机,从而将物理磁盘置于其中。
驱动器进入VDEV,VDEV进入zpools(请一次使用整个磁盘)。 如果这是一个较小的系统,您可能需要一个zpool(如果您不太关心数据丢失),可能需要一个VDEV。 VDEV是你selectRAID级别的地方(尽pipe如果你有足够的磁盘,你也可以镜像VDEVs)。 VDEV中最慢的磁盘决定了整个VDEV的速度。
ZFS是关于数据完整性的 – 所有文件系统维护的传统工具都不存在(如fsck)的原因是它们解决的问题在ZFS文件系统中是不存在的。
国际海事组织(IMO)最大的缺点是,如果你的文件系统接近完整(比如说75%以上),它会变得非常慢。 只是不要去那里。
31GB真的不大…
无论如何,根据您当前使用的文件系统,您可能会发现ZFS稍微慢一些,但根据您的硬件规格,它可能可以忽略不计。
很显然,ZFS会使用大量的内存来caching,这可能会让你的虚拟机看起来更加“普遍使用”(当不用重读或者写入时)。 我不确定在Linux上如何调整ZFS,但是如果可能的话,你可能需要限制它的ARC,以阻止它在你所有的RAM上运行(看到你将需要为你的主机系统留下一个体面的块,虚拟机)。
我会启用压缩(build议这些天是打开它,除非你有一个很好的理由)。 请记住, 在将数据存入文件系统之前 ,必须先完成这一步。 大多数人惊讶地发现它实际上更快,因为压缩algorithm通常比磁盘IO运行得更快。 我怀疑这会对你的6核心处理器造成很大的性能问题。 我并不希望虚拟机压缩太多,但是我设法使用默认压缩设置将〜470GB的虚拟机数据转换为304GB。
不要打扰重复数据删除,稍后它会回来困扰你,你会花几个星期洗牌数据,试图摆脱它。
如果确实遇到性能问题,那么显而易见的答案就是添加SSD作为ZIL / L2ARC甚至两者。 对于两者都使用一个设备是不理想的,但它很可能仍会提高包含less量磁盘/ vdevs的池的性能。
要添加:如果可能的话,我真的会尝试从冗余configuration开始(理想上是镜像),或者尽快从条带转换为镜像。 虽然ZFS将检查所有数据并在运行中(或在清理过程中)检测错误,但是无法执行任何操作(不使用copies = 2会使磁盘使用量增加一倍)。 你只是留下来告诉你有文件错误(可能是你的VM磁盘映像),你将不能做很多事情,而不删除和重新创build这些文件。
根据您的使用情况和虚拟机,我会考虑以下。 让主机操作系统负责保存在ZFS卷上存储的文件。
如果可能的话,为每个虚拟机创build一个LUN,只包含操作系统和必要的二进制文件。 并通过NFS,samba或iSCSI(或评论中提到的zvols)将个人数据存储为共享。 ZFS能够跟踪每个文件的校验和访问时间等。 当然,如果速度不是那么重要的话,你也可以在某些数据存储上启用压缩。 好处将是另一个文件系统的缺失层。 如果你为第二个虚拟硬盘创build一个LUN并在其上创build一个NTFS文件系统,ZFS必须处理一个大的Binary blob,不知道任何内容或文件,因此不能利用ZIL或ARCcaching平面文件可以使用相同的方式。
提到ACL,ZFS能够通过NFSv4或Samba(如果启用)使用ACL。 我承认我在FreeBSD上使用ZFS,并且不能保证如何启用与ZFS卷交互的Sambas ACL。 但我相信这不应该是一个大问题。
所有虚拟机开始读取相同的数据块时,重复数据删除与读取caching结合在一起可以节省一些空间并改善大量读取(引导风暴)。
虚拟机和数据存储的ZFS快照也是如此。 您可以创build一个简单的shell脚本,冻结虚拟机,创build虚拟机和数据存储的快照并继续工作,或者单独使用数据存储,然后克隆虚拟机提供原始虚拟机的快照并testing一些内容。
ZFS的可能性是无止境的;)
编辑:希望我已经解释了一点好了
编辑2:个人观点:考虑使用RAIDZ2(RAID6),因为你可以承受双盘故障! 如果您剩下一个备用磁盘,它永远不会错,但是两个磁盘故障应该足以快速closures。 我只是张贴我的脚本来监视磁盘状态