国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
NTFS的目錄和文件
                                                

本文介紹NTFS的文件和目錄。我將從目錄在NTFS卷里的存儲方式開始,然后介紹用戶數(shù)據(jù)文件的細(xì)節(jié),包括文件是怎樣存儲和命名的,以及文件的最大字節(jié)限制。接著我將描述文件的標(biāo)準(zhǔn)屬性,最后是重解析點(diǎn)(reparse points),它是Windows 2000NTFS 5.0引入的新特性。

NTFS的目錄<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

從外部結(jié)構(gòu)看,NTFS組織目錄的方式和FAT一樣(其他許多文件系統(tǒng)也是如此), 即所謂的多級(hierarchical)模型或目錄樹(directory tree)模型。目錄樹的“基(base)”是根(root)目錄,NTFS系統(tǒng)的重要元數(shù)據(jù)文件之一。在根目錄里,存儲了指向其他文件或目錄的引用,每個子目錄里又可以有任意的文件和目錄,這樣就形成了一個樹狀結(jié)構(gòu)。

注意:目錄(Directories)又可以稱為文件夾(folders

雖然NTFS里目錄樹的結(jié)構(gòu)與FAT的類似,它們內(nèi)部的管理卻不同。其中一點(diǎn)是,FAT里目錄包含了其下文件的所有額外信息,文件本身只包含數(shù)據(jù)。而在NTFS里,文件就是屬性的集合,會自己包含需要的描述信息和數(shù)據(jù)。目錄同樣只包含自己的信息,而不用管其下的文件。

NTFS里的所有對象都是文件,這也適用于目錄。每個目錄在MFT里都有一個記錄,它是目錄信息的主要存儲地。MFT里的記錄存儲了目錄的如下屬性:

l  Header (H):這是NTFS用來管理文件或目錄的數(shù)據(jù),包括NTFS內(nèi)部使用的標(biāo)識序列號,指向文件或目錄屬性的指針,和記錄空閑空間的指針。注意Header不是一個屬性,而是MFT記錄的頭信息。

l  Standard Information Attribute (SI):這個屬性是文件或目錄的“標(biāo)準(zhǔn)”信息,例如創(chuàng)建、修改、訪問時間戳,以及文件的“標(biāo)準(zhǔn)”屬性(只讀,隱藏等)。

l  File Name Attribute (FN):這個屬性存儲目錄的名字。注意一個目錄可以有多個名字屬性,例如“常規(guī)”名字,MS-DOS兼容的短名字,或者類似POSIX的硬鏈接名字。

l  Index Root Attribute:這個屬性包含了目錄下所有文件的“標(biāo)準(zhǔn)”信息。如果文件數(shù)太多,那么就只包含部分文件的信息,其余的文件信息存儲于外部的index buffer attribute里,后面會介紹。

l  Index Allocation Attribute:如果目錄下的文件過多,上面的Index Root Attribute放不下,就會使用這個屬性包含指向index buffer入口的指針。

l  Security Descriptor (SD) Attribute:包含目錄及其內(nèi)容的訪問控制信息,或叫安全信息(security information)。目錄的訪問控制列表(ACLs Access Control Lists)和相關(guān)數(shù)據(jù)就存儲于此。

簡單的說,小目錄可能整個存儲于MFT記錄里,就跟小文件一樣。大目錄會分成多個數(shù)據(jù)記錄,由目錄的Index Root Attribute來引用。NTFS使用一種特殊的方式來存儲目錄下的文件索引。在FAT文件系統(tǒng)里,這些索引是一個鏈表,前幾個索引存儲于第一個簇里,接著存儲于第二個簇,等等。這種方案實(shí)現(xiàn)容易,但需要掃描整個鏈表才能找到一個文件,導(dǎo)致定位單個文件非常耗時,特別是很大的目錄。

為了提高性能,NTFS使用了B樹結(jié)構(gòu)。B樹是一個平衡樹存儲結(jié)構(gòu),源自于關(guān)系型數(shù)據(jù)庫, 對它的詳細(xì)介紹可能花費(fèi)很多篇幅,而且網(wǎng)絡(luò)上已有不少資源,那么我就不羅嗦了。從實(shí)踐效果看,B樹能使目錄的索引“自動排序”,這在加入新文件的時候會帶來一些花費(fèi)。但是文件的搜索現(xiàn)在性能大大提升了,特別是對于大目錄。

NTFS的文件和數(shù)據(jù)存儲

從用戶的眼光看,文件系統(tǒng)的基礎(chǔ)是文件。文件是一些數(shù)據(jù)的集合,能包含任何東西:程序,文本,音像,記錄,等等其他信息。操作系統(tǒng)不需辨識文件的種類,文件的使用方式依賴于解釋它的應(yīng)用程序。

NTFS里,文件也存儲成和上面類似的方式:屬性的集合。文件的數(shù)據(jù)也是屬性之一,術(shù)語叫做“data”屬性。注意,要理解文件是如何存儲的,必須對NTFS的體系結(jié)構(gòu)有所了解,最好是知道MFT的結(jié)構(gòu)和原理,以及NTFS下的屬性類型:駐留的和非駐留的。

NTFS里文件的存儲方式依賴于文件的大小。所有文件的核心結(jié)構(gòu)都基于下面的信息和屬性:

l  Header (H):同上面目錄的Header

l  Standard Information Attribute (SI):同上面目錄的Standard Information Attribute。

l  Data (Data) Attribute:這個屬性存儲了文件的實(shí)際內(nèi)容。

l  Security Descriptor (SD) Attribute:同上面目錄的Security Descriptor Attribute。

除了這些基本屬性,一個文件可以有很多其他屬性。如果一個文件的所有屬性能放進(jìn)一個MFT記錄,那么這個文件就全部在MFT記錄里。如果文件太大,NTFS把一部分屬性移出MFT記錄,轉(zhuǎn)化成非駐留的。具體的步驟是這樣的:

1.         首先NTFS試圖把整個文件放進(jìn)MFT記錄里。只有少數(shù)非常小的文件可能成功。

2.         如果失敗,data屬性轉(zhuǎn)化成非駐留的。MFT里的data屬性只包含指向這些數(shù)據(jù)范圍(extents,又叫runs)的指針。數(shù)據(jù)范圍(extents)是指存儲數(shù)據(jù)若干個連續(xù)的塊, 位于MFT的外面。

3.         如果文件太大,導(dǎo)致指向數(shù)據(jù)范圍的指針也不能存儲在MFT記錄里,那么這些指針會變成非駐留的。這樣的文件在主MFT記錄(main MFT record)里沒有data屬性,而是有一個指向下一個MFT記錄的指針,data屬性在這個記錄里,并存儲指向數(shù)據(jù)范圍的指針。

4.         如果文件繼續(xù)增大,NTFS會重復(fù)這種擴(kuò)展,為超大的文件創(chuàng)建出無限個非駐留的MFT記錄,當(dāng)然,只要磁盤能夠容納。由此可見,文件越大,它的存儲結(jié)構(gòu)也會越復(fù)雜。

數(shù)據(jù)范圍(extents)是NTFS里大部分文件數(shù)據(jù)存儲的地方,它由若干連續(xù)的簇組成。文件的data屬性里包含了數(shù)據(jù)范圍的起始簇標(biāo)識,和簇的個數(shù)。起始簇標(biāo)識是一個虛擬簇編號(VCNvirtual cluster number)。而“起始 + 長度“的方式意味著NTFS不用讀遍每個簇才知道后面的簇在哪里,它還能減少文件碎片的產(chǎn)生。

NTFS的文件大小

商用程序和數(shù)據(jù)庫使用Windows操作系統(tǒng)和FAT文件系統(tǒng)的最大問題之一就是文件的大小限制,有時是4GB,有時是2GB。起初它們看起來足夠了,但是到現(xiàn)在誰都知道這遠(yuǎn)遠(yuǎn)不夠。即使是我自己的機(jī)器,有時也會備份比這大得多的數(shù)據(jù)文件。

前面介紹了NTFS試圖把小文件存進(jìn)MFT記錄里,大些的文件把數(shù)據(jù)存到擴(kuò)展屬性和數(shù)據(jù)范圍里。這種設(shè)計允許文件的大小沒有限制。實(shí)際上,NTFS下文件的大小的確沒有限制,單個文件可以占用整個卷,只留下很小的MFT和其他必要的內(nèi)部結(jié)構(gòu)。

NTFS還應(yīng)用了一些特性來優(yōu)化存儲非常大的文件。其中之一是文件壓縮(file-based compression),降低大文件占用的磁盤空間。另一個是稀疏文件(sparse files),非常適用于那些大部分內(nèi)容都是0的文件。

NTFS文件命名

微軟早期的操作系統(tǒng)在文件命名上非常不方便,比如DOS風(fēng)格的8字符文件名加3字符后綴方式——所謂的8.3標(biāo)準(zhǔn)文件名。與其他競爭對手例如UnixApple Macintosh比起來,這種方式簡直不可接受!為了解決這個問題,微軟決定給NTFS的文件名以充分的擴(kuò)展性。

l  長度:普通文件的文件名長度最多為255Unicode字符(2字節(jié));

l  大小寫:文件名可以大小寫混用,并且會被NTFS保存起來。但是訪問文件的時候文件名是大小寫無關(guān)的,舉個例子:你命名了文件“4Q Results.doc”,當(dāng)你列出這個文件時,會正確的顯示“4Q Results.doc”(大小寫被NTFS保存起來了)。但是你可以使用下面的任何名字引用到剛才的文件:“"4q results.doc”,“ReSulTS.dOc”,等等。

l  字符:文件名能包含任意Unicode字符,包括空格,除了這幾個:? " / / < > * | :,原因是這幾個字符被操作系統(tǒng)作為文件名的分隔符或命令操作符。

l  Unicode格式:所有的NTFS文件名都存儲成Unicode格式。相比之下,傳統(tǒng)的計算機(jī)使用ASCII碼(1字節(jié)),只能辨識“最常見”的一百多個英語字符。這對于其他很多語言都是不夠的,特別是亞洲國家。Unicode是一種國際性的,16-bit的字符表示方式,支持當(dāng)今幾乎所有的語言和符號。

有的讀者也許會想起,當(dāng)初Window 95VFAT文件系統(tǒng)引入了一種長文件名,作為附加屬性。這個文件系統(tǒng)自動為所有長文件名生成一個8.3形式的短文件名,兼容以前的軟件。NTFS也是這樣做的。但是表面相似并不代表內(nèi)部也是一樣,VFAT只是在短文件名系統(tǒng)上打了一個補(bǔ)丁,NTFS卻是從設(shè)計上就支持長文件名。

文件名存儲在MFT記錄的file name屬性里。實(shí)際上,NTFS支持同一個文件的MFT記錄里有多個file name屬性,第一個是文件的“常規(guī)”文件名,第二個是MS-DOS兼容的短文件名,甚至第三個作為兼容POSIX標(biāo)準(zhǔn)的硬鏈接(hard links)文件名。硬鏈接是指同一個文件有多個名字,并位于不同的目錄之下。這些鏈接的名字可以作為不同的file name屬性。這是對UNIX靈活的命名系統(tǒng)的一個模仿。

NTFS文件屬性

NTFS文件系統(tǒng)里,文件是屬性的集合,屬性則是各種形式的信息和數(shù)據(jù),屬性的內(nèi)容由軟件來解釋。目錄也是這樣,它們只是了包含一些普通文件沒有的屬性,并由文件系統(tǒng)來解釋和使用。

所有的屬性都有2種不同的存儲方式,依賴于屬性自身的大小,即:

l  駐留屬性:如果屬性只需很少的存儲空間,那么可以放在文件的主MFT記錄里。事實(shí)上,NTFS要求某些屬性必須在MFT記錄里,比如文件名,創(chuàng)建、修改、訪問時間戳等。

l  非駐留屬性:如果屬性需要更多的空間,那么可以存儲在MFT記錄外面。MFT記錄里會保留指向?qū)傩詳?shù)據(jù)的指針。

