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