Saber 酱的抱枕

Fly me to the moon

01/14
2015
软件

使用Junction创建硬链接

Junction是微软出品的硬链接管理工具,下载之后可以把junction.exe扔到c:\system32文件夹下以方面使用,但是它只能在ntfs格式的文件系统中使用。 查看下载页面

硬链接目前我用不到,但是以后未必用不到,所以先熟悉了一下。现在假设有个软件,它读取和生成的文件都只能储存在c:\test文件夹下,但是由于这个文件夹可能会占用很大的空间,所以我想把这些文件放在D盘。这时候就可以用硬链接来处理(实际上你可以对C:\WINDOWS\Installer这个目录做硬链接处理,如果你够胆大的话。)。

首先,在D盘下建立test文件夹,而在C盘,不需要手动创建test文件夹。之后运行junction工具就可以了:

使用Junction创建硬链接的操作

命令语法是"junction 目标文件夹 源文件夹"。第一次运行junction工具操作时会提示你接受一个协议,同意就行,后面都不会再出现了。

使用Junction创建硬链接的操作

如上图就是创建硬链接成功了。

junction在c盘下会自动创建test文件夹,打开后内容就是d:\test内的内容。硬链接文件夹的图标是快捷方式的图标,但是属性却和快捷方式不同,就像是C盘下普通文件夹一样:

使用Junction创建硬链接的操作

用dir命令可以看到它有着junction属性,也能看到它链接到的目录。

使用Junction创建硬链接的操作

我们向c:\test文件夹内写入一个文件,会发现它同时会出现在d:\test下。

使用Junction创建硬链接的操作

c:\test的属性中会显示它占用的空间大小,但实际上它并不占用C盘空间。我们搜索这两个文件夹中的文件,会发现实际上它只在源文件夹中存在:

使用Junction创建硬链接的操作

在两个文件夹中的任意一个文件夹中对文件进行操作,文件变更都是同步的。这点很好理解。对文件夹进行操作的话,只需要注意源文件夹不要改名或者删除就行了,否则链接就打不开了:

使用Junction创建硬链接的操作

硬链接生成的文件夹可以随意改名。但是有一个要注意的地方是:如果把硬链接生成的文件夹删除,源文件夹不会受到影响。这点和网上一些junction教程中的说法不同,但我自己验证出来是这样的。

其他的一些事项:

同一文件夹位置可以被多处空文件目录连接;
创建硬链接时使用不同的文件夹名字也是可以的,例如下面的例子:
使用Junction创建硬链接的操作
如果想要通过junction来解除链接关系,可以对生成的目录执行命令,例如:junction -d c:\test

使用Junction创建硬链接

  1. 空水灵兽
    UnknownUnknownUnknownUnknown

    mklink工具的话应该会更强大一点,不过快捷方式、符号链接、软连接、硬链接每个都有他们不同的特性,针对源文件复制删除操作的,和链接符号本身的复制移动(可以用XCOPY复制移动),以及绝对路径和相对路径问题,总之比较复杂,不过知道怎么用就好,没必要深究。

    回复
    1. saber酱 文章作者
      UnknownUnknownUnknownUnknown

      那么这个东西存在的意义是什么,for xp?而且这个junction只能创建文件夹之间的硬链接。。。那我岂不是又被坑了 <img src="http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/15/j_org.gif" />

      回复
    2. saber酱 文章作者
      UnknownUnknownUnknownUnknown

      我试了下,有两个问题:<img src="http://saber-img.qiniudn.com/mklink1.jpg" />第一,是不是不能跨磁盘<img src="http://saber-img.qiniudn.com/mklink2.jpg" />第二,是不是不能对目录创建硬链接

      回复
      1. 空水灵兽
        UnknownUnknownUnknownUnknown

        Win7的话直接用mklink可以,硬链接只能对文件操作,不能对文件夹操作,而且不能跨分区,当然分区都不可以跨,磁盘自然也不行了;你可以用/D(专门为文件夹,缺省值的话是对文件的)创建符号链接或者用/J(只能对文件夹)创建软连接,软连接就可以跨分区,但是不可跨磁盘。 <img src="http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/0b/tootha_org.gif" />

        回复