NTFS重解析點

NTFS重解析點(英語:NTFS reparse point),微軟官方也譯重分析點、重新解析點、重新分析點,是NTFS檔案系統中的一種對象類型。它在Windows 2000及之後版本中的NTFS v3.0及以上版本中可用。重解析點提供一種擴展NTFS檔案系統的方法。一個重解析點包含一個重解析標籤和數據,檔案系統過濾器(file system filter)可以按標籤解讀它。微軟提供了幾個默認標籤,包括NTFS符號連結、NTFS目錄交接點和NTFS卷掛載點。另外,重解析點在Windows 2000的分層存儲系統中作為已移動檔案的占位符。它還可以作為硬連結,並且不限於同分卷的檔案:可以指向任何本地分卷中的目錄。

基本介紹

  • 中文名:NTFS重解析點
  • 外文名:NTFS reparse point
  • 領域:計算機
設計,軟連結,硬連結,特性,卷掛載點,目錄交接點,符號連結,分散式連結跟蹤(DLT),單實例存儲(SIS),分層存儲管理(HSM),原生結構化存儲(NSS),編程解析,

設計

一般情況:
  • 硬連結:連結到一個檔案(MFT記錄)。數據會保持可用,只要有至少一個指向它的連結存在。
  • 軟連結:連結到檔案名稱(檔案路徑)。

軟連結

Windows Vista支持新的符號連結能力,它取代Windows 2000和Windows XP中的目錄交接點。它的設計目的是幫助遷移和UNIX作業系統的應用程式的兼容性。不同於目錄交接點,符號連結也可以指向一個檔案或或遠程SMB網路路徑。此外,NTFS符號連結的實現提供了跨檔案系統的連結支持。但是,啟用跨主機的符號連結功能需要遠程系統也支持它,這使支持性限制在Windows Vista及更高版本的Windows作業系統。
  • NTFS符號連結(SYMLINK):本地或遠程,相對或絕對SMB檔案或路徑。啟用跨主機符號連結需要遠程系統也支持它,這使支持性限制在Windows Vista及更高版本的Windows作業系統。Windows Server 2008使用軟連線把\Users\All Users\ -> \ProgramData\重定向。符號連結可以指向不存在的目標,因為作業系統不會檢查目標是否存在。使用mklink或mklink /D時,相對符號連結僅限於單個卷。
  • 目錄交接點,也稱軟連結:可用於同一台計算機的同一個卷或不同卷的目錄的連結。不能用於對檔案的連線。底層是用重解析點實現。使用mklink /J創建 junction 點後,使用Windows資源管理器刪除它時,如果使用了Shift+Delete,將立即刪除目標檔案 (Windows 2000/XP/2003)。del my_junction命令不應該使用,因為它會刪除目標目錄中的所有檔案。在Windows Vista及更高版本中,使用junction刪除目錄交接點是安全的。
  • 卷裝載點(Volume Mount Points):卷裝載點和前2者類似,只是更進一層:它能創建對整個卷的連結。
  • 遠程存儲伺服器(Microsoft Remote Storage Server):Windows 2000的這個特性能利用一些規則來移除NTFS卷上不常用的檔案,放到存檔介質里(比如CD-RW或磁帶)。當它把檔案移出到“線下”或“半線下”的存儲介質上時,RSS自動創建指向這個存檔檔案的重解析點,以備日後使用。

硬連結

  • NTFS硬連結:從Windows NT 4開始:同一驅動器上的檔案,有多個路徑指向它。從Windows 2000開始,Windows API包括一個CreateHardLink()函式來創建硬連結,並且 DeleteFile() 可以移除它們。所有Windows NT版本都可以使用GetFileInformationByHandle()來確定一個檔案已關聯的硬連結數量。硬連結需要NTFS分區。運行在Windows上的類Unix仿真或軟體兼容層(如Cygwin和基於UNIX應用程式的子系統)允許在Windows上使用POSIX接口。大多數現代作業系統不允許硬連結目錄以避免無限遞歸目錄;而且,硬連結目錄可能導致父目錄的條目不一致;通常使用符號連結和NTFS目錄交接點達到此目的。硬連結只能對同一檔案系統上的檔案創建。如果需要創建到另一檔案系統的連結,應該使用符號連結。硬連結可以使用mklink /H命令創建。
硬連結使用與原檔案相同的MFT記錄。添加一個硬連結會創建一個新的檔案名稱屬性並增加硬連結計數器(每個新創建的檔案+1)。刪除一個硬連結會移除相應的檔案名稱並將硬連結計數器-1。當計數器歸零時,檔案系統將刪除該檔案、釋放其占用的磁碟空間及其MFT記錄。所有名稱屬性是獨立的,因此刪除、移動或重命名檔案不會影響其他硬連結。

特性

卷掛載點

NTFS卷掛載點類似Unix掛載點,將另一個檔案系統的根附加到一個目錄。在NTFS中,這允許額外的檔案系統不逐一占用驅動器號(如C:、D:)並掛載。
如果一個卷被掛在到另一個卷的現有目錄上,該目錄以前列出的內容將被隱藏,已掛載卷的根目錄將取代它。已掛載卷仍然有自己單獨分配的驅動器號。檔案系統不允許卷被手動互相掛載。卷掛載點可以持久或非持久存在,兩者區別是系統重啟後是否會自動重新掛載。
已掛載卷可能使用非NTFS的檔案系統,並可能有自己的安全設定和根據遠程檔案系統策略重新映射的訪問許可權。