由于MFT記錄大小有限,只有少數(shù)屬性可以放在MFT記錄里。許多其他屬性都是非駐留的,特別是文件的data屬性。非駐留的屬性又有2種形式。如果指向數(shù)據(jù)的指針能放進(jìn)MFT記錄,那么把數(shù)據(jù)放在數(shù)據(jù)范圍里(稱為runextent),指向這些范圍的指針放在MFT記錄里。一個屬性可以占用多個數(shù)據(jù)范圍,每個對應(yīng)一個MFT記錄里的指針。如果一個屬性占用的數(shù)據(jù)范圍太多,導(dǎo)致這些指針已不能放進(jìn)文件的MFT記錄,那么整個data屬性可以移出去,變成一個外部屬性(external attribute),存儲于一個或多個MFT記錄里。

NTFS預(yù)定義了一些屬性,稱為系統(tǒng)屬性,如下表所示:

l  Attribute List:這是一個“元屬性(meta-attribute)”,即屬性的屬性。如果某個屬性變成非駐留的,那么主MFT記錄會使用Attribute List存儲指向這個屬性的指針;

l  Bitmap:保存簇分配信息的位圖,由$Bitmap元數(shù)據(jù)文件使用;

l  Data:包含文件數(shù)據(jù)。默認(rèn)情況下,文件的所有數(shù)據(jù)存儲在單個data屬性里,數(shù)據(jù)量再大也是一個屬性。不過文件可以有多個其他數(shù)據(jù)屬性,供特殊的應(yīng)用程序使用;

