How to install Steam games on external HDD without having to rerecognise files?

I have a decently capable laptop which I upgraded to an SSD a while ago. Unfortunately, I didn't have the foresight to buy a 500GB 850 EVO and I now have a 250GB. I now want to install games to use on my laptop, and I know that I can do this with a Steam library on an external HDD.

However, when I tried this, Steam would complain whenever I tried to unplug the HDD, forcing me to re-recognize the game files when I plugged the HDD back in. That takes a while, especially on a 5400rpm HDD over USB 3.

Is there any way I can avoid having to re-recognize game files while still only having the external HDD plugged in whenever I want to play games? I would love to be able to keep Steam open, as the notifications and friends panels are useful to me while I am not playing games.


Solution 1:

According to an answer on the LTT forums, it is relatively easy to accomplish by creating symbolic links to the external HDD game folder files. (slightly paraphrased and adapted from original)

  1. Close Steam and plug in an external drive (with games already installed to it)
  2. Find the game's appmanifest file in the [External SteamLibrary path]/steamapps folder. The number in the filename is the same as in the Steam Store page URL
    • e.g. BioShock Remaster's URL is store.steampowered.com/app/409710/BioShock_Remastered/, and the number is 409710
  3. Move the appmanifest file to the local storage.
    • e.g. from [External SteamLibrary path]/steamapps/[appmanifest file] to C:\Program Files (x86)\Steam\steamapps\[appmanifest file]
  4. Open a Command Prompt as administrator
  5. Change directory to the local Steam library's common folder
    • e.g. Type: cd "C:\Program Files (x86)\Steam\steamapps\common"
  6. Create a symbolic link using the command mklink /J [game folder name] [Path to game on external HDD].
    • e.g. Type: mklink /J "Bioshock Remastered" "[External SteamLibrary path]\steamapps\common\Bioshock Remastered"
  7. Repeat steps 2-6 for more games

Solution 2:

The symlink option suggested in your self-answer is a good one, and used to be the only way you could do this, back when Steam only allowed one library folder.

However, a year or two ago, Steam quietly added the ability to assign multiple library folders in the settings menu. Enter GamePipe, a third party app that can detect your defined Steam libraries and move games between them wholesale. Including libraries on external drives or network attached storage (NAS) devices. All with a simple, user-friendly graphical interface, to boot!

The best part about this app, as discussed near the bottom of the linked page, is that, in addition to moving whole game folders between libraries, it also updates the .acf files Steam uses to track a game's location. Which means, among other things, that you shouldn't have trouble doing updates after moving a game, and Steam will auto-detect the games whenever the external HDD is connected.

I used this tool to move the majority of my games library onto a NAS and what happens now is the games will show as "not installed" if my computer is not currently connected to the NAS, but will immediately show as installed and ready to play when the NAS is connected. The games are there when I want them, bottom line.

(Of course, there are some latency issues if I actually try to play a game over wifi from the NAS, but GamePipe makes it easy enough to move the games I'm currently playing back to the local HDD, and shuffle off ones I'm not playing to make room, so that's a non-issue, for me. I don't think that would be a problem for a more traditional external HDD with a wired connection anyway.)

Steam is left running on my computer all the time, and no issues crop up from games being moved back and forth, so this would also seem to cover your use case in the question about having access to friends and notifications. (GamePipe does ask you to close Steam when it finishes moving games, but you can relaunch immediately, and also have Steam open during the transfer, no problem.)