16

I've got Steam installed. Steam is installed to c:\Program Files\Steam. Steam downloads various games to a sub folder called SteamApps. The only option available is for steam to download and install apps to the same location as steam. A typical setup could look like this:

C:\Program Files\Steam\SteamApps\common\Game1
C:\Program Files\Steam\SteamApps\common\Game2
C:\Program Files\Steam\SteamApps\common\Game3
C:\Program Files\Steam\SteamApps\common\Game4

Etc.

My drive C is an SSD, so space is an issue. Game1 is very disk intensive, so I need it to remain on drive C, but I've got a terrabyte of space that I'd like Game2 and Game3 to be installed on.

Is there a way to create a virtual folder called "Game2" that really points to my bigger hard drive and to make it in such a way that Steam (or any app really) would be able to browse to the location on drive C and not even realize that it was really accessing drive D: where the virtual folder points to?

So in the end, C:\Program Files\Steam\SteamApps\Common\Game2 would exist as a folder but in reality it maps to D:\Games\Game2.

4
  • 1
    Have the same "problem" myself. What I do is make a backup of games I don't currently play, then delete local content. When you want to play them again, you just go to menu "Steam -> backup and restore" and restore them. That way you don't have to download all the data again when re-installing. It is however a crappy design that you can't have games on different disks. Commented Dec 31, 2011 at 13:44
  • 1
    I shall also link the excellent "types of links in Windows" superuser.com/a/347946/24500
    – surfasb
    Commented Jan 2, 2012 at 5:58
  • 1
    take a look at my answer regarding junctions, links, etc. Commented May 3, 2014 at 15:32
  • 1
    Better yet... I've provided more detail in a new answer below. Please take a look. Commented May 3, 2014 at 21:50

4 Answers 4

21

Try the following:

Open a command prompt with administrative permissions:

mklink /D Virtual_Folder_Here Real_Folder_Here

Example, you want to install something to D:\Games, but you want it to appear as C:\Games.

mklink /D C:\Games D:\Games

This will create a folder D:\Game which also appears as C:\Game. Anything that references C:\Game will be redirected to D:\Game.

Since I am not completely familiar with steam, I have not given an example that matches your exact folder. If steam allows you to pick the folder it installs to (Which due to you not just installing it to the other drive, I am not so sure it does.) you could create they symbolic link first. If however it does not, you may need to do some file-transfers, moving it to the new location and then creating the symbolic link. Example:

Steam installed your game to: C:\Program Files\Steam\SteamApps\common\Game2

Now, you create your folder: D:\GameGoesHere

Then, you copy all the files from the original folder and put it in D:\GameGoesHere, then you can create the link:

mklink /D "C:\Program Files\Steam\SteamApps\common\Game2" "D:\GameGoesHere"

Notice I used quotations this time due to the spacing of "Program Files." Also note that before creating the link the virtual folder must NOT be a real folder. So, if the folder you want to be a link exists, you must delete it first (Not before you copy it, of course!)

9

#ANSWER: Why (and how) This solutions works


If you need to reclaim this space/relocate the usage onto another drive you have a few great options

You can safely relocate to any new storage location like...

  • local/live storage
  • online storage
  • near-line storage
  • offline storage

