杂记,关于NAS的一些个人看法

2021年1月26日 0 作者 筱枫

自从前年(2019年10月)开始使用NAS起,到现在为止已经是一年有余,当中踩了不少的坑,浪费了不少的时间,也进一步明确了自己的需求,想来现在也有资格可以来写一篇文章谈谈个人的看法了

不过由于作者使用的NAS环境、系统、软硬件等方面都有限,所以只是一家之言,仅供参考

本文假定你已经了解了什么是NAS,以及NAS的用途

以下是本人使用环境

E3 CPU + 16G ddr3 + Realtek® 8111F-VB-CG千兆网卡

三块4T的西数紫盘做raid5,两块退役的2T硬盘组raid1

日常使用仅作者一人(这是一个悲伤的故事)

NAS是必需品吗?

不是必需品,但可以提升生活的质感,存储想要的任何数据,这就是我装NAS的初衷,至于下载功能则是其附属的功能

当然,付出的代价是每个月接近30块钱的电费,以及日常维护所花费的时间,还有预先购买硬件所需的资金,如果觉得这有些难以接受,建议根据自身财力适当使用公有云(虽然速度没有内网那么快)

选择成品NAS,还是自建NAS呢?

看钱……,如果资金充裕,那么成品NAS是最好的,特别是当你没有那么多时间折腾NAS的时候,成品NAS突出一个省心,有的时候,你的时间相当值钱,不过由于我没有使用过成品NAS,所以这里不做推荐

如果是自建NAS的话,我推荐使用FreeNAS,虽然系统比较重,但功能非常全面,跟一些成品NAS基本上没有多少差距(缺的就是技术支持,以及硬件兼容性),至于其他的xigamnas、openmediavault还有一些小系统则是不推荐,因为可能会遇到相当多的问题

当然,成品NAS的硬件是真的很差,但主要可以节省大量的心力,自建NAS硬件兼容性风险其实不低(主要是网卡),但硬件配置相当实在

想用FreeNAS,有什么建议吗?

FreeNAS的网卡驱动比较捉急(因为是基于FreeBSD),而且其他一些usb设备的驱动也可能比较老,建议优先选择intel网卡的设备,内存最好使用8G,但是实测最低3G也可以流畅运行,只是这个时候就没有太多的内存可以用作数据缓存

FreeNAS的虚拟机其实还可以,但是只有在UEFI启动时才有VNC,如果用legacy模式启动则只能用串口连接,我之前试图将proxmox中的win10迁移过来的时候,就遇上了没有VNC这种情况,之后只能放弃迁移

关于驱动,可以考虑自己编译的方式,特别是瑞昱的网卡,FreeNAS经常会出现写入千兆,读取只有700M左右的水平

大概的编译方式:用一台和FreeNAS相同版本的FreeBSD进行编译,随后将编译好后的ko文件放入/boot/kernel中,即可加载使用,不过这一步比较麻烦,至少需要一定的知识

FreeNAS不建议安装在proxmox之上,因为其没有自带virtio驱动,网卡,磁盘等性能都会受到一定的影响

编译驱动的方式可以参考这篇文章(其实官方下载的驱动包中readme是最好的说明)

FreeNAS Realtek RTL8168H 驱动程序编译与安装

我这里可以提供一份 Realtek® 8111F 在 FreeBSD 12.1 下编译后的驱动

关于ZFS,有什么使用建议吗?

内存自然是越大越好,然后有需求可以上ZIL,可以大幅降低机械硬盘写入延迟

至于l2arc,则建议可以上,虽然会占用一部分内存,但是会提升随机读取的速度,不过需要注意的是l2arc会写入大量的数据,对于小容量ssd可能不是那么友好

建议参考这篇文章进行调优:Workload Tuning

日常情况下可以使用zfs-stats来监视zfs的使用情况,然后按需调整,这是我的zfs统计情况

hits.value  99.49
misses.value  .50
actual_hits.value  99.29
data_demand_efficiency.value  92.14
data_prefetch_efficiency.value  21.23

可以看到,在16G的内存下,日常的命中率高达99.50,基本上所有的数据都可以从内存中获取

l2_hits.value  25.61
l2_misses.value  74.38

这是我的l2arc命中率,虽然不算太高,但也可以一定程度上弥补arc未命中时的情况

size.value  36GB
hdr_size.value  24.45MB

这是l2arc的一些信息,在l2arc使用了36GB ssd空间的情况下,缓存在内存中的hdr_size仅为24M左右,当然这跟我的recordSize设置为1M有一些关系,但是可以一定程度上说明,l2arc并没有太吃内存,特别是在openzfs2.0的情况下,l2arc中的数据可以在重启后保存,不再需要每次重启后都预热数据,大大提升了实用价值

如果arc的命中率较低,则一般是内存不足造成的,可以添加内存,如果没有空余的内存,也可以尝试通过添加l2arc来尝试缓解,不过一般收效甚微,对于zfs而言,充足的内存可以获得极佳的体验,但是内存不足也没有关系,只不过是会和其他的文件系统一样,每次都从硬盘上读取数据而已

现在作者采用的哪种方案?

最初使用的是xigmanas,但是遇上了诸多问题(详见之前的博客),然后更换为proxmox作为裸机操作系统,xigmanas作为guest在其上运行,虽然驱动和其他的问题都避免了,但带来了新的问题——内存性能的下降,以及xigmanas的卡顿

在重负载的情况下,zfs的卡顿极为严重,而且因为内存分配的原因(我只分配了9G给xigamans),导致命中率不高,即便是使用了l2arc,命中率也还是上不去

随后迁移到freenas,freenas直接作为宿主机,不再使用硬盘直通的方案运行,由于都是基于FreeBSD,所以zfs硬盘可以直接导入,但是又遇上了另外一个麻烦事——我在proxmox上面的各种虚拟机没有办法迁移过来,正如上面所述,freenas的bhyve只有在uefi模式下才能使用vnc连接,导致一部分虚拟机根本无法启动

最后想了想,还是决定不使用nas系统,而是自己手动配置,目前采用的方式是proxmox6.3加上手动编译openzfs2.0进行数据托管,然后手动配置smb、nfs、iscsi共享等等,实际上nas只需要提供这三个功能就可以解决大部分问题了,其他的方式都可以通过虚拟机来解决,当然这种方式不建议使用,因为手动配置会相当麻烦

关于proxmox编译openzfs可以参考这篇文章:“ZFS 2.0.0 final” install on Proxmox 6.x

因为promox带有各种开箱即用的功能,有完善的自建邮件系统、smart测试、定时scrub zpool等,只需要手动配置一下zfs-snap-shot就可以完成xigmanas的大部分功能了

我目前采用的是这个来做自动快照管理:zfs-auto-snapshot

配置完成后的速度相当不错,虚拟机启动速度大大提升,各种操作响应也较之前提升了不少,目前看来,这种方案是我可以长期使用的方式了

结尾

关于NAS系统,每个人的情况都各有不同,每个人的需求也不同,所以建议还是根据自身情况去选择,zfs很好用,但配置起来略微麻烦,成品nas非常省心,就是性能不是很强,请各位根据自身情况进行选择,这篇文章虽然说个人看法,但是更多的是自己的一些使用心得,希望能够帮上阅读的你。