l  Extended Attribute (EA)Extended Attribute Information:據(jù)我所知,這些屬性是為了兼容OS / 2下的NTFS分區(qū),Windows NT / 2000沒有使用它們;

l  File Name (FN):文件或目錄的名字。前面說過,一個文件可以有多個名字,包括“常規(guī)”名字,MS-DOS兼容的短名字,或POSIX硬鏈接名,等;

l  Index Root Attribute:包含一個目錄下的文件索引信息。如果目錄下文件很少,所有的文件索引都可以放在MFT記錄里;如果文件數(shù)太多,那么MFT里只存放部分文件的索引,其余的放在外面的index buffer attributes里;

l  Index Allocation Attribute:如果一個目錄下的文件太多,MFT記錄會創(chuàng)建這個屬性,包含指向外部index buffer attributes屬性的指針;

l  Security Descriptor (SD)::包含文件及其內(nèi)容的訪問控制信息,或叫安全信息(security information)。文件的訪問控制列表(ACLs Access Control Lists)和相關(guān)數(shù)據(jù)就存儲于此。文件所有者和認(rèn)證信息也存儲于此;

l  Standard Information (SI):這個屬性是文件或目錄的“標(biāo)準(zhǔn)”信息,例如創(chuàng)建、修改、訪問時間戳,以及文件的“標(biāo)準(zhǔn)”屬性(只讀,隱藏等)。

