[NAS踩坑日记] UNRAID配置iSCSI实验
vhschss
编辑于 2022年02月21日 21:29

“自从上次发文后已经过去一段时间,我的NAS改造已经基本完成,在一番尝试后我选择使用UNRAID系统,这个系统有很多戳我的点,而且虚拟化很方便正好能发挥我机器的性能,只是UNRAID不像其他NAS系统,其默认只开启了SMB共享,NFS需要在设置中打开,而iSCSI是原生不支持的,不过其虽然原生功能不如一些其他的NAS系统丰富,却有一个十分丰富的应用仓库,目前我所需要的功能都得以在此补充,那接下来就让我们开始折腾吧”

本次使用环境

系统:Unraid OS Plus 版本: 6.9.2

网卡:intel X520-DA1(NAS与主机使用铜缆对接)

硬盘:铠侠TC10 480G *4

其他硬件仍然同我发的上一篇文章​,不再赘述。

正文

前文提到,UNRAID有一个功能强大的应用仓库——COMMUNITY APPLICATIONS,简称CA,但是其默认也是并不开启的,当然使用过UNRAID系统的伙伴应该并不陌生,我们第一步是要先安装好CA,由于网络上已有大量此类教程,我也不再重复。当然这个地方由于网络原因,成为劝退很多人使用UNRAID的原因,我通过设置dns为OpenDNS并且在hosts文件中加入github520的优化内容,基本上可以满足使用。

安装iSCSI支持

在安装好CA之后,在应用中搜索iSCSI,会得到唯一一个结果“unraid.iSCSIGUI”,点击安装,在漫长的等待之后就可以在插件和设置中找到相关选项。

UNRAID下iSCSI支持应用

这个应用会帮我们安装一系列软件和支持,这也是UNRAID这个系统的特性,用惯了各个linux发行版的包管理器还是略微有点不习惯。当然,这个插件名字中带有GUI三字,其实是可以在UNRAID的WEBGUI上面进行iSCSI设置的,不过由于它目前还是BETA版本,我尝试了一下发现并不好用,所以接下来我们只利用它为我们安装的应用,而不在其GUI中进行设置。

设置共享文件夹

现在我们已经安装好iSCSI所需要的应用,但在设置之前先准备等下共享用的磁盘。由于我没有额外的硬盘可以测试,所以这次实验并没有直接挂载全盘进行共享,而是直接利用UNRAID的cache盘上面的空间,为了方便管理,我新建了一个共享专门用于iSCSI共享,对其设置为仅使用缓存池,根据系统帮助没有开启btrfs下的COW。

共享设置

接着进入UNRAID的命令行,在刚才新建的共享文件夹中,使用dd命令建立img镜像,我创建了一个120g大小的镜像用于共享,使用命令如下:

代码块
JavaScript
自动换行
复制代码
dd if=/dev/zero of=/mnt/cache/iSCSI/disk0.img bs=4k count=0 seek=31457280
复制成功

使用targetcli配置iSCSI共享

上面安装好iSCSI应用后,在UNRAID命令行下就可以使用targetcli命令进行配置了,相关文章在网上也有不少,实际使用下来,发现其配置方法相当简单,可以说出乎了我的意料,接下来,我们在UNRAID命令行下输入targetcli,回车,再输入ls,其效果跟linux下显示目录的命令一样,就可以看到当前的配置了。

targetcli配置

上图是我已经配置好之后的情况,所以我们的目的就是在fileio中添加硬盘镜像,然后在iscsi中添加target和lun,那么第一步,使用cd命令进入到fileio中建立磁盘。

代码块
JavaScript
自动换行
复制代码
cd /backstores/fileio/
create name=disk0 file_or_dev=/mnt/cache/iSCSI/disk0.img
复制成功

默认会打开回写,我测试过关闭回写会大大降低性能,建议打开。

接着进入iscsi,新建target和lun。

代码块
JavaScript
自动换行
复制代码
cd /iscsi/
create #使用随机iqn创建一个target,也可以自己设定iqn
cd iqn.xxxxxx/tpg1/luns
create /backstores/fileio/disk0
复制成功

这时使用ls已经可以看到刚创建的lun0,但此时使用windows的iSCSI发起程序连接会出现授权失败的错误,这里需要设置一下acl。

代码块
JavaScript
自动换行
复制代码
cd /iscsi/iqn.xxxxx/tpg1
set set attribute generate_node_acls=1
cd acls/
create iqn.xxxxx
复制成功

其中第二个iqn号为客户机的iqn,如果是使用windows,可以在连接目标时选择高级选项查找自己的iqn名称,此命令作用是添加自定义acl允许该iqn访问,因为在设置了自动生成acl节点之后,虽然可以访问和挂载iscsi,但是在windows初始化硬盘时候会报“由于i/o设备错误 无法运行此项请求”的错误,经过测试可以通过添加自定义acl解决。

至此target端的配置已经完成,如果有需要可以更改监听的ip和端口,也可以设置CHAP认证,我这里就没有进行配置了,最后输入exit回车,设置会默认保存/etc/target/saveconfig.json中,保存之后设置会即刻生效。

连接测试

接下来就可以使用主机进行iSCSI发起了,我使用win10进行测试,但一开始的时候性能十分糟糕,我的cache盘是用4个480g的tc10组成的raid10,但是测速读写只有200m出头,经历了重新配置iscsi,重新建立img文件,更改了btrfs的raid等级,还有万兆网卡的调优,发现问题都不在这里(崩溃!),最后解决方法也很简单,只要取消快速格式化再次重新格式化硬盘就可以了,下面是测试结果:

AS SSD 1G测试

AS SSD 10G测试

性能嘛,也许是因为unraid默认为储存池使用btrfs,也可能是特差10的性能也就这样了,也可能是iscsi没有进行优化,总之不算很满意但是也能凑合用用,目前我把steam游戏库放在上面,也没有什么明显的问题出现过。

总结一下

UNRAID其实久有耳闻,但是之前很多文章评测其性能低下而且问题不少,就一直没有尝试,也许是我的配置能够满足需求而且系统经历了更新,这些缺点我没有感觉到,其实像freenas和omv,我在早年使用的时候也遇到不少bug,但到了现在也已经修复了不少。目前来说,UNRAID最大的不便就是很多要用到的功能都要自己安装,而且很多时候百度查不到还得看官方论坛,对我来说还是有点挑战,接下来我尽量在UNRAID上配置更多以往在其他系统用过比较实用的功能,之后遇到有意思的情况还会继续进行分享大家。