NTFS 新特性——用Junction链接文件目录

 

编者按:你有没有遇到过,磁盘分区不合理,文件分类时导致某一个磁盘不够用,但又不想重新分区或者更该分区大小呢?你有没有使用云存储软件时,希望跨盘存储/备份文件呢?如果有,那么你就找对地方了!下面文章就叫你如何实现这些功能!

 

许多人是从VistaWIN7系统里发现这个现象:

系统下文件夹"Documents and Settings" "Users"总是一样的。

并且不管从哪个文件夹改动文件,另一个文件夹里面的文件也会有同样的变动。大多数用户会认为是VistaWIN7的系统功能。

认为它们两个文件夹互为备份的(至少算我1个)。但这是错误的认识。

打开DOS提示符,cd至该目录,使用dir 命令查看文件就会有发现了。


 

那么,什么是Junction属性呢?

微软在新版操作系统里,引进了软快捷方式这个概念。(好像是从windows内部版本6.0开始的(windows vista)NTFS文件系统,就有Junction功能,能够用空目录 "链接" 到其他文件夹目录。类似于unix/linuxlink,它可以把一个目录"映射"到其他的位置。(或者可以理解为特殊的快捷方式,把文件夹剪切转移后,在原来的位置用相同名字的快捷方式指向转移后的文件夹目录)

对于Vista及以上本本操作系统的用户,可以使用系统自带的mklink命令实现,而XP用户这可以使用junction.exe软件来实现。

两种方式都可以在NTFS系统中创建和删除一个junction目录,该目录和原始目录的内容一模一样,如果你对其中任意一个文件夹里面的内容做出修改,另一个也会相应的改变。junction目录是NTFS文件系统的一个特性。junction目录实际上是原始目录的一个快捷方式。在源文件夹内的更改会映射到虚拟文件夹上,在虚拟文件夹内更改的内容,实际上是在原文件架上的操作。因此操作任何一个目录,都会同步到彼此,并且创建junction目录不会占用虚拟文件夹所在磁盘的额外存储空间。

mklink命令:是win7vista系统自带的命令。用于创建符号链接,符号连接不仅可以当作快捷方式使用,最重要的是重定向链接符可以被程序读取然后重定向真正的位置,这是快捷方式无法做到的。其作用类似于junction。该命令只支持NTFS

junction.exeSysinternals 出品的命令行工具,其可以创建和删除符号链接。该工具只是在 NTFS 驱动器中创建和删除 junction 目录,自身并不会驻留内存占用系统资源,执行完毕会立即退出。junction目录是NTFS文件系统的一个特性,因此,只适合在NTFS文件系统上运行。

Psjunction.exeSysinternals软件套装里的一个实用小软件。详细介绍及下载请阅读以下链接:

微软极品Sysinternals Suite工具包使用指南

 

那我们怎么才能实现这个功能呢?下面详细介绍,并通过若干实例想大家讲解该用法。

 

Junction的语法有三类:

(将junction.exe复制到system32,然后用cmd运行junction命令即会出现以下信息)

 

usage: junction [-s] [-q] <file or directory>

-q Don't print error messages (quiet)

-s Recurse subdirectories

 

usage: junction <junction directory> <junction target>

example: junction d:link c:windows

 

usage: junction -d <junction directory>

 

我们最常用的是后面两个:

 

用法一:创建与"源文件夹"同步的"虚拟文件夹"。

语法:junction "虚拟文件夹" "源文件夹"

语法解释:源文件夹是指实际存放文档的文件夹,虚拟文件夹是指使用junction命令创建的虚拟文件夹,实际上只是一个快捷方式。


示例: junction "C:userDocument and SettingsAdministratorMy Documents" "d:My Documents"

 

用法二:删除已经创建的虚拟文件夹,或者说,删除创建的源文件夹的快捷方式。

语法:junction -d "已经简历的虚拟目录"

语法解释:读者可能好奇,为什么不直接删除虚拟文件夹呢?因为这样对文件安全存在一定风险,后文会提到。

示例: junction -d "d:My Documents"

 

下面通过若干实例来增加大家对该用法的使用,大家可以根据以下示例,举一反三,充分开发大脑,利用该特性。

 

示例一:使用Junction命令实现云盘的多文件夹、跨磁盘同步

 

以百度网盘为例,假如你的百度同步盘同步文件夹为:"D:百度云同步盘",那么该文件夹内所有文件会被同步到百度云盘内。

现在,你D盘空间为100G,但是已使用90G,仅剩10G空间,而你想把位于E盘的"E:软件库" (该文件夹大小为60G),也同步到网盘。如果直接剪切"E:软件库"到"D:百度云同步盘",那么显然D盘空间(仅剩10G)显然不够用。

假如你的电脑系统为XP,因此,我们利用junction.exe软件,在"D:百度云同步盘"文件夹中创建名为"软件库"的(虚拟)文件夹,实现与"E:软件库"映射,达到跨盘同步的目的。

 

创建步骤:

1.下载junction.exe,并将junction.exe复制到系统盘的 C:WINDOWSsystem32目录

2.运行-cmd,打开cmd界面后,输入:junction "D:百度云同步盘软件库" "E:软件库"

注意:此步骤中,"D:百度云同步盘"文件夹内,不能已经存在"软件库"这个文件夹,如果已存在,可以先剪切出来,等建立虚拟目录完成后,再将原来文件夹的文件剪切到虚拟文件夹内。

3.此时,"E:软件库"就被映射到"D:百度云同步盘软件库"文件夹了。

当你打开"D:百度云同步盘软件库"时,会自动跳转到"E:软件库"文件夹。你在两个中任一个文件夹中的更改,都会同步到另一个。

 

删除JUNCTION目录(非常重要!):

如果想要删除JUNCTION目录,不需要再进行同步时,需要使用命令行junction –d 删除JUNCTION目录,或者直接右键菜单删除JUNCTION目录。这样删除JUNCTION目录,不会删除原始数据。

但切记:一定要直接在虚拟目录的最上级目录上操作!不得在虚拟目录里的子目录操作!例如,你想解除D:百度云同步盘软件库对E:软件库的映射,有两种方法,一是,直接右键删除D:百度云同步盘软件库,二是使用命令行junction –d  "D:百度云同步盘软件库",删除虚拟目录。删除后,虚拟目录消失,值得注意,这样会造成你网盘里的该目录也被删除。如果你只是想本地删除,网盘中保留,请在网盘软件的设置里面(同步完后)忽略对该文件夹的同步即可。

也不可因为搞混了哪个才是原始目录,而在原始目录上删除操作,就会将数据彻底删除,JUNCTION目录将访问不到数据(WIN7下一样),因此,在不确定是否是JUNCTION目录还是普通目录的情况下,建议首先使用Dir命令查看文件夹属性,仔细查看后,再进行删除操作。

 

 

示例二:改变MSI软件的安装源目录C:WINDOWSInstaller

 

如果你电脑中大量安装微软系统更新、微软软件或者其他msi软件,那么你的C:WINDOWSInstaller文件夹会变的巨大无比,给你的c盘空间造成挑战。但它们只有在安装、升级或卸载程序时才有使用。

 

里面的文件又不能随便删除,否则有可能会出现无法正常修复安装、升级安装或卸载程序。

 

这时Junction就派上用场了:

 

使用方法:

1、剪切C:windows下的"Installer"文件夹到其他分区(因为虚拟目录的父目录不还能存在需要虚拟的文件夹名),例如剪切到D: ,文件夹新位置变成D:Installer

2、打开DOS提示符,运行junction.exe

    运行junction.exe前,把它复制到%SystemRoot%system32目录下的话,打开DOS提示符后就可以直接使用junction 命令了

    否则要用CD 命令切换到junction.exe文件所在目录

    假如junction.exeE:123456 的话,输入E: (回车),再输入CD E:123456 (回车)

3、建立链接,在CMD窗口中输入:
   junction C:WINDOWSInstaller D:Installer

    这样就会建立空目录C:WINDOWSInstaller ,并且把它链接到了D:Installer

    即打开C:WINDOWSInstaller 后就会自动链接到D:Installer (但此时地址栏显示仍是C:WINDOWSInstaller

    而打开D:Installer,就是进入自身文件夹位置。两处打开目录都是进入到文件夹位置D:Installer

注意:创建链接后,记得马上把空文件夹C:WINDOWSInstaller,属性改回成"隐藏"

         否则重启电脑后,当系统发现C:WINDOWSInstaller 不是隐藏的,就会把它删除,然后再新建一个同名的隐藏文件夹

         被删除文件夹的话就杯具了,被链接的文件夹里面的文件也会全部被删除,只保留被链接的文件夹。

同一文件夹位置可以被多处空文件目录连接,例如执行下面命令:

junction C:123456 D:Installer

就会建立空目录 C:123456 ,它也是链接到D:Installer

这样 C:WINDOWSInstaller C:123456 都链接到了D:Installer

4、解除链接,不能直接用del或在资源管理器中删除链接目录(否则被链接文件夹里面的文件也会被删除),要使用:
  junction -d C:WINDOWSInstaller

    即可解开C:WINDOWSInstallerD:Installer之间的链接,并安全删除空目录C:WINDOWSInstaller

NTFS文件系统的Junction功能,给我们一个解决文件夹转移的新思路。

许多系统文件夹不能移动,但文件夹所在分区空间又不够用。这时用Junction功能就可以轻松解决问题。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据