...just so long as the your OLD location is NTFS and the new location:

  1. is SMB based
  2. conforms to Windows LANman -- if you use symbolic links/want to relocation onto a network server/device (see below()
  3. can be added/assigned to the existing file system/"My Computer" using a tool like :
  • the DOS/Windows shell assign command
  • Windows "Computer Management" (compmgmt.msc)
  1. can be mounted it to a drive letter or other mount point/directory

##So, essentially as of today (2014-05-02), we're talkin about:

  • another live (mounted) partition
  • an optical disc (CD, DVD, etc.) with a live filesystem like FAT, or NTFS
  • an external hard drive
  • a USB drive
  • a network drive

NOTE:

If and when you are prompted for the media or receive any errors about missing files/missing location, you simply make sure to remount/reinsert your drive/media if it's not already a live partition.

.

##9 out of 10 times, this will be the case: Therefore, you'll find this to be very straightforward, and you have a few great options to choose from, which frankly, yield roughly the same results:

  1. Create a directory junction to the new location:

    • Junctions allow one directory to point to another.
    • Junctions can only be used on local storage
    • They are are recognized at the file system level as an alias entry in the File System Table (FSTAB).
      • Therefore, it's transparent to all programs, including the OS itself.
      • In other words, it is NOT seen as a file that simply points to another location (like a shortcut) and therefore always works without incident.
    • Junctions can only have absolute references to files. So, even if you move an entire directory structure with a junction within it, with the structure completely intact, you will have to recreate your junction.
    • Junctions can be named anything, i.e. they don't have to reflect the same name as the folder they are pointing to.
  2. Create a symbolic link to the new location:

    • Symbolic Links are file system objects that point to other file system objects.
    • They are Similar to junctions, and are reparse points.
    • However, in some rare occasions, with some programs, I've seen them be NOT recognized (this is sometimes the case with Windows Special Folders.
    • But, they are more flexible in that:
      • Symbolic links can be created as absolute or relative references.
      • can be used to point to SMB/LANman network locations (windows servers, SMB devices, etc.)

#PROCEDURES:


##So, move your files & folders to the new location then:

  1. OPTION1 (natively): Just issue the built-in Windows Vista / 7 / 8 command and the cmd prompt:

    • Create a junction ("hard" link to a directory):

        mklink /J <oldpath> <newpath>
      
    • Create a symbolic link ("soft" link to a directory):

        mklink /D <oldpath> <newpath>
      
  2. Option2 (use a tool): A GREAT alternative is a free handy utility I've been using for years called "Link Shell Extension" (LSE) (or Google it).

    Just download, unpack, and run (no installation)

    LSE allows you to create:

    • symlinks
    • hardlinks
    • junctions
    • smartcopies
    • smartclones
    • smart mirrors
    • smart moves
    • splices
    • multiple sources
    • and bunch of other stuff I never use, frankly
      .

    It's a brilliant free product that creates a windows explorer context menu that allows you right-click on your LINK-TARGET folder then drag it to where you'd like to create the actual link.

    You can of course rename the link to anything you'd like.

8

Shockingly enough, there's a tool just for this called steam mover, designed to solve the very same issue, which works in windows 7 .It really is a cunningly disguised way of doing symlinks easily. Basically it will move the files automatically and do a symlink for you, so everything seems to be where steam expects it, in C: but its really elsewhere.

I'd note this will only work on windows 7 and vista since MS added symlinks with those versions of windows

7
  • 1
    You could use the Win2K resource kit utility linkd on that platform, or the Sysinternals tool junction on WinXP. Not really relevant to the question though. Commented Dec 31, 2011 at 16:30
  • 1
    @Patrick: Small technicality. Linkd does not creat symbolic links, but creates directory junctions.
    – surfasb
    Commented Dec 31, 2011 at 18:55
  • 2
    junctions only work within the same drive i believe. The closest thing to symlinks for older systems is cunning use of mapping a drive as a folder i believe
    – Journeyman Geek
    Commented Dec 31, 2011 at 23:26
  • 1
    @surfasb well who uses win2k anymore anyway? :) (sadly, we do.) Commented Jan 2, 2012 at 3:53
  • 1
    @JourneymanGeek: No, Junctions work across local volumes. Rather, the hardlinks that do not span across volumes.
    – surfasb
    Commented Jan 2, 2012 at 5:54
0

Junctions can point to any NTFS folder, no matter on what disk is the source versus the target.

Since WinXP Junctions works with any directly connected NTFS partitions, no matter if they are on the same disk or on different diks.

So having a junction is the best solution (symbolic can cause some problems).

I use it a lot to do this:

  • Have some "virtual" folders on System partition (normally it is C:) that point to a folder on a partition on a USB disk (SSD, HDD, pendrive, memory card, etc).

So i can have some applications data on external media, and have only one copy for more than one PC, so no need to do a sync, etc. Of course only one PC will see it at the same time.

Also junctions can point to a folder on a NTFS partition that is encrypted by veraCrypt, etc.

Junctions only need three things:

  • Source partition be a NTFS
  • Destination partition be a NTFS
  • Both partitions be local (physical connected to the PC)... this is not allways a need, there are some tools that let you put a FTP as a local drive and be seen it as a NTFS, so junctions can be created to point to that

