用NAS作为PS4的外部存储装置存储PS4游戏

首先,为什么会有这个奇怪的想法呢,一切都要从两年前,开始入坑NAS开始,去年疫情又装了一个R720XD,12盘,不过,因为我不是什么视频制作者,也没有太大的空间需求,大多时候当作Plex的影音库在使用. 早些时候,truenas不知道怎么忽然冒出了scale这个基于debian的版本,那么,就折腾一下, 顺便把家中内网升级到了万M(当然,这个跟本文一点关系都没有),又看见了躺在角落里的Rockpi4, 那么,就再折腾一波吧.

实现原理:

其实原理很简单,就是使用nas开放iscsi服务,然后使用板子挂载nas的iscsi硬盘, 再使用linux系统的 g_mass_storage 模块挂载iscsi设备通过 usb 提供给PS4使用.

需要的材料:

  1. Rockpi4A 大概500块左右的样子, 也可以选择其他的板子,但是有个很重要的前提,就是OTG要是3.0的,大部分板子的OTG都是2.0的,2.0是不能给ps4做外部存储的;
  2. 一个NAS, 这个什么都行,只要支持ISCSI就行了,什么群晖,自己弄的TrueNAS/FreeNAS之类的.
  3. 一个内存卡 给板子放系统的(有些板子自带就最好了)

开始执行:

首先,看到这里,我假定你们已经开好了iSCSI服务,网线准备好了,真的别用WIFI,板子带也不要用.另外iSCSI这里有个坑,也可能是我对硬盘太不了解了,应该是大于4T的,iSCSI的逻辑区块不能用512,要用4096.否则挂载出来磁盘异常,无法使用.

首先给你的板子刷系统,我这里rockpi4 就用官方的ubuntu server系统.重要的要确认两件事

  1. 你的系统能支援你的板子的OTG , 一开始使用 Armbian,Dietpi 这些系统,无法识别到OTG, 确认方法:
    # ls /sys/class/udc/

    确定里面有个类似于 fe800000.dwc3 的东西就证明支持了.

  2. 确定系统有 g_mass_storage 扩展.
    # modprobe g_mass_storage

    提示参数错误或者没有报错的话,就可以了. 这个其实可以自己动手丰衣足食,就看你懒不懒吧,我--- 懒.

  3. 首先安装必备的 open-iscsi,Debian/Ubuntu系列使用下面命令(其他系统自己查找吧)
    # apt install -y open-iscsi

     

  4. 查找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

     

  5. 挂载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
    
  6. 把它变成移动硬盘吧
    # 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===

    你如黎明的天空,给了我一丝光明,不知道你是那束转瞬即逝的光,还是即将升起的太阳.

点赞