Sep 082011

If you’re like me, you’re a gamer who plays a lot of different games regularly. In many ways I still prefer to have a physical disc for my games because I don’t trust the cloud completely. Believing that cloud services or your Internet connection will always be available is unrealistic.

But Steam has made it really difficult for me to stick to my disc-based preference because of their reliability as a platform and because some of their prices are ridiculously cheap. I currently have about 100 games in my Steam collection, most of which are independent titles; but I do have a few titles that are big names – Mass Effect 1 and 2, Borderlands, Portal and Portal 2, and Team Fortress 2, just to name a few.

The problem is that my Windows and Steam drive is a 128 GB solid-state disk, which doesn’t allow me to have a lot of titles installed, particularly those that I mentioned above, even though I do go back and forth between games regularly. Because I need far more than 128 GB for everything that I do on my PC, I also have a 640 GB drive as my D: drive.  (Note that I refuse to use the inane GiB term.)

Unfortunately, I have reached a point where I cannot install any more of the larger Steam titles without risking the longevity of my SSD. The problem is that Steam doesn’t allow you to install games to separate drives – a problem that I consider to be ridiculously short-sighted. For example, I’ve beaten Portal 2 but I want to eventually go back and play through again if only to listen to Cave Johnson’s hilarious statements again. Because I’m not actively playing it now, I’d rather move that to my 640 GB hard drive than uninstall it just to have to fight with space issues when I decide to play through it again.  I also don’t want to undergo another multi-GB download.

The problem is that when it comes to Steam games you can’t move the game directory and use a shortcut to the new location because technically a shortcut, unlike a UNIX symbolic link, is actually a .lnk file. So, if you move the portal 2 directory then create a shortcut, you’re actually creating a file called portal 2.lnk, not a shorcut called portal 2. If you double-click on the game in your Steam client, you will get an error that the game is missing. Eventually, when Steam sees that portal 2 is missing, it downloads the entire game again back to a new portal 2 directory.

Thanks to the Steam forums,  I’ve found a method to move individual Steam games from one drive to another in a way that still makes Steam think that the game is exactly where it should be. (Note that these instructions are specifically for Windows 7; however, they should work in Vista.)   In this example, I’m using the Windows 7 64-bit convention of the current location as C:\Program Files (x86)\Steam\steamapps\common where each game is installed in its own directory under common; and I’m using a destination of D:\SteamApps.

  • Shut down Steam completely. (In the icon in your system tray, right click the Steam icon and click Exit, or from within the client click on the Steam menu and click Exit.)
  • Move the game folder from its current location to its new location (using cut/paste or whichever method you prefer).
  • Open up a command prompt as the administrator. (Start → All Programs → Accessories → Right click on Command Prompt → Run As Administrator)
  • Use the mklink command to create a directory junction link from the old location to the new location. (Yes, I know, it’s the command line. There’s more to Windows than a GUI, you know.)  Don’t forget to use the /J argument and make sure that each directory path is enclosed in double quotes or else the link will fail.  Note also that it will create a new link wherever your old directory was, which is why you need to move the game directory.
mklink /J "old directory" "new directory"

Below is the mklink program in action.

mklink /J "C:\Program Files (x86)\Steam\steamapps\common\portal 2" "D:\SteamApps\portal 2"
Junction created for C:\Program Files (x86)\Steam\steamapps\common\portal 2 <<===>> D:\SteamApps\portal 2

That’s it!  When you start up Steam again, it should be oblivious to the fact that you moved the game directory.

(If you are still using Windows XP, you’ll need to download the Windows Server 2003 Resource Kit Tools and use the linkd.exe command unstead of mklink.)

I’ve already moved two games this way, totaling over 20 GB in recovered SSD space, and Steam appears to be oblivious to the fact that the games aren’t really where it expects them to be.

If you’re in the same boat as me and you are running out of space on an SSD, I don’t necessarily recommend moving games that you play frequently unless your destination drive is really fast. Regardless of what type of drive you use for Steam, if you need a way to move a few games to another drive, this is a good way to help with managing your Steam library without struggling with constantly installing and uninstalling your games.

[Addendum - Since this article was originally posted, Steam added a new function to let you install a program to a SteamLibrary directory on another drive right from the installer. In order to keep a better track of where your games are installed, it might be easier to use the "delete local data" function of the Steam client and then reinstall the program into the SteamLibrary directory. -- JB]