What i mean is that junction need to see the source and target be inside a NTFS partition.

  • For XP use the SysInternals tool called junction, link: TechNet Junction Download.
  • For 7 to 10 use the native tool mklink with /j parameter.

Both are command line tools and most of the times requires admin rights.

Juntions are the easiest way, but not the only one:

  • You can use a NTFS partition mounted on a NTFS folder on different disks
  • You can create a VHD /VHDX file (XP and Vista requieres a tool, 7 to 10 do it native on disk managment), create one or more partitions inside it and mount them on any NTFS folder
  • etc

The trick of VHD / VHDX also lets you use dynamic storage, so no need to worry about GiB of size:

  1. Create the VHD / VHDX in dynamic mode (not all size assigned to the virtual disk will be the size of the file) and give it as much as you want (VHD is limited to a little less than 2TiB, VHDX limit is 64TiB), but create it on a NTFS, since FAT32 limits the file size to less than 4GiB.
  2. Initializate the virtual disk as MBR or GPT (depends on what you want, MBR does not support more than 4 primary partitions and is limited to a little less tha 2TiB, GPT is limited to 8ZiB, but Windows XP can not see GPT drives), see more info about that limits on Wikipedia: en.wikipedia.org/wiki/GUID_Partition_Table
  3. Partition the virtual disk as you want
  4. Give format NTFS to the partition you want
  5. If you need to move data on one folder (the one you want to be somewhere else) temporally mount that new partiton as any letter, move the data to it and dismount it... but do not delete the folder from where you moved the contents.
  6. Mount that partition over that folder

And $MFT have a trick to be as small as possible (very important if you create big, really big NFTS partitions to hold ISOs, etc... less than 1000 files of really big size each one):

  • The basics of this is to have initial $MFT size as small as possible
  • $MFT will grow if you put more files and it has not enough space, so do not be afraid of not been able to add files
  • It is a normal native way of creating the partition, with no risk at all
  • There is no motive (i can see) to not create all NFTS partitions this way

The procedure is quite simple:

  1. Create the partition with only 8MiB (yes megabytes, not giga, etc), the less size to create a normal NTFS... NTFS can be of less size, but it will do strange things since it is not a fully NFTS.
  2. Grow it to the real size you want

Theese steps makes one thing:

  • When partition is created, the $MFT is really small (since partition is only 8MiB in size)

If you create the partition with the full size you want, the $MFT will be (by default and as lees as possible) of 12.5% of the partition size; and i do not know any method to reduce that percent, neither to reduce $MFT size after been created; that percent can be greater touching NtfsMFTZoneReservation registry key on some windows, but never be less... so by creating a partition of only 8MiB, the $MFT initial size will be very little. You can check how $MFT space is reserved on Microsoft site: How NTFS reserves space for its Master File table (MFT)

Growing a NTFS partition size does not touch the $MFT size... so to have a huge NTFS partition with as less as possible $MFT size, create the partition as only 8MiB and grow it to desired size after creation.

That is great for having a dynamic VHD / VHDX, beacuse it will not use all that $MFT space for nothing... i mean:

  • If you create a NTFS of 8MiB (do not forget to do a it in quick format mode) and grow to 1.5TiB, the file VHD / VHDX holding it will be smaller, much smaller
  • If you directly create a 1.5TiB partition inside the VHD / VHDX, the file VHD / VHDX holding it will be bigger, much bigger

Test done in Windows 10 Home 64Bits:

  • Dynamic VHD of 1.8TiB with one NTFS partition created (with quick format) of 8MiG and growed to 1.5GiB ... VHD size is: 15.6MiB
  • Dynamic VHD of 1.8TiB with one NTFS partition created (with quick format) of 1.5GiB ... VHD size is: 107MiB

See, it is ten times greater. I know it is not much talking about a hundred of megabytes... but if you use a lot (some thousand of them) of VHD / VHDX files, that size can matter a lot, if one thousand of such files, that would be near 100GiB. Also with VHDX and sizes of ZetaBytes it is really huge such difference.

Note: I talk about disk size of 1.8TiB just to ensure i can create an identical partition of exact size of 1.5TiB (1572864 MiB)... if you put disk size of X, partition will be less than X.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .