ADVERTISEMENT
部分使用者會利用「Junction Directory」的方式,來將系統碟裡的目錄指定到其它硬碟。「Junction Directory」指的是NTFS系統特有的目錄指向方式,事實上不只是目錄,連檔案、或者是檔案系統裡的特定元件也都能使用分身來連結,在儲存資源的共享上有很大幫助。
連結就是進入點
與其說是分身,不如用「進入點」來形容會比較正確且貼切。不管是目錄或檔案,在硬碟上都有其實體擺放位址,這些位址在作業系統的層面裡,會由檔案配置表來紀錄,比如NTFS 的核心MFT等等,讓作業系統或應用程式呼叫並對照到實際的存放區塊上去找資料。
簡單的說,如果在硬碟裡有1個目錄為「DIR1」,裡頭有個檔案是「File1.txt」,事實上對硬碟或其它儲存裝置來說,跟本不存在兩者間的對應關係,因為file1.txt只是硬碟上存在於1個或多個區塊(Block)上的資料而已。我們需要檔案系統來約束檔案與目錄間的依存性質、也就是管理這些資料該如何被作業系統或應用程式存取,至於資料本身與檔案系統並無太大干係。
回到本文主軸。結合了主流檔案系統的作業系統通常會提供不同的進入點來存取這些資料,比如Windows常見的「捷徑」、Mac OS X使用的「替身」以及Hard link、Soft link、Symbol(ic) link、Symlink等等更深入的玩法,都是決定資料存取進入點的不同化身,儘管不同系統間的解讀及實作方法可能存在些許差異。
軟連結與硬軟結的資料對應關係
硬連結直接透過分割區上的配置表來對應資料,只能在本機硬碟使用,無法跨分割。軟連結要再透過硬連結來存取硬碟上的資料,可跨網路。
捷徑只是個蟲洞檔
不討論檔案系統底層的資料記錄方式,我們從實際應用面就能分辨出這些模式的不同。先說最簡單的捷徑及替身,嚴格看來,它們都只是一個帶有重新導向資訊的檔案,用來連結到某個文件、執行檔或目錄等,充其量只是方便使用者快速存取或到達某些資源的蟲洞,不一定會被部分應用程式或作業系統在進行特定的工作時所接受。
比如:你不能把整個Program Files資料夾搬到另一個地方,然後放個捷徑在系統碟底下去導向,因為捷徑對Windows來說只是1個副檔名為「.lnk」的檔案,作業系統讀不到特定的目錄就是讀不到,不可能會再去解讀捷徑裡的導向資訊來尋找真正的目錄位置。
再舉個例子:Word支援開啟捷徑來從真正的位置讀取文件,但是當文件中帶有外連圖片檔時,你不能把本來的圖片檔案換成捷徑,光是副檔名的處理就會產生問題。這時候就得靠某幾種型態的Soft Link或Hard Link來達成。
Hard Link是資料的真正連結
要理解Hard Link並不難,就拿前文所提的例子來用吧!假設我們在C槽裡的「DIR1」目錄建立了1個「File1.txt」,那麼「C:\DIR1\File1.txt」就是進入到檔案配置表實體資料存放位置的硬連結(路徑的表現方式可能有很多種)。指向到同樣資料的硬連結可以不只1個,但是一定要有1個,不然這個檔案就等於消失了,也就是失去了進入點,儘管資料可能還留存在硬碟上。
對於使用者及透過檔案系統存取資料的應用程式,硬連結代表的就是實體檔案,它在檔案總管裡看起來就是個實體檔案。如果對1個5MB的檔案建立硬連結,那麼這個硬連結不管在檔名、副檔名、縮圖、容量或者是任何屬性上都可以與原始檔案(或者說是第一個硬連結)一樣,不過實際上並不會真的佔用同樣的硬碟空間,頂多消耗掉幾KB來儲存對照資訊而已。
也因為如此,硬連結比捷徑好用很多,用來騙應用程式最適合。然而硬連結不是備份,存取任何硬連結產生的變更都會影響到所指向的同一份資料,被不知情的使用者誤會成有2個相同的檔案就不好了。
有利必有弊,因為Hard Link指向的是每個NTFS磁碟區獨佔的檔案配置資訊,所以Hard Link無法跨磁碟區跟檔案系統。你不能把C:\123.txt指向D:\123.txt,這是很合理的,因為C槽的配置表本就不會去記錄D槽的檔案資訊,NTFS也更不可能去儲存HFS+的配置表。
▲軟連結在檔案總管裡很容易就能識別出來,硬連結則是要靠fsutil指令來檢視。需要注意的是除了捷徑外,軟連結不會被視為檔案處理,所以無法複製。
Soft Link連結到Hard Link
Soft Link就比較複雜了,因為它可以衍伸出的應用比較廣泛,把它比喻成「透明的捷徑」是不錯的說法。Soft Link可以完全不存在,有Hard Link就夠了,不過Soft Link同時也能突破Hard Link一些做不到的先天限制,比如跨檔案系統、或者是跨硬碟等,應用上比較靈活。
對某些程式來說,Soft Link與捷徑的處理方式是相同的,尤其是Mac OS X的Finder,兩者對它來說是一模一樣的東西,但是底層的FreeBSD系統就不會這麼認為。而在Windows環境下,Soft Link大致上可分為2種不同的應用模式:
NTFS Junction
比較舊型的指向方式,用來將某個資料夾連結到不同的資料夾,像是將C:\Program Files做為D:\Program Files的進入點。限制是無法處理網路資料夾及檔案。
Symbolic Link
更為先進的版本。它能用檔案連立進入點,而且沒有網路資料夾(SMB)的限制。
如何建立以上兩種Soft Link,查一下「mklink」這個指令就有詳細說明。有趣的是,既然Symbolic Link比較好用,為何還要存在NTFS Junction呢?其實在本機環境,兩者在建立資料夾的連結時是沒差的。但是換到了網芳,NTFS Junction會將目的資料夾掛載到本機上,Symbolic Link則不會,主要是在處理路徑上的差異。
沒有把握別亂設
比對一下Hard Link與Soft Link,我們可以這麼想:如果有3個門可以進入大樓,那麼Hard Link就等於是前門、側門與後門,三者的等級是平行的,只要留1個門就能進入,頂多繞一下路而已,但是你不可能經由任何一個門進入另外一棟大樓(又不是小叮噹)。Soft Link則是到達這些門的不同捷徑,只要另一棟大樓允許,你就能透過這些捷徑前往,但是如果門沒開,有這些捷徑也沒用。
不管是設定硬連結或軟連結,都是提供系統管理員一個節省實體儲存資源的好方法。只是此舉並非萬能,作業系統有些目錄是怎樣都不給設、或是設了也沒用的,如C:\Windows;而前面提到的C:\Program Files雖然能給設、設定也了能生效,但因為它是系統目錄、牽扯的權限十分複雜,也不是靠一個指令就能搞定,過程非常費工。
最重要的,是一般人跟本不會查覺到這些設定,因為從檔案總管跟本看不出來。即使你就是管理員,也有可能日後忘記做過哪些連結,若把這些分身視為備份是非常危險的。
▲軟連結在檔案總管裡很容易就能識別出來,硬連結則是要靠fsutil指令來檢視。需要注意的是除了捷徑外,軟連結不會被視為檔案處理,所以無法複製。
延伸閱讀:
本文同步刊載於電腦王雜誌
歡迎加入電腦王雜誌粉絲團
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!