使用ZFS和来宾文件系统的SmartOS

如果我使用10个左右的磁盘来做RAIDZ2,那么在客户机操作系统上,如果我使用ext3 / 4这样的文件系统,guest虚拟机文件系统会像使用ZFS一样安全吗?

我所要求的原因是读了一些后,build议在使用ZFS的时候,每1TB的存储量有1Gb的RAM(最终大约20-40TB)。 如果我在主机和guest虚拟机上都有ZFS,那么我需要将RAM加倍。

是和不是。 如果你有ZFS的底部,然后创buildzvols并使用块协议提供它们,或者你提供了一个文件级协议(NFS,CIFS),并创build文件作为磁盘(.vmdk的,.vhd的等) ,您可以获得一些安全性,但是客户端(在这种情况下,VM操作系统)通常并不一定是默认设置的,您可以像现在这样保护您。

原因是很多默认文件系统设置select性能,有时以牺牲安全性为代价。 这就是为什么即使在使用本地硬盘的情况下,Windows机器在突然断电后也可能需要CHKDSK(同样,Linux可能需要fsck)。 您将不得不四处寻找操作系统和文件系统,以确定需要对其进行哪些修改(如果有的话),以使其更经常地与其底层磁盘同步,和/或启用任何日志logging,即文件系统支持。

此外,您使用的从客户端(VM OS)到服务器(ZFS)的选项也会受到一些影响。 其中一个比较臭名昭着的是通过ISO / OSX衍生产品上的COMSTAR的iSCSI。 大多数默认值是COMSTAR在启用“写入caching”的情况下设置新的LU。 这在默认情况下不会将所有传入的I / O作为同步传递到ZFS,而是只有在客户端(VM操作系统)专门标记为ZFS时才这样做。 根据其他设置的不同,虚拟机操作系统不是将所有的I / O都作为同步进行下载,所以它不会作为同步进入ZFS,因此它不使用磁盘ZIL机制,因此你不能从电力损失事件中安全。

这里的主要问题基本上是,虽然ZFS本身是没有腐败的,而且从字面上来说甚至没有“fsck”式的工具,因为ZFS通常不可能“腐化”它自己,所以这个逻辑不一定如果这些上层文件系统没有将每一个I / O同步到第二个磁盘上,那么对于.vmdk或zvols中的文件系统保持正确(默认选项很less这样做)。 如果您的ZFS设置不使用ZIL(例如,因为您禁用了ZIL),或者ZFS所在的底层存储忽略或未发送caching刷新命令(例如,因为您告诉ZFS不要)。 在这种情况下,ZFS应该始终在磁盘上保持一致,但是问题出现在电源事件发生后,它会在'X'秒之前保持一致 – 它将在ZFS中无损坏地启动,但这将是如何事情是5-30秒前。 这对ZFS来说很好,但对于那些zvols / disks-as-files(.vmdk's)里面的文件系统可能不是那么好。 如果您愿意的话,5秒的“回滚”可能是该.vmdk中的文件系统的关键元数据,并且在较高级别上会变得崩溃甚至无法启动。 同时,ZFS仍然认为一切都很好。

对于你的高级操作系统来说,要尽可能安全,所有以下内容应该是真实的:

  • 例如,您的zfs需要使用zil,不要执行sync = disable
  • 您的zfs需要写入磁盘,或者是由电池/ NVRAM支持的磁盘,或者服从caching刷新命令; 不要将zfs_nocacheflush更改为1
  • 你的块协议提供者,可能是COMSTAR(它是SmartOS上的COMSTAR),不需要使用“写入caching”设置 – 即使你认为你的客户端发送同步,也是如此 – 如果你想要一切都同步,为什么你会离开这个启用和风险的东西不被视为这样的。 同样,如果使用文件级别的协议(你应该,恕我直言,块尽可能)确保它被设置为同步,这是默认的NFS(请确保您的客户端上的NFS挂载选项不会说'asynchronous' )。
  • 您可能需要在提供VM磁盘的zfs中的数据集/ zvols上设置sync = always
  • 您的虚拟机pipe理程序应configuration为发送同步,或者至less不要忽略和删除虚拟机的同步请求(不是SmartOS上的问题AFAIK;但可以在VMware上)
  • 您的虚拟机操作系统'需要设置为不做任何写入caching – 他们至less需要立即logging,如果不是最好在每次写入时同步,而不是caching写入。 如何在每个单独的文件系统和操作系统上做这个选项对于这篇文章来说太多了,但是要查找关于让你的操作系统“安全免受电源故障”的信息,关键词:写屏障,写caching,sync / fsync,journal

如果你的客户端操作系统文件系统没有阻止写入操作,那么没有中间人吃掉你的同步数据请求,而且ZFS作为后台正确设置来同步,并且正好坐在正确的存储本身上,那么你应该在每一个期望任何types的电力损失事件都将对虚拟机文件系统产生最小的影响。 在最坏的情况下,他们需要一个快速启动chkdsk / fsck,即使这样,并且不应该被严重损坏或丢失。 上面列表中的越多越不真实,重大腐败的概率就越高。

与往常一样,我也必须提及,保持备份。 即使你完成了上述所有工作,并build立了一个完全的功率损失安全的环境,但这些都不会保护你免受虚拟机上的病毒,黑客,36小时的清醒失误,一个心怀不满的员工,严重硬件问题或(不)自然灾害。

RAID只对物理磁盘有用,以防止磁盘故障导致数据丢失。
RAIDZ2提供了类似于RAID6的function,除了在文件级而不是在磁盘级上运行。 因此,RAIDZ2提供的任何保护都会自动扩展到guest虚拟机,因为它们文件。