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