Multiple rom locations
Hey guys, long time!
I backed the ATARI VCS console a few years ago and over this past week I received it! My first instinct was "I'm gonna put RetroPie on it!" As it turns out, you can add an m.2 ssd to the console, but it's limited to SATA instead of NVMe. The problem with that, I've not found anything that is over 2tb for m.2 SATA. My current RetroPie build, with the roms and video snaps, exceeds 3tb. So I had a thought. Why don't I put all the roms that are cartridge based on the m.2, and then have all my CD based games on an external. The idea would be simple. When the drive is connected, I could access my ENTIRE library. When the drive is NOT connected, I could only access the stuff stored locally. Given how RetroPie is setup, I didn't know if such a thing were feasible, hence the start of this thread.
One thing I thought I could do is edit the
es_systems.cfgfile, which RetroPie and EmulationStation uses to load the paths to all the roms. In theory, I would just create a new
/etc/fstabentry to mount the external drive to a folder like
/home/pi/RetroPie/roms2and make the appropriate changes in the config file to load certain systems from the alternate location.
Would something like that work, or would it just completely kill the whole system? Looking for some feedback please!
IanDaemon last edited by IanDaemon
@hansolo77 Here's some info that should help:
This might be all I need. I had a feeling it would be simple. Now I just need to wait till pay day, buy a new drive, and see about making it all work. Thanks!
brandflake11 last edited by
@hansolo77 You could also do softlinks to achieve the same thing if the above doesn't work out for you. This will make a directory in your roms folder that actually points to the external drive. Here is an example (it needs absolute paths):
ln -s /media/externaldrive/gamefolder /home/pi/RetroPie/roms/system
When the drive is connected, it will point to the drive and the ROMs will appear. When it's not, the link will point but the folder being pointed to won't exist.
I'm going to be trying to tackle this over the weekend. I'm just trying to wrap my head around how this works. My plan is to put a few of the roms on the internal drive that I really like, so I can have them ready to go. Then the external drive would essentially be cold storage for the rest of them. My understanding struggle at this point is how the gamelist.xml would work. Would I need to have 2 gamelist.xml files, one for the internal and one for the external? If I go with "option A", where I create a 2nd system, would EmulationStation work if I had one system "SegaCD" where the path is internal and another system "SegaCD" where the path is external? Also, would I have 2 entries on the EmulationStation screen for SegaCD? If I go with "option B" where I make symlinks, I feel like that would only work if the system isn't split.
The part that's really confusing me, I did a test last night where I dumped only Metal Gear Solid for PSX onto the internal drive. I also copied the gamelist.xml over so EmulationStation would know it exists. The problem is, when I go into the PSX system in EmulationStation, it shows the entire gamelist, not just Metal Gear Solid. That's why I'm thinking I'll need either a separate gamelist for internal/external or have to have just the entire system on one or the other.
hansolo77 last edited by hansolo77
I did a little further testing. I can now have "Metal Gear Solid" in the PSX system be the only game that shows (ES log shows it can't find the other games so it ignores them). Trying to do the symlink is giving me some issues. I created a path on the USB called
/romsand start dumping the full cd-image systems over. When I try to create the symlink though, I get an error:
ln -s /media/retropie/Passport/roms /home/pi/RETROPIE/ ln: failed to create symbolic link '/home/pi/RETROPIE/roms': File exists
Is this not the right way to do it? I won't have just one system in the usb/roms folder. Do I instead have to use a symlink for each individual system?
ln -s /media/retropie/Passport/roms/psx /home/pi/RETROPIE/roms ln -s /media/retropie/Passport/roms/segacd /home/pi/RETROPIE/roms ln -s /media/retropie/Passport/roms/N64 /home/pi/RETROPIE/roms ###etc
Ok, just did a test system.
amigacd32When I ran this command, it created the link in the proper roms folder:
ln -s /media/retropie/Passport/roms/amigacd32 /home/pi/RETROPIE/roms
However, given the error from before about how the
File exists.. how do I get around that on the PSX system where I already have a game? Would I need to create a symlink for each individual game? That sounds rediculous if true. Is there a way to do it quickly, like :
ln -s /media/retropie/Passport/roms/psx/*.* /home/pi/RETROPIE/roms/psx
Trial and error wins the day!
I erased the symlink to
amigacd32. I then created a legit folder
amigacd32. I then restructured the symlink command and it worked! Opened up the
amigacd32folder and all the files therein were all symlinks!
ln -s /media/retropie/Passport/roms/amigacd32/* home/pi/RETROPIE/roms/amigacd32
Now all I have to do is wait for the dumping to finish and create the links and I'm good. Thanks @brandflake11 for your suggestion. Looks like that's exacly what I needed!
brandflake11 last edited by
@hansolo77 I'm glad you got it working. You can't do a link if the file/folder exists already, but it looks like you figured that out! :)
Are you symlinking the roms themselves? There's no need to do that, you can symlink the whole folder. If you don't want to delete files that are already in
you could do something like:
ln -s /media/retropie/Passport/roms/amigacd32 home/pi/RETROPIE/roms/amigacd32/external
And there would be an external folder in the amigacd32 folder in emulationstation that points to your drive location. Does that make sense?
Ahh that would make sense. But since I'm using a pre-written
gamelist.xmldon't want to have to go in and re-make another one to support the extra folder in the path. I got it working though, that's all that's important. :)
Well shoot. I thought I had it. When I tested it with one folder
amigacd32it worked like it should. But then when I moved on to another,
psxusing the same technique failed. What I end up seeing is the entire gamelist, whether or not the files themselves exist. If I have the drive plugged in, I get the game list with all the games and their "media" like videos/etc. If I pull the drive out and restart EmulationStation, the game list still shows up, although the artwork doesn't load. I suspect it's because ES is seeing now that the roms themselves are missing, so it doesn't link to the corresponding media. I kept a few games in the correct, internal drive, and when I go to them it shows the art/videos/etc. Is there no way to accomplish what I want in this manner? Apparently all the symlinks are still in the folder, and ES is picking them up as roms but not tracking the path to verify they point to anything.
Uhg, so close, yet so far. D:
brandflake11 last edited by brandflake11
@hansolo77 That is a feature of soft links. They point to other files, so they stay even when the file is not available. I recommend linking the files in an external drive folder for each emulator, so you know when to ignore them when the drive is not plugged in. Maybe actually getting retropie to look in your drive paths would be better. Did you have any luck experimenting with that?
You could also mount the locations of the ROMs to folders where you would want them to be located when the computer starts up. Maybe that would be an option. They wouldn't appear if you can't mount the drive that way.
I'm curious how to solve this kind of problem myself, so if you find a different solution, let me know!
I tried doing my initial plan of mounting the drive in fstab, but it didn't work either. I think What I'm going to have to do is like you suggested, using softlinks but pointing to a /external/ folder inside the rom/system folder. I did some testing last night, where I had symlinked the folder and had a few roms inside. I also have a
gamelist.xmlfile and a
/mediafolder where all the videos for ALL the games exist. Using the subfolder, I can see all the roms that are "internal" and a separate entry called
external, when clicked on opens up all the games that are on the external drive. When I un-mount the drive and reopen ES, the "internal" roms are still there but the "external" entry is gone. This works by configuring ES to have the setting
Always Parse Gamelistto NO, that causes it to scan for the files at launch. If set to YES, it will list all the games whether they exist or not. The nice thing is that ES will scan the roms and find some games with the drive disconnected and will still load the appropriate media (I think it loads them from the gamelist.xml in this case, where it sorta soft-loads the xml but isn't restricted to it). The only problem I have now is that the games loaded in the
externalfolder (when it exists) it doesn't load the media. I think this is because it's still going to try to load the gamelist.xml and the paths no longer match. I'll just need to rescrape. That's what I'm going to try to do tonight.
So yeah, using a symlink like this works:
ln -s /media/retropie/Passport/roms/amigacd32 /home/pi/RETROPIE/roms/amigacd32/external
You just have to live with having the external games be listed in a EXTERNAL folder in your browsing lists. When I tried to do it on the file-level, it still tried to load and display all the linked files in the gamelist.