l  Volume Name,Volume InformationVolume VersionNTFS卷的標(biāo)簽,版本和其他信息,由$Volume元數(shù)據(jù)文件使用。

NTFS還支持用戶為文件創(chuàng)建自定義的屬性。在這里“用戶”的意義有些微妙,因?yàn)檫@是從微軟的角度來說的——應(yīng)用程序開發(fā)者。應(yīng)用程序可以給文件創(chuàng)建自己的屬性,但是NTFS文件系統(tǒng)的使用者不能。

NTFS重解析點(diǎn)(Reparse Points

Windows 2000發(fā)布的NTFS版本5里最有趣的一個屬性是引入了一些特殊的文件系統(tǒng)功能,并應(yīng)用于特定的文件或目錄上。這些特殊功能使NTFS文件系統(tǒng)更加強(qiáng)大和有擴(kuò)展性。這個特性的實(shí)現(xiàn)基礎(chǔ)叫做重解析點(diǎn)(reparse points)。

重解析點(diǎn)的使用源于一些應(yīng)用程序想把一些特殊數(shù)據(jù)存儲到特殊的地方——重解析點(diǎn),然后由應(yīng)用程序做上特殊的標(biāo)記,只允許它使用。為此文件系統(tǒng)引入了一個應(yīng)用程序相關(guān)的特殊過濾器(application-specific filter),并與重解析點(diǎn)的標(biāo)記關(guān)聯(lián)起來。多個應(yīng)用程序可以把不同的數(shù)據(jù)存儲到同一個重解析點(diǎn)文件里,只要使用不同的標(biāo)記。微軟保留了幾個標(biāo)記為自己使用。

現(xiàn)在我們假設(shè)用戶打算訪問一個有標(biāo)記的重解析點(diǎn)文件。當(dāng)文件系統(tǒng)打開文件時,發(fā)現(xiàn)有重解析點(diǎn)關(guān)聯(lián)到這個文件,于是“重解析”這個打開文件請求,發(fā)現(xiàn)與應(yīng)用程序相關(guān)聯(lián)的可用過濾器,并與這個重解析點(diǎn)進(jìn)行匹配,通過后就可以把重解析點(diǎn)的數(shù)據(jù)傳送給這個過濾器了。過濾器于是可以把這些數(shù)據(jù)用于任何途徑,依賴于應(yīng)用程序最初的定義。這是一個非常靈活的系統(tǒng):應(yīng)用程序不需關(guān)心重解析點(diǎn)是如何工作的,重解析點(diǎn)的實(shí)現(xiàn)細(xì)節(jié)對于用戶是完全透明的。你只需簡單的放入和拿出數(shù)據(jù),其余的事情都是自動完成。這使文件系統(tǒng)的功能大大增強(qiáng)了。

微軟使用重解析點(diǎn)在Windows 2000里實(shí)現(xiàn)了如下的功能:

l  符號鏈接(Symbolic Links):符號鏈接允許你創(chuàng)建一個指向其他地方某個文件的指針。NTFS并沒有像UNIX文件系統(tǒng)那樣實(shí)現(xiàn)“真正”的文件符號鏈接,但是從功能上重解析點(diǎn)完全可以模擬得一模一樣。本質(zhì)上,NTFS的符號鏈接就是一個重解析點(diǎn),把對一個文件的訪問轉(zhuǎn)移到另一個文件身上。

l  交叉點(diǎn)(Junction Points):交叉點(diǎn)和符號鏈接類似,只不過對象是目錄而不是文件。

l  卷裝載點(diǎn)(Volume Mount Points):卷裝載點(diǎn)和前2者類似,只是更進(jìn)一層:它能創(chuàng)建對整個卷的鏈接。比如,你可以為可移動硬盤或其他存儲介質(zhì)創(chuàng)建卷裝載點(diǎn),或者讓本地的不同分區(qū)(C:,D:,E:等等)看起來就像在一個卷里一樣。這對于那些大型的CD-ROM服務(wù)器非常有用,如果沒有卷裝載點(diǎn),它們就只能為每張磁盤人工維護(hù)一個分區(qū)字母。

l  遠(yuǎn)程存儲服務(wù)器(RSSRemote Storage Server):Windows 2000的這個特性能利用一些規(guī)則來移除NTFS卷上不常用的文件,放到存檔介質(zhì)里(比如CD-RW或磁帶)。當(dāng)它把文件移出到“下線”或“半下線”的存儲介質(zhì)上時,RSS自動創(chuàng)建指向這個存檔文件的重解析點(diǎn),以備日后使用。

上面只是重解析點(diǎn)使用例子的一少部分。這個功能非常靈活,是NTFS的亮點(diǎn)之一:它讓文件系統(tǒng)的功能大大增強(qiáng),又不需對文件系統(tǒng)進(jìn)行任何更改。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
NTFS文件系統(tǒng)的數(shù)據(jù)恢復(fù)程序設(shè)計
NTFS文件系統(tǒng)數(shù)據(jù)恢復(fù)----解析MFT表
深入解析NTFS文件系統(tǒng)
什么是 NTFS 文件系統(tǒng)?
30H($FILE
NTFS文件系統(tǒng)中MFT項(xiàng)中主要字節(jié)的標(biāo)注(完整版)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服