![]() |
學校地址:湖南省 長沙市 雨花區 車站南路紅花坡路口 |
![]() |
學校地址:湖南省 長沙市 雨花區 車站南路紅花坡路口 |
windows系統文件我們可以通過資源管理器查看,通過資源管理器可以非常直觀地了解到windows目錄結構。如果你想要知道這個目錄有多大,直接右鍵屬性就能很清晰地了解。但是如果你用同樣的方式去查看windows7或者windows vista,顯示出來的數據可能就和真實的數據有所差別。這個是為什么呢?
其實微軟在設計windows7和windows vista時使用了NTFS文件系統的特性之一:硬連接(Hard Link)來實現WinSxS機制。
安裝過vista和win7的朋友都知道,系統盤必須保證是NTFS格式,微軟官方提供的解釋有以下幾點:
系統文件保護所需
各種安全保護機制,如MIC所需
winSXS所需
...
關于 后一點的WinSXS所需,微軟沒有提供相關資料說明,不過這個也是Windows Vista / Windows 7 系統需要NTFS文件系統的一個條件,因為只有在 NTFS 文件系統上面,才能實現硬連接機制,也才能達到優化Windows目錄占用磁盤空間的目的。
一般的快捷方式是創建一個LNK文件,在這個LNK文件里面描述了目標文件/目錄的屬性,資源管理器或者其他文件管理工具利用SHELL32.DLL里面的API函數獲得這個LNK文件所指向的文件/目錄,從而進行訪問。
硬連接:是一種基于文件系統級別上的針對文件的快捷方式,基于文件系統級別的含義就是說,只要文件系統啟動了,那么對應的快捷方式也就生效了。換句話說,這種連接是常存的,因為文件系統是必須要隨機啟動的。
硬連接是NTFS文件系統特有的屬性之一,在Linux下面,也有類似的機制。硬連接適用于在同一個卷的文件級別,硬連接是不能跨卷的。
Windows Vista / Windows 7 自帶了創建硬連接的命令:mklink.exe,利用這個命令,我們可以給指定的文件創建硬連接:
下面的命令將在link.txt和source.txt之間建立硬連接關系
C:\Users\Smallfrogs\Desktop>mklink /h link.txt source.txt
為 link.txt <<===>> source.txt 創建了硬鏈接
注 意上面的例子:link.txt本是一個不存在的文件,但是當執行完mklink命令以后,link.txt文件也就被創建了。其實,link.txt是一個虛假的文件,它是在文件系統層面上對source.txt文件的一個映射,而link.txt是不占硬盤空間的。
關于硬盤空間的占用問題,是這樣測試的:
1、給硬盤劃分一個新分區,空間只有2GB;
2、在這個分區的test目錄里面新建了一個1.9GB大小的文件,此時剩余空間是0.1GB;
3、用mklink命令給這個1.9GB大小的文件建立了一個硬連接;
4、檢查這個分區的剩余空間,還是0.1GB,但是如果用資源管理器看test目錄的屬性,會發現有2個文件,總大小是3.8GB(整個分區才2GB,能夠容納3.8GB大小的文件嗎?顯然不可能了)。
還是針對上述的例子,如果我們把原始的文件 source.txt 刪除以后,link.txt文件還是會繼續存在的,且內容就是source.txt的文件內容。也就是說,我們刪除source.txt,實際上刪除的僅僅是這種連接關系,文件本身還是沒有被操作的。
關于硬連接, 后一個需要介紹的內容是:當硬連接建立以后,硬連接雙方任何一個對象被修改,都會造成對應的連接對象被修改。例如上面的例子:如果修改了 link.txt,那么source.txt文件也會同步被修改,反之亦然。這一點和SHELL層面的快捷方式不同,SHELL層面的快捷方式文件 LNK 僅僅是一個指示關系,修改LNK文件并不影響LNK文件指向的對象,修改LNK文件指向的對象也不會影響LNK文件。
|