首先,为什么会有这个奇怪的想法呢,一切都要从两年前,开始入坑NAS开始,去年疫情又装了一个R720XD,12盘,不过,因为我不是什么视频制作者,也没有太大的空间需求,大多时候当作Plex的影音库在使用. 早些时候,truenas不知道怎么忽然冒出了scale这个基于debian的版本,那么,就折腾一下, 顺便把家中内网升级到了万M(当然,这个跟本文一点关系都没有),又看见了躺在角落里的Rockpi4, 那么,就再折腾一波吧.
实现原理:
其实原理很简单,就是使用nas开放iscsi服务,然后使用板子挂载nas的iscsi硬盘, 再使用linux系统的 g_mass_storage 模块挂载iscsi设备通过 usb 提供给PS4使用.
需要的材料:
- Rockpi4A 大概500块左右的样子, 也可以选择其他的板子,但是有个很重要的前提,就是OTG要是3.0的,大部分板子的OTG都是2.0的,2.0是不能给ps4做外部存储的;
- 一个NAS, 这个什么都行,只要支持ISCSI就行了,什么群晖,自己弄的TrueNAS/FreeNAS之类的.
- 一个内存卡 给板子放系统的(有些板子自带就最好了)
开始执行:
首先,看到这里,我假定你们已经开好了iSCSI服务,网线准备好了,真的别用WIFI,板子带也不要用.另外iSCSI这里有个坑,也可能是我对硬盘太不了解了,应该是大于4T的,iSCSI的逻辑区块不能用512,要用4096.否则挂载出来磁盘异常,无法使用.
首先给你的板子刷系统,我这里rockpi4 就用官方的ubuntu server系统.重要的要确认两件事
- 你的系统能支援你的板子的OTG , 一开始使用 Armbian,Dietpi 这些系统,无法识别到OTG, 确认方法:
# ls /sys/class/udc/
确定里面有个类似于 fe800000.dwc3 的东西就证明支持了.
- 确定系统有 g_mass_storage 扩展.
# modprobe g_mass_storage
提示参数错误或者没有报错的话,就可以了. 这个其实可以自己动手丰衣足食,就看你懒不懒吧,我--- 懒.
- 首先安装必备的 open-iscsi,Debian/Ubuntu系列使用下面命令(其他系统自己查找吧)
# apt install -y open-iscsi
- 查找NAS上的iscsi target
root@rockpi4a:~# iscsiadm -m discovery -p 10.0.1.2 --type sendtargets 10.0.1.2:3260,1 iqn.2021-07.com.simcu.ctl:windows 10.0.1.2:3260,1 iqn.2021-07.com.simcu.ctl:ps4
- 挂载target为本地磁盘, 使用fdisk 确定设备名称,本例中为 /dev/sda
root@rockpi4a:~# iscsiadm -m node --targetname=iqn.2021-07.com.simcu.ctl:ps4 -p 10.0.1.2 --login root@rockpi4a:~# fdisk -l Disk /dev/ram0: 4 MiB, 4194304 bytes, 8192 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk /dev/mtdblock0: 4 MiB, 4194304 bytes, 8192 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/mmcblk0: 14.86 GiB, 15931539456 bytes, 31116288 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: CBA42AAD-20EB-4016-A0E1-BA830D6E585D Device Start End Sectors Size Type /dev/mmcblk0p1 64 8063 8000 3.9M Microsoft basic data /dev/mmcblk0p2 16384 24575 8192 4M Microsoft basic data /dev/mmcblk0p3 24576 32767 8192 4M Microsoft basic data /dev/mmcblk0p4 32768 1081343 1048576 512M EFI System /dev/mmcblk0p5 1081344 31114335 30032992 14.3G Linux filesystem Disk /dev/sda: 6 TiB, 6597069783040 bytes, 1610612740 sectors Disk model: iSCSI Disk Units: sectors of 1 * 4096 = 4096 bytes Sector size (logical/physical): 4096 bytes / 16384 bytes I/O size (minimum/optimal): 16384 bytes / 16384 bytes
- 把它变成移动硬盘吧
# modprobe g_mass_storage file=/dev/sda
就这么简单,一句命令,然后用你的OTG数据线,插到ps4上吧, 是不是出现了! 当然,其实可以使用configfs的方式进行配置,那样可以配置很多的个性化信息, 比如 硬盘名称,生产厂商这些,不具体细说了,贴上脚本,自己研究吧
以下内容和上面的6的功能是重复的,下面的脚本仅供参考:
# 挂载USB modprobe usb_f_mass_storage # 挂载ISCSI Target iscsiadm -m node --targetname=iqn.2021-07.com.simcu.ctl:ps4 -p 10.0.1.2 --login # 创建个性化盘 cd /sys/kernel/config/usb_gadget mkdir g.1/functions/mass_storage.0 -p sleep 1 echo "/dev/sda" > g.1/functions/mass_storage.0/lun.0/file echo 0 > g.1/functions/mass_storage.0/lun.0/removable mkdir g.1/strings/0x409 mkdir -p g.1/configs/c.1/strings/0x409 echo 0xa4a2 > g.1/idProduct echo 0x0525 > g.1/idVendor echo 1234567890 > g.1/strings/0x409/serialnumber echo simcu > g.1/strings/0x409/manufacturer echo "SIMCU NAS PS4 Games" > g.1/strings/0x409/product echo "cnf1" > g.1/configs/c.1/strings/0x409/configuration ln -s g.1/functions/mass_storage.0 g.1/configs/c.1 echo fe800000.dwc3 > g.1/UDC
===The End===
你如黎明的天空,给了我一丝光明,不知道你是那束转瞬即逝的光,还是即将升起的太阳.