NTFS junction point
An NTFS junction point is a symbolic link to a directory that acts as an alias of that directory. This feature of the NTFS file system offers benefits over a Windows shell shortcut (.lnk) file, such as allowing access to files within the directory via Windows Explorer, the Command Prompt, etc.
Unlike NTFS symbolic links, junction points can only link to an absolute path and only to a local volume; junction points from a local volume to a remote share are unsupported.[1]
Junction points are a type of NTFS reparse point, internally represented as a mount point. They were introduced with NTFS 3.0, the default file system for Windows 2000. The Windows 2000 and Windows 2003 Resource Kits include a program called linkd,[2] to create junction points; Mark Russinovich of Winternals released a tool called junction[3] which provided more complete functionality. Windows XP includes "fsutil";[4] Masatoshi Kimura released a filter driver[5] for the soft/symbolic link functionality existing in Windows XP's NTFS version, to be accessible to the end user. Windows Vista, Windows Server 2008, and later operating systems include an mklink command-line utility for creating junction points.
Examples of use
Program redirection
By setting a junction point that points to a directory containing a particular version of a piece of software, it may be possible to add another version of the software and redirect the junction point to point to the version desired.
Saving disk space
The contents of a junction use almost no disk space (they simply point to the original directory). If you need to have multiple points of entry to a large directory, junction points will serve that purpose well. Junction points should not be confused with a copy of something as junctions simply point to the original. If directories need to be modified separately a junction cannot be used as it does not provide a distinct copy of the directory or files within.
Circumventing pre-defined paths
Since reinstalling Windows (or installing a new version) often requires deleting the contents of the C: drive, it is advantageous to create multiple partitions so only one partition needs to be deleted during the installation. However, some programs don't let the user choose the installation directory, or install some of their files to the C: drive even when they are installed to a different drive. By creating a junction point, the program can be tricked into installing to a different directory.
Obtaining a list of junction points
A list of all the junctions present in the current directory can be obtained from an elevated Command Prompt as Admin by executing dir /aL
, and a list of all the junctions present on a disk volume, by executing dir /aL /s C:\
, where "C:" is the volume to scan.
Creating or deleting a junction point
A junction point can be created in Vista or later[6]
mklink /J <Link> <Target>
To delete it in Vista or later, use: [7]
rmdir
or
fsutil reparsepoint delete PATH
A junction point can be created in XP (after installing; Server 2003 Resource Kit) with
LINKD Source Destination
To delete it in XP, use:
LINKD Source /D
Limitations
Neither the Windows NT startup process nor the Windows Vista startup process support Junction points, so it's impossible to redirect certain system folders:
- folder containing hiberfil.sys (if it's configured to be outside root directory)
- \Windows
- \Windows\System32
- \Windows\Config
However it is possible to redirect non-critical folders:
- \Users
- \Documents and Settings
- \Program Files
- \Program Files (x86)
Creating junctions for \Users and \ProgramData pointing to another drive is not recommended as it breaks updates and Windows Store Apps.[8]
Creating junctions for \Users, \ProgramData, "\Program Files" or "\Program Files (x86)" pointing to other locations breaks installation resp. upgrade of Windows.[9]
Creating junctions for "\Program Files" or "\Program Files (x86)" pointing to another drive breaks Windows' Component Based Servicing which hardlinks files from its repository \Windows\SxS to their installation directory.[citation needed]
See also
- NTFS symbolic link
- NTFS volume mount point
- NTFS reparse point
- Symbolic link
References
- ↑ Quote: "Note that Windows does not support junctions to directories on remote shares." Sysinternals Junction documentation [1]
- ↑ Microsoft Knowledge Base, 2007-02-20, How to create and manipulate NTFS junction points, http://support.microsoft.com/kb/205524/en-us
- ↑ Mark Russinovich, 2010-09-08, Junction, https://technet.microsoft.com/en-us/sysinternals/bb896768
- ↑ http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/fsutil.mspx?mfr=true
- ↑ http://emk.name/#download http://schinagl.priv.at/nt/ln/ln.html#symboliclinksforwindowsxp
- ↑ Archiveddocs. "Mklink". https://technet.microsoft.com/en-us/library/cc753194.aspx.
- ↑ "How to Delete a Junction by Using Command Line in Windows 7"
- ↑ "Relocation of the Users directory and the ProgramData directory to a drive other than the drive that contains the Windows directory". http://support.microsoft.com/kb/949977. Retrieved 2015-03-12.
- ↑ "You encounter an error when trying to install Windows 8.1 due to redirecting the Users or Program Files folder to another partition". http://support.microsoft.com/kb/2876597. Retrieved 2015-03-12.
External links
- Microsoft Knowledge Base Article – 'How to Create and Manipulate NTFS Junction Points'
- Junction command line utility from Microsoft TechNet
- Codeproject Article – discussion on the source code of a junction point utility, aimed at programmers
- PC Mag Article about adding any directory to the start menu (allowing a preview within the startmenu as a submenu).