基于NAS磁盘空间作为U盘解决方案

1.前言

家里有一台很旧的玩客云,用于迅雷下载,但是玩客云只支持插移动硬盘,很不方便,刚好家里也有一台群晖的NAS,磁盘空间有3T,那可不可以分出一些空间让玩客云作为移动硬盘使用呢,接着就有了这套方案。

2.方案设计

首先需要将群晖里的磁盘空间分出一部份,用的是iSCSI,简单来说就是将一部份的磁盘空间虚拟成物理磁盘。这种跟smb有很大不同,这种虚拟出来的网络磁盘和本地磁盘基本一样的。

然后就是虚拟U盘,我这里用的是开发板Orange Pi 3 LTS,开发板需要有连接网络的功能,并且支持USB OTG,利用OTG可以虚拟出U盘。

整体流程就是通过开发板连上群晖的网络磁盘,然后再利用开发板的OTG功能将开发板虚拟成U盘。

3.实现

3.1在群晖NAS里创建ISCSI服务

群晖里打开ISCSI套件。


点击Target->新增


点击下一步


点击下一步


设置想分出来的磁盘空间,这里我只分了100GB的空间出来用作测试,接着点击下一步。


最后点击应用,就可以完成ISCSI的设置了。



3.2开发板Orange Pi 3 LTS设置

开发板我刷的是Ubuntu4.9的系统server版,版本号是Orangepi3-lts_2.1.6_ubuntu_focal_server_linux4.9.118.img,大家也可以通过官方网站下载这个版本写入到开发板上面。

官方网站http://www.orangepi.cn/downloadresourcescn/,官网有用户手册教大家如何刷ubuntu系统到开发板上。这里我就不多说了。

刷好系统后连接上网线用root帐号登陆到开发板上面。

3.2.1安装ISCSI的客户端

apt-get update

apt-get install open-iscsi

3.2.2启动ISCSI服务

iscsiadm -m discovery -t st -p SERVER-IP

上面的SERVER-IP是你的群晖IP地址。

输入上面命令之后就卡住不动了,强行结束后看了一下日志。如下所示:


网上查了一下原因,是因为open-iscsi需要用到scsi_transport_iscsi.ko, libiscsi.ko and iscsi_tcp.ko这三个Linux核心块,但是当前系统打包的时候没有把这三个核心加入到系统里面,导致出错了。然后根据它的用户手册,下载Linux源码重新编译,加上ISCSI的驱动,这三个ko文件就可以找到了,为了方便大家,我把自己编译好的Linux内核上传到这里,大家用以下步骤进行安装即可。Linux内核下载地址https://www.aliyundrive.com/s/mbUcM3SMNBN 提取码q3p7

1.先把下载好的核心包上传到开发板上面,卸载已经安装好的linux内核包

apt purge -y linux-image-legacy-sun50iw6

2.安装新的内核包

dpkg -i linux-image-legacy-sun50iw6_2.2.2_arm64.deb

3.重启开发板

reboot

重启开发板之后再次执行以下命令,就可以看到在群晖里配置的虚拟磁盘了。

iscsiadm -m discovery -t st -p SERVER-IP



3.2.3连接到群晖的ISCSI服务

iscsiadm -m node --targetname "TARGET-NAME" --portal "SERVER-IP:3260" --login

TARGET-NAME是上面那个iqn开头的那一长串英文,SERVER-IP是群晖的IP地址,端口默认是3260。

连接成功后,查看一下新的磁盘设备,并且记录下生成的设备名称。

fdisk -l


这里可以看到这个100GB的磁盘设备,设备名称为/dev/sda。

3.2.4设置开发板为USB盘模式

根据官方文档 https://weibo.com/ttarticle/p/show?id=2309404707074339897624 ,先设置otg为u盘模式。

cat /sys/devices/platform/soc/usbc0/usb_device

然后加载 g_mass_storage 内核模块,使用/dev/sda虚拟成U盘

modprobe g_mass_storage file=/dev/sda stall=0 removable=1

3.3测试U盘功能

运行完上面的命令后,在不断电的情况下将USB口插入到win10进行测试。这个开发板有三个usb口,需要知道USB OTG口是哪一个。用户手册里有说明哪个USB口是支持OTG的,如下图所示,是右边那个单独的USB口。


用公对公的USB线连接上面那个USB2.0 OTG接口,另外一端连接win10电脑的USB接口,此时电脑可以正确识别出U盘,然后把U盘格式化为fat32,然后就可以正常使用了。

3.4将开发板连上玩客云

拔掉win10电脑的USB端,插入到玩客云的USB接口里。此时玩客云并没有正确识别出移动硬盘,看了一下玩客云说明是支持ntfs的,然后在插回win10电脑,把开发板虚拟出来的U盘格式化为ntfs格式。重新插回玩客云就可以正常识别了。


测试了一下下载速度,100M带宽。



4.后记

1.上面的过程有个问题,就是只要开发板断电了,所有的命令都得重复运行一次,建设可以做一个开机启动脚本,自动运行,因为需要取得网络连接才能够正常运行,可以在脚本中加上延迟1分钟才执行,保证网络已经连通。

2.iSCSI技术并不是群晖独有的功能,像威联通或者其它NAS很多都支持这种服务。

3.开发板只需要支持网络连接和USB-OTG都可以实现这个功能。例如树莓派(Raspberry Pi 4)的开发板也可以实现这个功能。

4.关于传输速度的问题,是根据网络速度和USB的传输速度来定的。例如这次的开发板只支持USB 2.0的OTG,所以限制了他的传输速度。像树莓派(Raspberry Pi 4)这种是USB3.0的OTG,千兆网口,速度可以提高好多倍。

5.将虚拟U盘连接到玩客云只是其中一种玩法,应该还有很多种玩法,例如将他给ps4作为移动硬盘,把游戏安装在这个虚拟U盘里,这样就可以把NAS多余的空间利用起来。大家如果有什么其它好的玩法记得在评论里说一下哦。

你可能感兴趣的:(基于NAS磁盘空间作为U盘解决方案)