unRAID ZFS文件系统

图片[1]-unRAID ZFS文件系统-RSG-人生观

前言:

unRAID的原有阵列方式,在使用中添加校验盘之后,会出现很高的CPU消耗,我下决心更换,也是因为家里的宽带升级到了1Gbps下行,导致un的硬盘阵列扛不住100M/S的下载速度,更换ZFS之后,CPU消耗大幅下降,传输能力大幅度提升,还可以使用快照,压缩,去重等很实用的功能。

教程:

在使用zfs之前,我们需要注意!zfs使用的机器,最好是有ECC内存,ZFS里的ARC缓存,是很吃内存的,大约是1TB存储1G缓存,当然我们家庭用户可能没有那么多的内存,来充当缓存,但是这里我还是建议大家最好给ARC分配8G的缓存空间,当然官方也说过,最低可以给1G。
还有一种L2ARC,这个我推荐arc容量较低的小伙伴,搭配一个好一点的SSD,来充当L2ARC使用。
在unRAID上使用zfs,有两种办法,第一种是使用zfs的插件,第二种是把zfs直接封包在unRAID里。第一种适合,国际网络较好的,因为zfs的插件,会在unRAID开机的时候联网加载内容,网络不好的小伙伴,可能会导致系统重启,卡在网络请求的位置,第二种直接封包在unRAID里的则不会出现在这种情况,但是un升级的时候也需要重新封包,两种都各有优缺,大家自行选择,带有ZFS的unRAID系统封包我这里会提供一个正版的!盗版的小伙伴,我暂时还没有去编译!
ZFS的存储池类型有:

Stripe:与RAID0 类似,使用的是条带,最少需要一块盘
Mirror:与RAID1 类似,磁盘镜像,最少需要两块盘,
RAIDZ1:与RAID5类似,有一重奇偶校验,最少需要三块硬盘,实际容量N-1
RAIDZ2:与RAID6类似,有二重奇偶校验,最少需要四块硬盘,实际容量N-2
RAIDZ3:与RAID5类似,有三重奇偶校验,最少需要五块硬盘,实际容量N-3
L2ARC:二级 高速读取缓存
ZIL:LOG的写入缓存,这里要注意,很多地方都说ZIL是写入缓存,其实并不是。

性能对比
Stripe>Mirror
Stripe > RaidZ1 > RaidZ2 > RaidZ3
数据可靠性:
Mirror > Stripe
RAIDZ3  > RAIDZ2 > RAIDZ1 > Stripe

注意:在配置下面的内容的时候,你会损失所有硬盘的内容,重要数据,提前备份!!!

在使用zfs的时候,我们需要空出一个存储设备给配置在unraid的Array,否则unraid无法启动,放在Array的盘,我推荐使用SSD,用于我们存放docker.img以及libvirt.img。
需要安装的插件!

图片[2]-unRAID ZFS文件系统-RSG-人生观 unRAID ZFS文件系统的插件
如果是使用封包ZFS的方式请勿安装
会导致系统无法正常运行
图片[3]-unRAID ZFS文件系统-RSG-人生观 在DASHBOARD的页面增加一个
zfs运行的健康度和SCRUB的状态
图片[4]-unRAID ZFS文件系统-RSG-人生观 在Main页面增加ZFS相关状态区域
可以配置数据集,以及导入导出存存储池

