使用 NTFS Junction

2016-07-25, 星期一, 00:00

NTFS Junction 实现了 Windows 下目录的软链接

把笔记本的硬盘换成了 256GB 的 SSD,装了 Battlefield 4,立马吃掉 64GB 空间,游戏装在 SSD 上,地图加载的速度快了很多,但对我这种 noob 来说不过是送人头更勤快了而已,因此决定把游戏移到退役机械硬盘改的移动硬盘上,给 SSD 腾出更多空间。最直接的方法是把游戏文件夹移动到移动硬盘上,然后在 Origin 里修改安装路径。

想起之前在知乎上看到 Junction 的介绍,决定试一试,毕竟其他应用场景下可能并不存在修改文件路径的选项。

简单地说和 ln -s 是一个用法。

Windows 2000 and higher supports directory symbolic links, where a directory serves as a symbolic link to another directory on the computer. For example, if the directory D:\SYMLINK specified C:\WINNT\SYSTEM32 as its target, then an application accessing D:\SYMLINK\DRIVERS would in reality be accessing C:\WINNT\SYSTEM32\DRIVERS. Directory symbolic links are known as NTFS junctions in Windows. Unfortunately, Windows comes with no tools for creating junctions—you have to purchase the Win2K Resource Kit, which comes with the linkd program for creating junctions.

Windows 2000 及之后的操作系统支持将一个目录作为符号链接指向另一个目录。例如将目录 D:\SYMLINK 指向 C:\WINNT\SYSTEM32 后,应用访问 D:\SYMLINK\DRIVERS 时实际上是在访问 C:\WINNT\SYSTEM32\DRIVERS,这一功能称为 NTFS junctions,若要使用,需先购买 Win2K Resource Kit 使用其中的 linkd 程序。

所幸 Mark Russinovich,Windows Internals 一书的作者,现 Azure 的 CTO 就实现了自己的版本 Junction,并且加入了 Sysinternals Suite 豪华午餐。唯一需要注意的是不要使用 Junction 链接网络硬盘上的目录 (Note that Windows does not support junctions to directories on remote shares)

下载 zip 解压后有 junction64.exe 和 junction.exe(x86) 两个文件,我为了在 shell 中方便使用,直接丢到了 C:\Windows 下面。

软件用法 Junction 简单明了,但 列出目录下的 junctions 这一功能似乎要加上 . 表示当前目录才可用

建立 junction

PS C:\> junction64 'C:\Program Files (x86)\Origin Games\Battlefield 4' 'X:\GAMES\Origin Games\Battlefield 4'
Junction v1.07 - Creates and lists directory links
Copyright (C) 2005-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
Created: C:\Program Files (x86)\Origin Games\Battlefield 4
Targetted at: X:\GAMES\Origin Games\Battlefield 4

用资源管理器看到目录下多了一个快捷方式图标,路径仍显示为 C:\Program Files (x86)\Origin Games\Battlefield 4 实际访问的是 X:\GAMES\Origin Games\Battlefield 4

查看指定目录下是否有 junction,注意加入 . 符号表示该目录

PS C:\> junction64 -s 'C:\Program Files (x86)\Origin Games\.'
Junction v1.07 - Creates and lists directory links
Copyright (C) 2005-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
\\?\C:\Program Files (x86)\Origin Games\Battlefield 4: JUNCTION
Substitute Name: X:\GAMES\Origin Games\Battlefield 4
...
PS C:\> junction64 -s 'C:\Program Files (x86)\Origin\.'
Junction v1.07 - Creates and lists directory links
Copyright (C) 2005-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
No reparse points found.

删除 junction

PS C:\> junction -d 'C:\Program Files (x86)\Origin Games\Battlefield 4'
Junction v1.07 - Creates and lists directory links
Copyright (C) 2005-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
Deleted C:\Program Files (x86)\Origin Games\Battlefield 4.

打开 Origin 开始玩游戏。