NTFS重解析點
NTFS重解析點(英語:NTFS reparse point),微軟官方也譯作重新分析點、重新剖析點、重新分析指標[1],是NTFS檔案系統中的一種對象類型。它在Windows 2000及之後版本中的NTFS v3.0及以上版本中可用。重解析點提供一種擴充NTFS檔案系統的方法。一個重解析點包含一個重解析標籤和數據,檔案系統過濾器(file system filter)可以按標籤解讀它。微軟提供了幾個預設標籤,包括NTFS符號連結、NTFS目錄交接點和NTFS卷掛載點。另外,在Windows 2000的分層儲存系統中,重解析點被用作已移動檔案的預留位置。此外,它也可以被用作硬連結,並且不僅限於指向同分卷中的檔案,還可以指向任何本機分卷中的目錄。[2]
設計
[編輯]一般情況:
軟連結
[編輯]Windows Vista支援新的符號連結能力。它取代了Windows 2000和Windows XP中的目錄交接點。它的設計目的是說明遷移和提升與UNIX作業系統的應用程式的相容性。不同於目錄交接點,符號連結也可以指向一個檔案或遠端SMB網絡路徑。此外,NTFS符號連結提供了跨檔案系統的連結支援。但是,啟用跨主機的符號連結功能需要遠端系統也支援它,這使支援限制在Windows Vista及更高版本的Windows作業系統。
- NTFS符號連結(SYMLINK):本機或遠端,相對或絕對SMB檔案或路徑。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
目錄。[3]此功能在概念上類似Unix中對目錄的符號連結,除了NTFS中的目標必須始終是另一個目錄(典型的Unix檔案系統允許符號連結的目標是任何類型的檔案)。
目錄交接點(可以在命令列提示符中使用 MKLINK /J junctionName targetDirectory 建立,以及用 RMDIR junctionName 移除)是持久的,並在伺服器側解析,它們與本機檔案系統或掛載內容所在的父卷共用相同的安全領域;不過目錄交接點本身可能有不同的安全設置。取消一個目錄交接點連結不會刪除目標目錄中的檔案。
某些目錄交接點在Windows Vista上已預設安裝,目的是保證對以前Windows版本的相容性,例如系統分區根目錄中的Documents and Settings就是連結到同個卷根目錄中的的Users物理目錄。不過它在預設情況下是隱藏的,並且設定了安全設置以要求Windows檔案檔案總管拒絕在外殼和大多數應用程式中打開它,除了本機內建的SYSTEM使用者或本機管理員組(這兩個使用者帳戶用於在系統中安裝軟件)。這個額外的安全性限制是為了避免使用者誤入此目錄和看到、誤以為並刪除明顯重複的檔案。目錄交接點的語意不同於硬連結,對目標內容和參照容器本身都不存在參照計數。
目錄交接點是一種軟連結(它們可以持久存在,哪怕目標目錄被刪除),可以作為一種有限的符號連結使用(對目標位置有所約束),但它是一個最佳化的版本,重解析點的設計允許更快地處理它,比NTFS符號連結具有更小的系統開銷,並且可以在伺服器側解析(當發現於遠端共用目錄時)。
符號連結
[編輯]符號連結(或軟連結)在Windows Vista中被引入。[4]符號連結在客戶端側解析。因此當符號連結被共用時,目標受到客戶端而非伺服器的訪問限制。
符號連結的建立可以指向檔案(用 MKLINK 符號連結 目標文件 建立)或目錄(用 MKLINK /D 符號連結 目標目錄 建立),但不同於Unix符號連結,建立連結時必須提供連結的類型。符號連結建立時不需要目標存在或可用:在符號連結可用時才會檢查可用性,NTFS也會在那時檢查類型(檔案/目錄)是否正確;如果現有目標的類型錯誤,將會返回「找不到」錯誤。
它們還可參照遠端主機上的共用目錄或檔案,以及共用專案錄中的子目錄:它們的目標不會立即掛載,只在使用 OpenFile()
或 CreateFile()
API時臨時請求。
分散式連結跟蹤(DLT)
[編輯]分散式連結跟蹤允許應用程式跟蹤檔案、捷徑和OLE連結,即使它已被重新命名或移動到同個機器、域或工作群組中的另一個分卷。[5]跟蹤實現為一個系統服務,使用對象識別碼(OID)的索引儲存在一個元檔案中。[6]當應用程式請求跟蹤一個檔案或目錄時,跟蹤服務建立指向該檔案的OID記錄。在檔案被重新命名、複製或移動到一個NTFS v3分卷時,對象ID也將被複製。因此跟蹤服務最終能找到目標文件。
單實例儲存(SIS)
[編輯]當多個目錄有不同但類似的檔案時,這些檔案可能有着相同的內容。單實例儲存允許相同的檔案被合併為一個檔案,並建立一個到合併後檔案的參照。SIS包括:一個檔案系統篩選器,它管理複製、修改和合併檔案;一個使用者空間服務(或稱groveler),它搜尋相同並需要合併的檔案。SIS的主要設計目的是遠端安裝的伺服器,其存在的多個安裝鏡像可能包含許多相同的檔案,SISK可以合併這些。不同於硬連結,每個檔案仍然是不同的;對一個副本的更改不會改變其他的副本。這類似於寫時複製,但那個技術是主記憶體複製並未真正完成,直至副本被修改。[7]
分層儲存管理(HSM)
[編輯]分層儲存管理是一種轉移檔案的手段,它根據檔案熱度將數據在普通與昂貴的儲存媒介間轉移。在下次訪問該檔案時,該檔案的重解析點會確定所需的儲存媒介並從那裏檢索。[citation needed]
原生結構化儲存(NSS)
[編輯]NSS原是ActiveX文件儲存技術,它已被微軟停止使用。它允許ActiveX文件儲存在ActiveX內部使用的多流格式中。NSS檔案系統篩選器可以被載入並處理透明傳輸到套用該程式的多個流,並在檔案被傳輸到非NTFS格式的磁碟卷時將多個流變為單個流。[8]
Windows Vista(及其後)的預設資料夾位置變化
[編輯]與Windows XP(Windows NT 5.x)相比,在Windows 7、Windows 10等作業系統(Windows NT 6.x/Windows NT 10.x)中,存放使用者數據(user data)和系統數據(system data)的預設資料夾位置發生變化。例如,在Windows XP中存放使用者數據的檔案為%SystemDrive%\Documents and Settings;在Windows 7中則為%SystemDriver%\User。這樣的變化無疑對以前應用程式能否在Windows 7下順利執行帶來相容性問題。為了最大程度地保證對以前在Windows XP執行的程式的相容性,在Windows 7中採用了junction points(連接點)技術。通過這個技術,原來在Windows XP下執行的程式對%SystemDrive%\Documents and Settings資料夾下的數據存取操作,能自動地更改到%SystemDriver%\User資料夾。
xp、windows2003中的路徑 | win7、windows2008中的路徑 |
---|---|
\Documents and Settings | \Users |
\Documents and Settings\Default User或%LOGONSERVER%\NETLOGON\Default User | \Users\Default 或%LOGONSERVER%\NETLOGON\Default |
\Documents and Settings\<user>\My Documents | \Users\<user>\Documents |
\Documents and Settings\<user>\My Documents\My Pictures | \Users\<user>\Pictures |
\Documents and Settings\<user>\My Documents\My Music | \Users\<user>\Music |
\Documents and Settings\<user>\Favorites | \Users\<user>\Favorites |
N/A | \Users\<user>\Contacts |
N/A | \Users\<user>\Downloads |
N/A | \Users\<user>\SavedGames |
\Documents and Settings\<user>\Application Data | \Users\<user>\AppData\Roaming |
\Documents and Settings\<user>\Local Settings\Application Data | \Users\<user>\AppData\Local |
\Documents and Settings\<user>\Start Menu | \Users\<user>\AppData\Roaming\Microsoft\Windows\Start Menu |
\Documents and Settings\All Users | \Users\Public |
\Documents and Settings\All Users\Start Menu | \ProgramData\Microsoft\Windows\Start Menu |
\Documents and Settings\All Users\Desktop | \Users\Public\Desktop |
編程解析
[編輯]重解析點tag是個DWORD,為取得它,使用FindFirstFile函數,如果輸出參數的dwFileAttributes結構域包含了FILE_ATTRIBUTE_REPARSE_POINT 內容,那麼dwReserved0結構域就是重解析點的tag值。
為判斷檔案系統是否支援重解析點,呼叫GetVolumeInformation函數檢查FILE_SUPPORTS_REPARSE_POINTS位元標誌。
DeviceIoControl函數可以設置、修改、取得、刪除重解析點。
GetFileAttributes函數可判斷一個檔案或目錄是否包含重解析點。
CreateFile函數帶着FILE_FLAG_OPEN_REPARSE_POINT,可以打開一個重解析點檔案。
參見
[編輯]參考資料
[編輯]- ^ https://www.microsoft.com/Language/zh-tw/Search.aspx (頁面存檔備份,存於互聯網檔案館) reparse point
- ^ "Microsoft Windows Vista Client Configuration Study Guide" Wiley Publishing, Inc. 2007 p.285
- ^ Mark Russinovich. Inside Win2K NTFS, Part 1. Microsoft Developer Network. [2008-04-18]. (原始內容存檔於2008-04-13).
- ^ Symbolic Links (Windows). MSDN. [2016-06-13]. (原始內容存檔於2016-02-06).
- ^ 存档副本. [2016-06-13]. (原始內容存檔於2016-03-12).
- ^ 存档副本. [2016-06-13]. (原始內容存檔於2016-03-07).
- ^ Single Instance Storage in Windows 2000 (PDF). Microsoft Research and Balder Technology Group. [2016-06-13]. (原始內容存檔於2016-03-25).
- ^ Saville, John (date unknown).
外部連結
[編輯]- Reparse Point Support in Windows 2000-Based Clusters(頁面存檔備份,存於互聯網檔案館)
- Reparse Points(頁面存檔備份,存於互聯網檔案館) in the Microsoft Developer Network (MSDN) Library