複製鏈接
請複製以下鏈接發送給好友

硬連接

鎖定
硬連接是對於同一文件系統的一個文件的連接,節點是文件存在的唯一標識,在文件系統中是唯一的,但在不同的文件系統則有可能重複。這樣的話,在不同文件系統中作鏈接時,是不能使用ln A B,應該用符號連接,即是軟連接,它只是包含了系統中一個完整的路徑名引用。硬連接就是記錄了文件的地址,你在文件管理器中看到的每個文件都是磁盤裏文件的“硬連接”。當一個文件的所有硬連接都被刪除的時候,該文件佔用的空間才可以被新加入的數據覆蓋。
中文名
硬連接
外文名
Hard-wired
拼    音
yìnglián jiē
注    音
ㄧㄥˋㄌㄧㄢˊ ㄐㄧㄝ

硬連接在Windows下創建硬連接

LINUX、UNIX下面創建硬連接已經“司空見慣”了(上面提到的是Linux裏面的命令),這裏説的是怎麼在Windows下面創建硬連接。

硬連接Windows XP

XP 也有硬連接?沒錯!不過,先聲明,這個僅僅是NTFS才有的。另外要注意的是,硬連接不能跨卷的,簡單的説就是不能在C盤給D盤的文件創建硬連接
XP下面也有硬連接,只是知道的人不多(個人覺得是因為沒有UI,所以知道的人少,但在win7裏面被認為是“新功能”,那是因為WinSxS文件夾中的文件應用了硬連接技術,而讓“硬連接”這一名詞在Win7中名聲大噪。搜索“Win7 硬連接”,大半的結果是説這件事的),所以應用也不廣泛。
創建方法
fsutil hardlink create<新文件名><現有文件名>
比如:
fsutil hardlink create C:\硬連接.txt C:\原文件.txt
這樣C:\原文件.txt就多了一個“別名”:硬連接.txt。
另外,fsutil還有其它很有用的功能,比如,改短名,詳細自己輸入fsutil慢慢看。
上面説的是為文件創建硬連接,能不能給文件夾創建硬連接呢?可以用一個工具——junction.exe,可以用來創建文件夾硬連接,這個可以跨分區——你是否產生了“把D:\TEST 指向 C:\ ,然後再用 fsutil hardlink create D:\test.ini D:\TEST\boot.ini 這個命令來創建跨分區文件硬連接”的想法呢?我試了,失敗,輸出結果如下(因為我的junction剛下載,是一個壓縮包,就用WinMount虛擬成一個盤了。粗體字是系統輸出的,其中包含網址的那行刪掉了):
Z:\>junction.exe d:\test c:\
Junction v1.05 - Windows junction creator and reparse point viewer
Created: d:\test
Targetted at: c:\
Z:\>fsutil hardlink create d:\test.exe d:\test\boot.ini
新鏈接和現有文件必須在同一個捲上。
junction命令還可以把空文件夾刪除掉
D:\>md TestJunctionDir
D:\>junction TestJunctionDir /d
Deleted TestJunctionDir.
如果用於非空文件夾就會出錯:
C:\Temp\test>md TestJunctionDir
C:\Temp\test>dir > TestJunctionDir\test.txt
C:\Temp\test>junction TestJunctionDir /d
Junction v1.05 - Windows junction creator and reparse point viewer
Copyright (C) 2000-2007 Mark Russinovich
Systems Internals
Error deleting TestJunctionDir: ???????
【注意事項】
使用junction做文件夾連接需要注意的是:不能直接在資源管理器裏面刪除文件夾的連接,要用下面的命令來刪除,否則源文件夾裏面的內容也會被刪除切記切記
junction 文件夾連接名 /d

硬連接Vista、Windows 7

Vista和Win7下面,命令簡化了,是mklink,功能比XP中的fsutil強了很多。
MKLINK [[/D] | [/H] | [/J]] Link Target
/D 創建目錄符號鏈接。默認為文件符號鏈接。
/H 創建硬鏈接,而不是符號鏈接。
/J 創建目錄聯接。
Link 指定新的符號鏈接名稱。
Target 指定新鏈接引用的路徑
至於Windows 2000就不清楚了,不過硬連接是NTFS的特性,如果沒有fsutil程序,從XP中複製一個過去應該也是可以的。

硬連接相關工具

硬連接Link Shell Extension

上面介紹的是命令行,有沒有更方便的辦法呢?當然,大家用過右鍵拖動文件嗎?用右鍵拖動文件,會有“複製文件、移動文件、創建快捷方式”等菜單項,要是有“創建硬連接”該多好啊!抱着這種想法搜索了一下,找到了個好東西:Link Shell Extension
這個軟件支持多種語言,其中就包括中文。安裝了這個軟件之後,文件或文件夾右鍵菜單就多了一項“選擇源連接點”——類似常用的“複製”命令,選擇連接點之後,就可以在空白地方點擊右鍵,再選擇“創建連接點”。
也可以用右鍵拖動文件或文件夾來創建連接點,非常方便。
如果選擇的是文件夾,則有三個選項:目錄連接點、硬連接副本、智能副本。這三者的區別如下:
目錄連接點就是上面介紹的junction,不過改進了不少——不會發生上面説的刪除連接點而導致刪除文件的悲劇了。
硬連接副本 硬連接副本
硬連接副本
就是複製一個文件夾結構,並創建所有文件的硬連接
智能副本 智能副本
智能副本
就是創建一個副本,和普通的複製不同的是,“智能副本”把文件夾內部的硬連接關係也複製了。

硬連接命令行工具Ln

功能跟上面的LSE是一樣的,具體使用方法請看其官方網站。
查找重複文件的命令行工具Dupemerge
Dupemerge可以查找硬盤上的重複文件,併為其創建硬連接,以達到節省空間的目的。
需要注意的是,不要將一些軟件中“雷同的”——通常是零字節——配置文件也弄成硬連接了。

硬連接連接的應用

硬連接共用文件、無需複製

如果你有幾個版本的Eclipse的話,用硬連接來共享插件,那就可以省下很多硬盤空間了。
至於怎麼找重複文件,推薦使用AcuteFinder(或者用上面提到的Dupemerge),這個軟件可以導出文件列表,然後在excel裏面編輯生成硬連接的批處理文件。保存運行就好了。

硬連接放到一塊、方便管理

把需要備份的文件創建硬連接放到一個文件夾(比如C:\Backup),在重裝系統的時候就把Backup文件夾複製到其它盤就行了。

硬連接同步軟件、請靠邊站

只要你需要同步的文件放在同一個NTFS分區,就可以對同步軟件説Byebye了。直接添加相應的硬連接就可以實現同步的功能了。
不在同一個分區的話也可以用“文件夾連接”來實現同步的功能,不過前提還是要NTFS分區。