Windows NT中的NTFS知識講解
Windows NT引入的新概念
(1)NTFS(Windows NT File System):Windows NT采用的新型文件系統。可提供安全存取控制及容錯能力,在大容量磁盤上,它的效率比FAT高。
(2)共享:對網絡資源設置一定的權限許可,沒有得到權限許可,就無法訪問網絡資源。
(3)用戶賬戶(User Account):要想使用網絡資源,必須有用戶賬戶。Windows NT對用戶和服務程序,都要求提供合法賬戶。專為應用程序或服務進程創建的賬戶即服務賬戶,在系統啟動時,服務進程使用服務賬戶登錄以獲得在系統中使用資源的權利和權限。普通用戶賬戶由用戶登錄時提供,用于Windows NT控制該用戶在系統中的權利和權限,與服務賬戶本質上無區別。
(4)域(Domain):是Windows NT中數據安全和集中管理的基本單位。網絡由域組成,域具有唯一的名稱。域可以看作由運行NT的服務器組成的系統,一組電腦共用相同的賬戶及安全數據庫。
(5)工作群組(Workgroup):一種資源與系統管理皆分散的網絡結構。工作群組里,每臺電腦之間是對等關系,彼此可以是服務器,也可以當作工作站。
(6)權利(Right):授權某用戶可以在系統上執行某些操作。權利用來保護系統整體。
(7)權限(Permission):用來保護特定對象。權限規定可以使用某一對象的用戶以及用什么方法使用。
(8)安全審核:Windows NT將記錄發生在電腦上各項與安全系統相關的過程。
NTFS是Windows NT以及之后的Windows 2000、Windows XP、Windows Server 2003、Windows Server 2008、Windows Vista和Windows 7的標準文件系統。
NTFS取代了文件分配表(FAT)文件系統,為Microsoft的Windows系列操作系統提供文件系統。NTFS對FAT和HPFS(高性能文件系統)作了若干改進,例如,支持元數據,并且使用了高級數據結構,以便于改善性能、可靠性和磁盤空間利用率,并提供了若干附加擴展功能,如訪問控制列表(ACL)和文件系統日志。該文件系統的詳細定義屬于商業秘密 ,Microsoft已經將其注冊為知識產權產品。
NTFS的歷史
20 世紀 90 年代早期,Microsoft 和 IBM 組建了一個聯合計劃,目標是創建一個下一代的操作系統。該項目的結果是誕生了 OS/2,但由于 Microsoft 和 IBM 在很多重要問題上不能達成共識而最后分裂, OS/2 至今仍屬于 IBM。Microsoft 開始研究 Windows NT。OS/2 的文件系統 HPFS 包含了若干重要功能,而當 Microsoft 開始創建他們自己的新操作系統時,他們的 NTFS 從中借用汲取了很多方面。也許是因為它們有共同的祖先,HPFS 和 NTFS 共享了相同的磁盤分區標識代碼(0x07)。共享標識是很不尋常的,因為可用的代碼還有很多,其他文件系統都使用它們自己的編號。例如,FAT 擁有超過 9 個編號(FAT12丶FAT16丶FAT32 等等每個都有一個)。用于區分文件系統的算法當遇到代碼 0x07 的時候就不得不進行額外的檢查。
版本
- NTFS 有五個正式發布的版本:
- v1.0,隨 NT 3.1 一起發布,發布于 1993 年中旬
- v1.1,隨 NT 3.5 一起發布,發布于 1994 年秋季
- v1.2,由 NT 3.51(1995 年中旬)和 NT 4(1996 年中旬)提供(有時候也被稱為“NTFS 4.0”,因為操作系統版本是 4.0)
- v3.0 來自 Windows 2000(有時稱作“NTFS 5.0”)
- v3.1 來自 Windows XP(2001 年秋季,有時稱作“NTFS 5.1”),Windows Server 2003(2003 年春季,有時稱作“NTFS 5.2”), Windows Vista(2005 年中旬,有時稱作“NTFS 6.0”)以及 Windows Server 2008(2008 年初)
V1.0 和 V1.1 以及所有以后版本不兼容,也就是說,使用 NT 3.5x 寫入的卷無法被 NT 3.1 讀取,除非使用 NT 3.5x 光盤更新 NT 3.1,并添加對 FAT 系統的長文件名支持。V1.2 支持壓縮文件、命名流、基于 ACL(訪問控制列表)的安全性等功能。
V3.0 支持磁盤限額、加密、稀疏文件、重解析點,更新串行數(USN)日志、$Extend 文件夾以及其中的文件,并改進了安全描述符,以便于使用相同安全設置的多個文件共享一個安全描述符。
V3.1 使用冗余 MFT 記錄數(用于恢復受損的 MFT 文件)擴展了主文件表(MFT)項
Windows Vista 提供了事務 NTFS、NTFS 符號鏈接、收縮卷以及自我恢復功能,但這些附加功能由操作系統提供,而非文件系統自身的功能。
NTFS的功能
相對于之前的版本,NTFS v3.0 包含若干新功能:磁盤使用限額、稀疏文件支持、重解析點、分布鏈接跟蹤,以及文件級加密(也即“加密文件系統(EFS)”)。
可選數據流(ADS)
可選數據流允許文件與多個數據流進行關聯。例如,一個名為 text.txt 的文件可以包含一個名為 text.txt:secret(格式是“文件名:流名”)的可選數據流,并只允許知道該數據流名稱或專門為數據流而設計的瀏覽程序查看。可選數據流無法從原始文件長度中得知,但會隨著對原始文件的 RemoveFile 或 RemoveFileTransacted 調用(以及調用它們的調用),或將原始文件移動/復制到不支持可選數據流的分區(如 FAT 分區、軟盤或網絡共享位置)上而丟失。可選數據流在多方面有重要用途,但也容易因為被遺忘或未被探測到而白白耗費磁盤空間。
限額
磁盤限額是 NTFS v3 提出的功能。該功能允許計算機管理員在支持該功能的 Windows 版本上為用戶允許占用的磁盤空間設置閾值,同時也允許管理員跟蹤察看每個用戶使用的磁盤空間量。管理員可以為用戶設置需要收到警告的磁盤空間使用級別,并當他們超過使用上限時拒絕對磁盤的訪問。當 NTFS 的文件壓縮啟用時,磁盤限額不會影響該功能。當應用程序查詢用戶可用的剩余磁盤空間時,如果設置了磁盤限額,也會收到限額的數值。
稀疏文件
稀疏文件是包含稀疏數據集的文件,大部分數據為零。許多科學應用程序會創建非常大的稀疏數據集,因此,Microsoft 實現了對稀疏文件的高效存儲支持,允許應用程序指定文件的空(零)數據區域。讀取稀疏文件的應用程序可以使用常規方法讀取數據,操作系統將根據當前位置的偏移量決定需要返回什么數據。當作為壓縮文件時,文件的實際大小不會影響對磁盤限額的判斷。
重解析點
該功能在 NTFS v3 中可用。該功能將在用戶空間中為文件或目錄添加一個關聯的重解析標記屬性。當對象管理器解析文件系統名稱并遇到重解析點屬性時,它將“重解析”名稱,將用戶控制的重解析數據傳遞給所有 Windows 系統加載的文件過濾驅動程序。每個過濾驅動程序都將檢查重解析數據,判斷是否和該重解析點相關聯。如果過濾驅動程序判定匹配,則將攔截文件系統調用,并執行自己的特定功能。重解析點用于實現卷加載點、目錄連接、分層存儲管理、本機結構存儲,以及單實例存儲。
卷加載點
類似于 Unix 加載點,是另一個文件系統附加到目錄的根位置。在 NTFS 中,該功能允許附加的文件系統無需為每個驅動器分配單獨的卷標(如 C: 或 D:)而加載。
目錄連接
類似于卷加載點,但 目錄連接將對象連接到文件系統中的其他目錄而非卷。例如,目錄 C:\exampledir 帶有一個目錄連接屬性,鏈接到 D:\linkeddir,則當用戶級別的應用程序訪問時,將自動引用到目錄 D:\linkeddir。[1]該功能在概念上類似于 Unix 的目錄符號鏈接,只是在 NTFS 中目標必須是另一個目錄(典型的 Unix 文件系統允許將符號鏈接連接到任何其它類型的文件)。
硬鏈接
原本用于支持 Windows NT 中的 POSIX 子系統。硬鏈接類似于目錄連接,但用于文件而非目錄。硬鏈接只能作用于同一個卷上的文件,因為需要在文件的 MFT 記錄中添加附加的文件名記錄。短格式(8.3)文件名也被作為不區分目錄項的地附加文件名實現。
分層存儲管理(HSM)
分層存儲管理是一種轉移一定時間不用的文件到價值更低的儲存介質中的方法。當文件再次被訪問時,文件上的重解析點將判定文件需要被使用,并將文件從儲存介質中恢復出來。
本機結構存儲(NSS)
本機結構存儲是一種已經被 Microsoft 終止使用的 ActiveX 文檔存儲技術。該技術允許 ActiveX 文檔 使用和 ActiveX 內部是用的多流格式相同的方式進行儲存。系統將加載一個本機結構存儲文件系統過濾器以用于為應用程序透明地處理多流格式。當文件被傳輸到非 NTFS 格式的磁盤卷上時,也將同時將多個流轉換為一個流。
卷影復制
卷影復制(VSC)服務通過將新改寫的數據復制到卷影(寫入時復制)來保存 NTFS 卷上的文件和文件夾的歷史版本。當用戶請求恢復舊早期版本時,舊的文件數據將會覆蓋新的文件數據。該功能也使得數據備份程序可以存檔當前系統正在使用的文件。對于負載較重的系統,Microsoft 建議將卷影副本設置到單獨的磁盤上,以減小系統主要卷的 I/O 負載。
文件壓縮
NTFS 能夠使用多種 LZ77 算法(該算法也用于著名的 ZIP 文件格式)壓縮文件。盡管對于壓縮文件的讀寫操作是透明的,Microsoft 仍然建議用戶避免在服務器系統和保存漫游配置文件的網絡共享位置啟用壓縮,因為壓縮會給處理器增加較為明顯的負載。
硬盤空間首限的單用戶操作系統可以有效地利用 NTFS 壓縮。由于在計算機中速度最慢的訪問不是 CPU 而是硬盤,因此 NTFS 壓縮可以同時提高受限制的、慢速儲存空間的空間和速度利用率。當某個程序(通常如下載管理器)無法創建沒有內容的配額文件時,NTFS 壓縮也可以作為配額文件的替代使用。
單實例存儲(SIS)
當若干個不同目錄中存有內容相同的文件時,單實例存儲允許將相同文件歸并到一個單一文件中,并創建對歸并后的文件的引用。單實例存儲包含一個用于管理復制、修改和歸并文件的文件系統過濾器和一個用于搜索需要歸并的相同文件的用戶空間服務(“groveler”)。單實例存儲的主要設計目標是遠程安裝服務器,這些服務器上往往擁有多個包含許多相同文件的安裝鏡像,單實例存儲可以將它們統一起來。但和硬鏈接不同,每個文件仍然是獨立的,更改任何一個副本都不會影響其它文件。和寫入時復制類似,該技術不會立即完成內存復制,直到某個副本被更改。
加密文件系統(EFS)
加密文件系統(EFS)提供對 NTFS 卷上任意文件和文件夾的用戶透明的強保護。 加密文件系統與 EFS 服務、Microsoft 的加密應用程序接口(CryptoAPI)以及 EFS 文件運行時庫(FSRTL)聯合工作。
EFS 使用塊對稱密鑰(也被稱為“文件加密密鑰(FEK)”)加密文件,這比起使用非對稱密鑰加密在加密和解密大量數據時消耗的時間較少。該對稱密鑰使用一個和加密文件的用戶相關的公鑰加密文件,加密后的數據儲存在被加密文件的可選數據流中。當需要解密文件時,文件系統使用用戶的密鑰解密儲存在文件頭中的對稱密鑰,然后使用該對稱密鑰解密文件。這些操作在文件系統級別完成,因此對用戶來說是透明的。同時,為了處理用戶丟失密鑰的情況,加密文件系統中提供了對附加解密密鑰的支持,因此恢復代理在需要時仍然可以訪問數據。
符號鏈接
符號鏈接是 Windows Vista 提供的功能。符號鏈接(也稱軟鏈接)在客戶端進行解析,因此當共享符號鏈接時,目標會受到客戶端的訪問限制,而和服務器無關。
事務 NTFS
在 Windows Vista 中,應用程序可以使用事務 NTFS 將一系列對文件的更改歸組到一個事務中。事務能夠確保所有更改要么同時生效,要么同時作廢,并能確保在事務提交完成前,外部應用程序無法獲知任何更改。
USN 日志
USN 日志是一項系統管理功能,能夠記錄卷上文件和文件夾的所有更改。
NTFS的互操作性
NTFS 具體實現的內部細節被保密,因此這導致第三方開發者試圖制作處理 NTFS 的工具變得異常困難。
Linux
完整并安全的對 NTFS 的讀寫功能由 NTFS-3G 驅動程序提供。該驅動程序包含在絕大多數 Linux 發行包 中。同時也存在過時的,大部分僅只讀的解決方案:
Linux 內核 2.2:從版本 2.2.0 開始,可以讀取 NTFS 分區。
Linux 內核 2.6:包含一個由 Anton Altaparmakov(來自劍橋大學)和 Richard Russon 編寫的驅動程序,該驅動程序支持讀取文件以及在部分情況下的改寫文件和調整文件大小。
NTFSMount:使用 ntfsmount 可以通過一個用戶級驅動程序對文件和目錄進行有限的讀寫操作。
NTFS for Linux:由 Paragon 提供的對 NTFS 提供完整讀寫支持的商用驅動程序。
Captive NTFS:一個使用 Windows 自身的驅動程序“ntfs.sys”并進行簡單封裝的驅動程序。
請注意,上面所有三個用戶級別驅動程序(NTFSMount、NTFS-3G 以及 Captive NTFS)都基于用戶空間的文件系統(FUSE),該系統是一個用于在用戶空間和內核代碼間通訊以獲取或保存數據的 Linux 內核模塊。技術上面所有的驅動程序(除了 Paragon NTFS for Linux)都是開源(GPL)的。由于 NTFS 內部結構非常復雜,內置的 2.6.14 內核驅動程序和 FUSE 都不允許修改被認為是不安全的卷,以避免發生損壞事故。
NTFS的限制
下面是一些 NTFS 的限制:
保留的文件名
盡管文件系統支持最長 32767 個 Unicode 字符的的路徑。每個路徑組成部分(目錄或文件名)最多可以有 255 個字符長,但不允許使用某些特定名稱,因為 NTFS 將元數據儲存在通常(盡管是隱藏的,并且大部分不可訪問)的文件夾中。同理,用戶也不能使用這些名稱作為文件名。這些文件都存在于卷的根目錄中(名稱也僅在根目錄中被保留)。被保留的名稱有:$MFT、$MFTMirr、$LogFile、$Volume、$AttrDef、.(點)、$Bitmap、$Boot、$BadClus、$Secure、$Upcase,以及 $Extend。(點)和 $Extend 是文件夾,其它項目是文件。
最大卷尺寸
理論上來說,NTFS 的最大尺寸是 264-1 個簇。但是目前在 Windows XP Professional 中實現的 NTFS 卷的最大尺寸是 232-1 個簇。例如,使用大小為 64KiB 的簇,則 NTFS 卷的最大尺寸是 256TiB 減去 64KiB。使用默認的 4KiB 的簇大小,則 NTFS 卷的最大尺寸是 16TiB 減去 4KiB。由于主引導記錄(MBR)上的分區表只支持最大 2TiB 的分區,要創建超過 2TiB NTFS 卷,必須使用動態卷或者 GPT 卷。
最大文件尺寸
理論值:16EiB 減去 1KiB(264 − 210 字節)。實際實現:16TiB 減去 64KiB(244 − 216 字節)
可選數據流
Windows 系統調用可能處理,也可能不處理可選數據流。根據操作系統、工具和遠程文件系統的情況,文件傳輸過程可能會無任何提示地丟棄數據流。復制或移動文件的安全方式是使用 BackupRead 和 BackupWrite 系統調用,這些調用允許程序枚舉流并驗證每個流是否被需要寫入目標卷以跳過不需要的流。
最大路徑長度
絕對路徑最多允許 32767 個字符。相對路徑被限制在 255 個字符。
日期范圍
NTFS 使用和 Windows NT 相同的計算方式:64 位時間戳,允許范圍從 1601年1月到 60056年5月28日,分辨率是每秒鐘一百萬個計數單位。

















