ZFS存储池类型.docx
《ZFS存储池类型.docx》由会员分享,可在线阅读,更多相关《ZFS存储池类型.docx(11页珍藏版)》请在冰豆网上搜索。
![ZFS存储池类型.docx](https://file1.bdocx.com/fileroot1/2022-12/16/185430eb-77f4-49c8-8fe0-90b8a644dd7b/185430eb-77f4-49c8-8fe0-90b8a644dd7b1.gif)
ZFS存储池类型
ZFS存储池类型:
Stripe、Mirror、RAIDZ
使用ZFS卷管理器创建ZFS存储池时,可以指定存储池的结构(类型),更具体的说就是可以指定存储池所采用的软磁盘阵列的类型。
不同类型的磁盘阵列,面向不同的使用场景,性能和可靠性亦是各不相同。
下面列出了FreeNAS系统中可以设置的所有ZFS存储池类型,以及设置每一种磁盘阵列所要求的最少硬盘数。
∙Stripe:
与RAID0类似,传说中的带条,需要至少一块硬盘。
∙Mirror:
与RAID1类似,磁盘镜像,需要至少两块硬盘。
∙RAIDZ1:
与RAID5类似,一重奇偶校验,需要至少三块硬盘。
∙RAIDZ2:
与RAID6类似,双重奇偶校验,需要至少四块硬盘。
∙RAIDZ3:
三重奇偶校验,独门秘籍,需要至少五块硬盘。
∙logdevice(ZIL):
高速写缓存设备,需要至少一个专用的存储设备,推荐使用SSD固态硬盘。
∙cachedevice(L2ARC):
高速读缓存设备,需要至少一个专用的存储设备,推荐使用SSD固态硬盘。
除去logdevice(ZIL)和cachedevice(L2ARC)这两种专用高速缓存设备不谈,在这里列举一下其余类型的性能和可靠性对比。
性能对比
Stripe>Mirror
Stripe>RAIDZ1>RAIDZ2>RAIDZ3
数据可靠性
Mirror>Stripe
RAIDZ3>RAIDZ2>RAIDZ1>Stripe
SolarisZFS快照和克隆使用指南
zfs快照概述:
快照是文件系统或卷的只读副本。
快照几乎可以即时创建,而且最初不占用池中的其他磁盘空间。
但是,当活动数据集中的数据发生更改时,快照通过继续引用旧数据占用磁盘空间,从而阻止释放该空间。
ZFS快照具有以下特征:
■可在系统重新引导后存留下来。
■理论最大快照数是264。
■不使用单独的后备存储。
快照直接占用存储池(从中创建这些快照的文件系统所在的存储池)中的磁盘空间。
■递归快照可作为一个原子操作快速创建。
要么一起创建快照(一次创建所有快照),要么不创建任何快照。
原子快照操作的优点是始终在一个一致的时间捕获快照数据,即使跨后代文件系统也是如此。
无法直接访问卷的快照,但是可以对它们执行克隆、备份、回滚等操作。
创建快照:
这里系统默认使用的文件系统是ZFS而不是UFS:
创建一个文件系统:
向/u01下面写入一些数据:
以上将/platform下的所有文件复制到/u01下。
创建u01的快照:
快照创建成功。
使用快照进行恢复:
下面将/u01下的所有内容删除,然后使用快照恢复:
恢复成功。
创建ZFS克隆:
要创建克隆,请使用zfsclone命令,指定从中创建克隆的快照以及新文件系统或卷的名称。
新文件系统或卷可以位于ZFS分层结构中的任意位置。
新数据集的类型(例如,文件系统或卷)与从中创建克隆的快照的类型相同。
不能在原始文件系统快照所在池以外的池中创建该文件系统的克隆。
创建u01的克隆:
迁移ZFS快照至其他主机:
这里要用到zfssend和zfsreceive命令。
zfssend命令创建写入标准输出的快照流表示。
缺省情况下,生成完整的流。
可以将输出重定向到文件或其他系统。
zfsreceive命令创建其内容在标准输入提供的流中指定的快照。
如果接收了完整的流,那么同时会创建一个新文件系统。
可通过这些命令来发送ZFS快照数据并接收ZFS快照数据和文件系统。
接收文件系统快照时,请牢记以下要点:
■将接收快照和文件系统。
■将取消挂载文件系统和所有后代文件系统。
■文件系统在接收期间不可访问。
■要接收的原始文件系统在传输期间必须不存在。
■如果文件系统名称存在冲突,可以使用zfsrename重命名文件系统。
发送和接受都成功。
删除快照以及zfs文件系统:
删除u01的快照时,系统提示rpool/u02是其快照的克隆版,所以加-R参数连同u02一起删除。
ZFS高速缓存:
L2ARC和ZIL
ZFS采用高速缓存来加速读写操作。
理想状态下,所有的缓存数据都应该存入内存中,但这样做太奢侈了。
因此,数据会自动的缓存在不同硬件上,以平衡性能和成本。
需要频繁访问的数据缓存在内存中,访问频繁程度略低的数据可以缓存在稍微慢一些的设备上,比如SSD固态硬盘。
不需要经常访问的数据则不做缓存,仍让它呆在硬盘中。
如果突发大量读旧数据,ZFS将自动将这些数据移动到SSD固态硬盘或内存中。
内存是采用ARC算法的第一级磁盘缓存,类似于CPU的一级缓存。
因为内存总是被用做缓存,所以这个第一级缓存是始终存在的。
常有说法认为必须为ZFS安装大量的内存,但这种说法并不准确,是对ARC高速缓存的一种误解。
ARC算法智能且高效,提供充足的内存用于ARC高速缓存,只是意味着几乎不需要直接访问硬盘。
举个最糟糕的例子,比如系统只安装了1GB内存,几乎就不会有ARC级别的缓存了,在这种情况下,ZFS则需要直接访问硬盘读取数据。
这也只是代表系统的读性能降低到与硬盘同速,但不会影响ZFS的正常使用。
SSD固态硬盘是第二级磁盘缓存,是可选的缓存,可以随时为运行中系统存储池添加这种类型的高速缓存,也可以随时移除。
第二级磁盘缓存共有两种类型,一种用于读缓存,另一种用于写缓存。
为读操作而生的高速缓存L2ARC
用SSD固态硬盘实现的读缓存被称为L2ARC,它类似于CPU的二级缓存。
如果整个Dedup表可以被缓存在L2ARC中,则 L2ARC也能大大加快重复数据删除。
数据完全充满L2ARC设备需要几个小时时间。
使用过程中,如果L2ARC设备被移除或损坏,读操作将会跳过L2ARC设备直接访问硬盘,虽然这时候读取的性能会下降,但不会造成数据损失。
为写操作而生的高速缓存ZIL
用SSD固态硬盘实现的读缓存被称为LogDevice(日志设备),主要用于ZIL(ZFSintentlog)缓存。
ZIL设备主要作用是切换同步写为异步写,一般用于NFS或数据库。
所有的数据像日志记录一样被写入到ZIL设备中,只有在读取后才会释放。
因此,ZIL中的数据通常不会被读取。
有时,ZIL会刷新ZFS存储池中的数据,这种操作被称为TransactionGroupCommit(事务组提交)。
如果没有为ZFS存储池提供独立的日志设备,系统将会使用ZFS存储池中的一部分空间用作ZIL写缓存,因此,每个ZFS存储池中都总是存在一个ZIL缓存。
需要特别注意的是,应该选择低延迟的硬件用作日志设备。
为了提升性能,应该选用由battery-backed内存组成的硬盘。
因为日志设备需要经常进行写操作,固态硬盘会随着写入操作的增多变得越来越慢,内存型磁盘就不会出现这种情况。
如果日志设备被移除或损坏,最近写入NAS服务器的数据都有可能丢失,因此,应该先对SSD固态硬盘做RAID镜像后再用于日志设备。
L2ARC和ZIL只是ZFS文件系统所支持功能中的一小部分,想要更好的挖掘FreeNAS系统的潜力,首先要了解ZFS文件系统,欢迎阅读我们编写的另外一篇文章《玩转FreeNAS你需要了解ZFS文件系统》。