介绍
我是一个很忠实的NAS用户,并且使用了FreeNas很多年,一直很稳定好用,也很想推荐给大家使用,就打算写这篇文章了,也没别的什么目的。
为什么选择FreeNas
- 硬盘池的可拓展性
- 数据的安全性
- ZFS格式
- 独特的缓存机制
什么样的用户适合FreeNas?
首先刚开始玩的小白并不适合用FreeNas,上手比较难,但当然一开始就选择FreeNas,花费多一点的学习成本,肯定也是一个不错的选择。FreeNas有很多缺点,比如上手比较难(相比群晖什么的),入门条件也比较高,但你一但会用了,是一件很棒的事情。我罗列了一下条件:
你并不打算用FreeNas来做一个All in One(AIO)的服务器。FreeNas更适合单独使用作为存储使用,它的虚拟化真的不怎么样,我有另外一台PVE来专门做别的服务。
你打算使用10GB万兆网络来使用FreeNas。其实FreeNas在万兆网络环境情况下才能体现优势,不然好像跟群晖之类的也没啥区别,设置还更难。
你的7200转的硬盘数量必须大于或者等于10个。因为考虑万兆环境,我们并不喜欢通过加缓存提高读命中率的方式来达到万兆,直接10个盘来让读取速度达到恒定万兆读取。(当然你可以加读缓存,但缓存永远是有限的,你还要考虑命中率等问题,没意思)
你的内存起码128GB,别慌,这其实不是很贵,比如我也会推荐DDR3的内存给X79用。
我该购买什么样的机器来运行FreeNas
在FreeNas的官网有很多标准配置,我自己也是按照官网以及前辈的推荐来购买的,这样可以避免走很多弯路。
清单一是我自己的配置,价格也还好比较适中。
清单一 (除机械硬盘外总计8991元)
主板: 超微X10SRA-F 二手主板自带IPMI,这是我买服务器主板的首要条件,不然大机箱管理起来特别麻烦。 闲鱼买来950元
内存:海力士HMA82GR7CJR8N-VK 16G X8 一共128G内存,其实我觉得还是有点不够,淘宝二手价格还行。 380元X8=3040元
CPU:E5-2680V3 我买的线程数有点多了,非常够用,可以考虑买便宜一点的。665元
机箱:超微846 24盘位机箱。这款机箱淘宝有很多很多,并且自带背板,注意要问清楚自带的背板是SAS几的,最好买背板是SAS2或者SAS3的!如果机箱自带的是SAS1的话,你必须买回来把背板拆了,再买一个SAS2+的背板。1100元
散热器:猫头鹰(NOCTUA)NH-D15S 买这个完全是为了静音。这个高度是刚好给这个4U机箱用的,你可以按照此款高度购买别的静音款风扇。 600元
电源:PWS-920P-SQ 机箱自带的电源非常吵,不喜欢的话买这个,SQ结尾的是静音系列,这个机箱其实可以插两个电源,一个做冗余接在UPS,我买的是80块一个的成色非常差的(成色新的估计也只是抛光了一下),80元。
机箱背板:BPN-SAS2-846EL1 如果能买到超微846机箱自带SAS2+的最好不过了,如果不行,请购买这款。当然你要SAS3的就购买BPN-SAS3-846EL1(这款海外EBAY上很多,淘宝上就见到过一两次) 960元
机箱配件:机箱风扇,机箱开机键跳针 共200元
背板后的风扇:ARCTIC F8 8cm X3 更换教程请看2分28秒
机箱最后的出风口风扇:ARCTIC F8 8cm X2
跳线:超微 CBL084L 机箱上连接开关电源键,指示灯的接口非常特殊,846机箱有很多版本,有的给X9用的,有的是X10用的。你可以自己制作公母杜邦线(PDD3块钱一大包),也可以购买我推荐的成品(淘宝有一家,EBAY无数家卖)。
SAS卡:LSI SAS 9217-8i 这款卡是给SAS2用的,有两个模式,自己刷成it模式,可以找淘宝店主直接帮你刷好。如果你买的是SAS3的背板,你需要购买LSI SAS 9300-8i,同样需要刷好it模式(以防万一,我会写一下刷IT模式的教程)。 闲鱼100元
SAS线:MINI-SAS线SFF-8087 X2,SAS2的线,80CM的。如果是买的SAS3背板请购买相应的线,两根46元
万兆网卡:Intel 82599 万兆光口网卡 这张卡其实是我用黑苹果多余出来的。你可以买光口寨卡,82599或者mellanox的,都支持。但如果你购买万兆电口的话,尽可能购买原厂卡!(之前买的万兆寨卡一热就掉速) 闲鱼包含光模块250元(寨光卡)
机械硬盘:自己看着办(西数的固件降速策略似乎不太兼容FREEBSD)。
固态硬盘:intel s3510 1T 购买固态硬盘不是为了让他成为缓存什么的,因为ZFS的特殊性,尽可能设置PT软件(e.g. transmission)先把文件下载到固态,再自动转移到机械硬盘的池里,这主要是因为ZFS的特殊性而考虑。为什么买S3510呢?便宜吧,最主要是MLC,如果你用TLC做这个事,很快就会坏了的。1000元
清单二 (除机械硬盘外总计6780元)
主板: 超微X9SRL-F 因为X9这一代的CPU单路支持IPMI的特别难找,这是我搜到的,可以试试搜搜别的单路更便宜的。800元
内存:M386B4G70DM0-YK04 32G X4 因为是DDR3的内存所以超级便宜,可以考虑多买一点,一共128G总计1480元
CPU:E5-2650v2。根据自己情况可以选别的,165元
机箱:同清单一,1100元
电源,同清单一, 80元
散热器:利民thermalright ITX-R REV.A 清单一的太贵了,从高度来说可以,但不知道挡不档内存,500元
机箱背板:同清单一 960元
机箱配件:同清单一 共200元
SAS卡:同清单一 闲鱼100元
万兆网卡:同清单一 闲鱼包含光模块250元
机械硬盘:同清单一
固态硬盘:同清单一,1000元
当然,以上两个清单你不考虑噪音可以便宜一些。
安装
安装包括硬件和系统,首先是把SAS卡LSI SAS 9217-8i刷成it模式,再讲FreeNas的安装。
LSI SAS 9217-8i 刷成it模式
在家用FreeNas环境我没有推荐用阵列模式,一来是这个是家用而已,二来ZFS已经足够健壮了,把卡刷成直通的it模式就行了。
下载如下软件
准备一个U盘
- 4G的U盘都够用了,不需要太大,但不要超过32G。
- 把U盘格式化成Fat32格式,注意不要带任何ESP分区。
把文件放入U盘
- 解压Installer_P20_for_UEFI.zip,复制Installer_P20_for_UEFI\sas2flash_efi_ebc_rel\sas2flash.efi 至U盘根目录。
- 解压UEFI_BSD_P20.zip,复制UEFI_BSD_P20\uefi_bsd_rel\Signed\x64sas2.rom 至U盘根目录。
- 解压9207_8i_Package_P20_IR_IT_FW_BIOS_for_MSDOS_Windows.zip。复制Firmware\HBA_9207_8i_IT\9207-8.bin 至U盘根目录。当然如果你是9300-8i的SAS卡,到官网下载一下it固件,一样的。
- 在同上一个目录复制sasbios_rel\mptsas2.rom 至U盘根目录。
- 制作UEFI Shell启动项
- 如果是超微主板,一般在开启选择启动画面是可以直接使用自带的UEFI Shell,那你就可以跳过此步骤。
- 在U盘根目录创建一个名叫efi文件夹,进入此文件夹,再创建一个叫boot的文件夹,即efi/boot/。同此也创建一组boot/efi/的文件夹。因为老一点的主板路径对UEFI的识别路径不同,以防万一,做两个。
- 下载 Shell_full.efi
- 准备两份shell_full.efi,分别重命名为ShellX64.efi和BootX64.efi。
- 把ShellX64.efi和BootX64.efi放入efi/boot/下,同样的,把这两个文件放到boot/efi/
一般情况下,shell文件放在efi/boot/BootX64.efi即可,只是有些主板对UEFI的读取有点奇怪,记得要关了BIOS中的secure boot这个选项
进入UEFI Shell
开机按启动选择键,以U盘作为启动,进入UEFI shell,应该是一个类似如下的界面:
如果你无法进入,提示错误,考虑一下升级主板bios以及确认主板是否支持UEFI启动,以及关闭主板的secure boot。
在界面上你会看到检测出来的硬盘,确认哪个是你的U盘,进入那个U盘则输入
fs0:
接着输入
dir
,看看目录下的文件是否是U盘里之前放的,不是的话退出去,再找别的路径进来。
- 刷入固件
- 进入U盘根目录后,输入sas2flash.efi -listall,确保你的卡被识别出来(图片我随便找的,跟你的卡数值可能不同)。
- 如果找不到这张卡,请确认这张卡是完好的,在bios设置界面中也能看到。
- 输入
sas2flash.efi -list
,记录下16位SAS Address (图片也是网上找的,可能不同,红色框内的所有东西都记下来!!!!!!!). - 输入
sas2flash.efi -o -e 7
来删除当前固件。 - 输入
sas2flash.efi -o -f xxxxx.bin -b x64sas2.rom -b mptsas2.rom
写入新的固件。xxxxx.bin应该是你之前放入的固件名字,比如9207-8.bin。 - 输入
sas2flash.efi -o -sasaddhi XXXXXXX
写入SAS地址,其中XXXXXXX为刚才记录的SAS地址的前7位,一般是500开头。 - 搞定,输入一下
sas2flash.efi -list
看看新的固件有没有刷进去。 - 重启输入
reset
就可以用了。
- 进入U盘根目录后,输入sas2flash.efi -listall,确保你的卡被识别出来(图片我随便找的,跟你的卡数值可能不同)。
FreeNas相关设置
怎么安装,怎么设置硬盘池,开共享目录那些就不说了,网上一大堆视频教程。如果是相关优化的话,因为每个人的机器需求不同,可以参考ZFS Tuning Guide。
相信新手碰到最头痛的肯定就是权限问题了,这里可以展开说一下。
FreeNas权限设置
其实这里有很多很多方法,我说一下我自己的吧,可能不是最好的办法,但是是我最习惯的办法。
一般新用户会去account里新建一个自己的用户,这个新的用户用来访问SMB,NFS等。比如我设置的用户叫做xjn,我打算用这个用户来使用所有的文件共享,我们就对所有的pool下面的datasheet的权限都给xjn,所有者和所有组都是(记得要apply permissions recursively)。提一嘴,如果是NFS共享,记得把Mapall User设置成xjn。
另一方面,我们可能会装一些jail来使用一些功能,比如安装transmission来下载,但是默认情况下,jail里transmission下载的所有文件都是归root用户所有,导致我们用自己的账户打不开这个文件。这里我们需要对transmission的权限给xjn这个用户,这样下载下来的文件都能打开了。
因为我不是特别喜欢freenas里面plugins一个插件一个jail的逻辑,我觉得你想要啥就全装在同一个jail里就够了。所以以下内容包括了设置权限,以及怎么手动装一个transmission(我打个比方而已)。
- 获得你的gid uid
在shell下输入:[email protected][~] id xjn uid=1000(xjn) gid=1000(xjn) groups=1000(xjn),0(wheel),545(builtin_users)
对,我给xjn这个用户多给了一个wheel的组,以防万一,你们可以参考一下。
得到我的这个xjn账户的uid和gid都是1000,记下来。
创建一个jail
iocage create -n "myjail" -r 12.2-RELEASE vnet="on" ip4_addr="vnet0|10.10.10.4/24" defaultrouter="10.10.10.3" boot="on"
我们创建一个叫做myjail的jail,使用的是
12.2-RELEASE
这个版本,把这个jail的ip地址设置成了10.10.10.4
,并且本地的路由器地址是10.10.10.3
。请根据自己情况改一下。在Jail中安装软件,我们假设装一个transmission。
iocage console myjail #进入刚才创建的myjail的shell里 env ASSUME_ALWAYS_YES=YES pkg bootstrap pkg update pkg upgrade -y #更新一下软件和源 pkg install -y nano wget transmission #安装一下这三个常用软件
- 修改安装好的transmission的权限,保持与主系统一致。
第一步里,记录下来我的常用用户为xjn (uid=1000),那么我们在这个jail里创建一个一模一样的用户:
pw useradd -n xjn -w none -u 1000 -G xjn -c "xjn"
#创建好之后,输入:
id xjn
#看一下jail里这个xjn的ID是否跟主系统中的一致
我们把transmission的权限交给jail里xjn这个用户:
cd /usr/local/etc
chown -R xjn:xjn transmission
sysrc transmission_enable=YES
sysrc transmission_user=xjn
sysrc transmission_group=xjn
- 在jail中创建一个与主系统池相连的目录,用来给transmission下载
仍然在刚才的jail的shell环境下,创建一个目录,比如是/mnt/pt
mkdir /mnt/pt
退出jail,回到主系统shell中,输入:
exit
把硬盘池的一个目录共享给jail用,比如主目录的地址为/mnt/home/pt,刚才我们在jail中设置的目录是/mnt/pt, 输入:
iocage fstab -a myjail "/mnt/home/pt" "/mnt/FTP" nullfs rw 0 0
回到myjail中:
iocage console myjail
让transmission生成配置文件:
service transmission start
service transmission stop
修改配置文件:
nano /usr/local/etc/transmission/home/settings.json
修改如下两项:
"rpc-whitelist-enabled": false,
"umask": 7,
修改完后⌃+X保存
在jail里绑定下载路径,输入:
sysrc transmission_download_dir="/mnt/pt"
service transmission start
exit
至此,完成。
强烈建议使用trnasmission的incomplete-dir那个选项,把下载的东西先放到一个MLC的硬盘中,全下载完后,再自动移到主机械硬盘池。
FreeNas Tuning
刚才有说到官网的freenas tuning设置,因为每个人的习惯不同似乎没有一个比较统一的说法,这是我的微调:
- vfs.zfs.dirty_data_max
这个值是脏数据,默认是4GB,但是我一般拷贝单个文件到NAS上,很多都是超过8G的,这样在写到4G后马上降速了,我就把这个值调整到了8589932492,按照你的需求和物理限制更改。
- vfs.zfs.arc_max
这个是真的“写缓存”,其实我用默认的调整还是不错的,没有啥固定标准我就不说了
一些小问题
- 是否需要自己加Slog以及L2arc?
你的网速是10gb,以及10个7200转的硬盘的话,不需要。SLOG是保证你数据绝对能写入,并不是帮你增加速度的,比较适用与金融场景,家用还是配好UPS吧。L2ARC的话是你内存不够用的情况下才用的,但是我们10个7200转的硬盘已经达到读取速度900+MB/S了,其实不需要读缓存了。设置多层存储或者说缓存的目的我觉得不是为了加速度(当然有这个效果),而是确保数据安全而用的。
- 硬盘性能
买来先测一下硬盘的stroke和速度,
diskinfo -ctv /dev/daX
#X为你的硬盘编号,在管理页面的storage/disks下按照序列号对照过去
这是我刚用手机测的一块ST EXOS X16 12T的硬盘,刚好达到230MB的速度,stroke也很棒。西数固件似乎在FREEBSD下有兼容问题。
- 内存是否必须ECC?
当然最好是ECC了,FreeNas先写入内存再写入硬盘,如果没有ECC的奇偶校验,可能,也许
会有写入后文件出错的问题。内存如果实在不够用的话,可以关了写内存 (datasheet里面的sync以及Atime的相关设置,具体方法自己搜),加SLOG来写(比如983 ZET之类的SLC,905P这样的4K写入怪兽)。