在开始之前,我们先要进行对ARC最大使用内存的配置,我们需要在GO文件下增加以下配置,可以在unraid商店中找CA Config Editor插件,在web界面进行修改go文件!
图片[5]-unRAID ZFS文件系统-RSG-人生观
这里注意,给的单位是byte,所以我们需要转换我这里给的是8G内存,我们需要把8G转换成byte的单位才可以使用,我这里提供一个在线的地址转换  在线电脑字节转换器 – itzmx.com
echo 8589934592 >> /sys/module/zfs/parameters/zfs_arc_max把你转换出来的数值,替换到红色的位置即可!
完成上面的操作之后,我们需要重启一下系统才可以继续!
打开unRAID的SSH命令窗口,先确定那些硬盘需要配置ZFS,找到硬盘的ID 方便我们后续配置!
使用ls /dev/disk/by-id查找我们需要的硬盘。
图片[6]-unRAID ZFS文件系统-RSG-人生观
part1这类的是硬盘的分区,zfs虽然可以用分区,但是我们需要用盘的最大容量所以这里我们选择硬盘的ID,不要选择分区的!
zpool create -o ashift=12 -O recordsize=1M -O compression=lz4 -O atime=off -m /rsg_zfs rsg_zfs mirror ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M1VVF9KX ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M2XSF47F
当然我们在配置的时候也可以增加L2ARC和ZIL,此文章就不写了,缓存我会单独开文章去写,也可以通过后期再去添加。
ashift=12 是扇区,9是512字节 12是4K 还有很多,这里我就写了12
recordsize=1M 指定文件系统中文件块大小的最大值,如果创建非常大的文件增加recordsize的数值,可以提高性能,选择的值必须是2的幂次,最小512字节。(0.6.5版本后最大1M,此版本之前最大128K)
compression=lz4 压缩方式,zfs的压缩有很多,LZ4是默认压缩,atom的弱CPU建议不开!
/rsg_zfs 挂在的路径这里建议挂根目录,不要去挂mnt的路径内,在unRAID容易出现错误,路径的名字随意些,能记得住就好
rsg_zfs 存储池的名字,你可以随意修改自己喜欢的名字
mirror 存储池的类型,这里我就两块盘考虑安全,所以选择了mirror,当然你们也可以选择其他类型的。

atime=off 可以理解为均衡写入,机械硬盘可以配置为OFF如果是SSD 建议ON,对性能有一定影响

之后我们使用zpool status来查看池的状态!
图片[7]-unRAID ZFS文件系统-RSG-人生观
注意:演示图中,是配置了L2ARC以及ZIL的!实际大家配置到这里是不会出现logs和cache的。
到此,zfs的池就创建完成了
我们就会在根目录看到一个/rsg_zfs的路径,之后我们选哟给路径配置权限,如果是迁移备份数据的小伙伴,也要在迁移之前,把路径权限配置了。否则appdata路径的权限,错乱会让人很崩溃的。
chmod -R u-x,go-rwx,go+u,ugo+X '/rsg_zfs'
chown -R nobody:users '/rsg_zfs'
路径权限搞之后,我们就可以创建,数据集了,当然我们也可以在路径内直接用mkdir创建文件夹,但是涉及到后续的快照应用,如果用mkdir创建文件夹就不能快照了。
zfs create rsg_zfs/appdata 注意!这里rsg_zfs/appdata rsg_zfs是池的名字,/appdata是文件夹的名字!也可以rsg_zfs/appdata/mariadb,就是在appdata路径下面在创建mariadb的文件夹!
反复使用上面的命令,配置appdata,isos,domains等文件夹!
配置完成后,我们针对系统的docker,以及vm虚拟机进行配置的修改!
图片[8]-unRAID ZFS文件系统-RSG-人生观
图片[9]-unRAID ZFS文件系统-RSG-人生观
注意:上面两个图,关于docker,img以及虚拟机的libvirt,img两个虚拟磁盘的存放位置,不可以是zfs路径,目前这个存在BUG,如果是zfs路径,会导致loop掉挂在的情况,导致系统崩溃只能物理重启!如果docker实在是想用zfs,可以把docker的虚拟磁盘改成文件夹存放之后可以放在zfs的文件系统内!

scrub:

建议每周运行一次,保持阵列稳定,当然也可以适当增加,unRAID商店中找到User scripts插件增加一个cron的计划任务!

图片[10]-unRAID ZFS文件系统-RSG-人生观

图片[11]-unRAID ZFS文件系统-RSG-人生观图片[12]-unRAID ZFS文件系统-RSG-人生观zpool scrub rsg_zfs 红色的位置替换成你的池的名字

图片[13]-unRAID ZFS文件系统-RSG-人生观

关于CRON的书写方式,网上很多,这里我就不过多赘述了

结尾:

到此unraid上配置zfs的文章就结束了,后期还有其他的使用,比如快照,cache ,zil等,后期我会慢慢的都出给大家的!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 共9条

请登录后发表评论

    请登录后查看评论内容