目錄交接點

目錄交接點類似卷掛載點,但引用目標為檔案系統中的其他目錄而非其他卷。舉例來說,目錄C:\exampledir有一個目錄junction屬性,其包含到D:\linkeddir的連結,因此當它被用戶模式的應用程式訪問時,將會自動引用D:\linkeddir目錄。此功能在概念上類似Unix中對目錄的符號連結,除了NTFS中的目標必須始終是另一個目錄(典型的Unix檔案系統允許符號連結的目標是任何類型的檔案)。
目錄交接點(可以在命令行提示符中使用MKLINK /J junctionName targetDirectory創建,以及用RMDIR junctionName移除)是持久的,並在伺服器側解析,它們與本地檔案系統或掛載內容所在的父卷共享相同的安全領域;不過目錄交接點本身可能有不同的安全設定。取消一個目錄交接點連結不會刪除目標目錄中的檔案。
某些目錄交接點在Windows Vista上已默認安裝,目的是保證對以前Windows版本的兼容性,例如系統分區根目錄中的Documents and Settings就是連結到同個卷根目錄中的的Users物理目錄。不過它在默認情況下是隱藏的,並且設定了安全設定以要求Windows檔案資源管理器拒絕在外殼和大多數應用程式中打開它,除了本地內置的SYSTEM用戶或本地管理員組(這兩個用戶帳戶用於在系統中安裝軟體)。這個額外的安全性限制是為了避免用戶誤入此目錄和看到、誤以為並刪除明顯重複的檔案。目錄交接點的語義不同於硬連結,對目標內容和引用容器本身都不存在引用計數。
目錄交接點是一種軟連結(它們可以持久存在,哪怕目標目錄被刪除),可以作為一種有限的符號連結使用(對目標位置有所約束),但它是一個最佳化的版本,重解析點的設計允許更快地處理它,比NTFS符號連結具有更小的系統開銷,並且可以在伺服器側解析(當發現於遠程已分享資料夾時)。

符號連結

符號連結(或軟連結)在Windows Vista中被引入。符號連結在客戶端側解析。因此當符號連結被共享時,目標受到客戶端而非伺服器的訪問限制。
符號連結的創建可以指向檔案(用MKLINK 符號連結 目標檔案創建)或目錄(用MKLINK /D 符號連結 目標目錄創建),但不同於Unix符號連結,創建連結時必須提供連結的類型。符號連結創建時不需要目標存在或可用:在符號連結可用時才會檢查可用性,NTFS也會在那時檢查類型(檔案/目錄)是否正確;如果現有目標的類型錯誤,將會返回“找不到”錯誤。
它們還可引用遠程主機上的已分享資料夾或檔案,以及共享項目錄中的子目錄:它們的目標不會立即掛載,只在使用 OpenFile()或CreateFile() API時臨時請求。

分散式連結跟蹤(DLT)

分散式連結跟蹤允許應用程式跟蹤檔案、捷徑和OLE連結,即使它已被重命名或移動到同個機器、域或工作組中的另一個分卷。跟蹤實現為一個系統服務,使用對象標識符(OID)的索引存儲在一個元檔案中。當應用程式請求跟蹤一個檔案或目錄時,跟蹤服務創建指向該檔案的OID記錄。在檔案被重命名、複製或移動到一個NTFS v3分卷時,對象ID也將被複製。因此跟蹤服務最終能找到目標檔案。

單實例存儲(SIS)

當多個目錄有不同但類似的檔案時,這些檔案可能有著相同的內容。單實例存儲允許相同的檔案被合併為一個檔案,並創建一個到合併後檔案的引用。SIS包括:一個檔案系統篩選器,它管理複製、修改和合併檔案;一個用戶空間服務(或稱groveler),它搜尋相同並需要合併的檔案。SIS的主要設計目的是遠程安裝的伺服器,其存在的多個安裝鏡像可能包含許多相同的檔案,SISK可以合併這些。不同於硬連結,每個檔案仍然是不同的;對一個副本的更改不會改變其他的副本。這類似於寫時複製,但那個技術是記憶體複製並未真正完成,直至副本被修改。

分層存儲管理(HSM)

分層存儲管理是一種轉移檔案的手段,它根據檔案熱度將數據在普通與昂貴的存儲介質間轉移。在下次訪問該檔案時,該檔案的重解析點會確定所需的存儲介質並從那裡檢索。

原生結構化存儲(NSS)

NSS原是ActiveX文檔存儲技術,它已被微軟停止使用。它允許ActiveX文檔存儲在ActiveX內部使用的多流格式中。NSS檔案系統篩選器可以被載入並處理透明傳輸到套用該程式的多個流,並在檔案被傳輸到非NTFS格式的磁碟卷時將多個流變為單個流。

編程解析

重解析點tag是個DWORD,為獲取它,使用FindFirstFile函式,如果輸出參數的dwFileAttributes結構域包含了FILE_ATTRIBUTE_REPARSE_POINT 屬性,那么dwReserved0結構域就是重解析點的tag值。
為判斷檔案系統是否支持重解析點,調用GetVolumeInformation函式檢查FILE_SUPPORTS_REPARSE_POINTS比特標誌。
DeviceIoControl函式可以設定、修改、獲取、刪除重解析點。
GetFileAttributes函式可判斷一個檔案或目錄是否包含重解析點。
CreateFile函式帶著FILE_FLAG_OPEN_REPARSE_POINT,可以打開一個重解析點檔案。

相關詞條

熱門詞條

聯絡我們