Store games on a NAS

Instead of using the internal storage or an external USB key/hard drive to store your userdata (games, saves, configuration, etc.), you can use a NAS (Network Attached Storage) instead.

You will need to replace the sharedevice=INTERNAL line with sharedevice=NETWORK inside batocera-boot.conf. This file is on the boot partition of the Batocera system. If on a removable drive, you can edit it from any computer as it is in a readable FAT32 file system (don't use Windows Notepad).

You can tell if you have successfully done this as the Storage Device in Main Menu > System Settings will be blank! But that could also mean you've entered an invalid entry to sharedevice

Batocera uses a simpler syntax than standard Linux network mounting. For each network share you'd like to attach, add an additional line below sharedevice beginning with sharenetwork_smb#= (for most Windows Samba shares) or sharenetwork_nfs# (for most Linux Network File System shares) where # is the number of the share from 0-9 (yes, this does mean you're limited to only ten shares per type of share, this limit may be changed in the future). Following this, put in the keyword for the appropriate directory you want to replace in Batocera (as listed below).

There are the pre-defined keywords you can use:

  • For the whole user data directory, SHARE
  • For the roms directory, ROMS
  • For the bios directory, BIOS
  • For the saves directory, SAVES
  • For custom menu background music, MUSIC
  • For custom bezels, DECORATIONS
  • For screenshots taken in game or with batocera-screenshot, SCREENSHOTS
  • For themes, THEMES
  • For cheats databases, CHEATS
  • For sounds, SOUNDS (v32 and above)
  • For magazine and videos, LIBRARY
  • For the boot splash, SPLASH

You can add any combination of the above (except SHARE as that includes everything) by adding additional lines.

If you map only certain directories to your NAS, Batocera will search the internal storage for the remaining directories.

@[IP-address]:[share-name]/[path/to/directory]:[option1-name]=[option1-value],[option2-name]=[option2-value],[etc.]

Then add the @ symbol, the IP address/hostname of the device with the share, the : character, the name of the share followed by a /, then the path to the directory (using Unix syntax / instead of \), another : character and then any additional options required for the share separated by a comma (,) (guest shares need only :guest as an option, password protected shares need :username=[your-username],password=[your-password]). Syntax:

sharenetwork_[smb-or-nfs][0-9]=[keyword]@[IP-address]:[share-name]/[path/to/directory]:[option1-name]=[option1-value],[option2-name]=[option2-value],[etc.]

Examples below.

If Batocera fails to connect to the network at boot, it will wait approximately one minute retrying to connect before falling back to internal storage.

Windows shares can use identification or a guest account to connect.

In the following examples, the Windows CIFS share called Documents has a folder named batocera which contains the folder structure of Batocera's userdata directory. The IP address of the Windows shared server is 192.168.0.1 in this example. If applicable, you can use the hostname of your NAS instead, however this may have issues with particular routers.

The whole user data directory on the NAS

  sharedevice=NETWORK
  sharenetwork_smb1=SHARE@192.168.0.1:Documents/batocera:guest

Only the roms directory on the NAS

  sharedevice=NETWORK
  sharenetwork_smb1=ROMS@192.168.0.1:Documents/batocera/roms:guest

Only the roms directory on the NAS with CIFS authentication

  sharedevice=NETWORK
  sharenetwork_smb1=ROMS@192.168.0.1:Documents/batocera/roms:username=john,password=wayne

The roms, saves and bios directories on the NAS

  sharedevice=NETWORK
  sharenetwork_smb1=ROMS@192.168.0.1:Documents/batocera/roms:guest
  sharenetwork_smb2=SAVES@192.168.0.1:Documents/batocera/saves:guest
  sharenetwork_smb3=BIOS@192.168.0.1:Documents/batocera/bios:guest

Specific SMB version options

In several cases, you need to add SMB options, for instance if you NAS requires a specific CIFS version:

sharenetwork_smb1=ROMS@192.168.0.1:Documents/Batocera/roms:guest,vers=1.0

CIFS version is needed for several NAS vendors:

  • when using and Orange Livebox as a NAS, or on Synology (tested on a DS418play), you need vers=1.0
  • if you use OpenMediaVault 5, you need vers=3.0

In this kind of setup, make sure that:

  • you provide the exact name your SMB share on the NAS (Documents/Batocera/roms in the example above is the path from your NAS export)
  • you have the right user authentication (username=john,password=wayne in the example above) and, if you use anonymous guest access, that you have write access enabled, so that Batocera can write the updated in the gamelist.xml files, and download scraped metadata like thumbnails or video snapshots.

The whole user data directory on the NAS

  sharedevice=NETWORK
  sharenetwork_nfs1=SHARE@192.168.0.1:/mnt/Documents/batocera

Only the roms directory on the NAS, with a specific NFS version

  sharedevice=NETWORK
  sharenetwork_nfs1=ROMS@192.168.0.1:/mnt/Documents/batocera/roms:vers=4

The roms, saves and bios directories on the NAS

  sharedevice=NETWORK
  sharenetwork_nfs1=ROMS@192.168.0.1:/mnt/Documents/batocera/roms
  sharenetwork_nfs2=SAVES@192.168.0.1:/mnt/Documents/batocera/saves
  sharenetwork_nfs3=BIOS@192.168.0.1:/mnt/Documents/batocera/bios

Troubleshooting

Make sure you escape special characters in your CIFS passwords if you have some. To escape a character, put a \ in front of it. To escape a \ itself, use \\.

For troubleshooting purposes, you have /tmp/mountNetwork.log and /tmp/mountNetwork.err that will give you some insights on the mount failures if needed.

Samba/Windows manually mounted shares

It is possible to map individual folders with sharenetwork_cmd# if you are familiar with standard Linux network storage mounting. Examples of mapping other directories via sharenetwork_cmd:

sharenetwork_cmd1=mount.cifs -o guest //192.168.0.1/Documents/batocera/music /userdata/music
sharenetwork_cmd2=mount.cifs -o guest //192.168.0.1/Documents/batocera/cheats /userdata/cheats
sharenetwork_cmd3=mount.cifs -o guest //192.168.0.1/Documents/batocera/screenshots /userdata/screenshots
sharenetwork_cmd4=mount.cifs -o guest //192.168.0.1/Documents/batocera/themes /userdata/themes

This will only work if sharedevice=NETWORK. You can also use this to just mount anything with acceptable bash commands, including folders from local drives, etc.

These will appear as if though they are local to the drive, so keep that in mind when troubleshooting in the future!

NFS and root permissions

Batocera has a unique root user, so all files accessed on the share are from the root user, which can conflict with how your other NFS clients access files. You should check how the file permissions are declared on your NFS server, but a common way to make sure your file permissions are managed correctly is to map the file rights to the UID of the user that will access these files locally. Typically, if your NFS shares are defined in /etc/exports and you want to give access to a user with UID/GID of 1000, you can make it with:

/media/games/batocera 192.168.0.1(rw,sync,all_squash,anonuid=1000,anongid=1000,no_subtree_check)
  • store_games_on_a_nas.txt
  • Last modified: 11 days ago
  • by atari