【正文】
LogFile):記錄所有影響 NTFS卷結(jié)構(gòu)的操作,用于系統(tǒng)失敗后的卷恢復(fù); ? 空間分配位圖 ( $Bitmap):標(biāo)識(shí)卷中每個(gè)簇的分配狀態(tài),即:空閑和已被分配; ? 引導(dǎo)文件 ( $Boot):引導(dǎo)程序代碼; ? 壞簇文件 ( $BadClus):記錄卷中據(jù)有損壞位置; ? 卷文件 ( $Volume):卷名、文件系統(tǒng)版本、卷狀態(tài)(卷是否被損壞); ? 屬性定義表 ( $AttrDef):卷中支持的屬性類型列表; 105 5. NTFS文件屬性 NTFS文件是屬性的集合 ,通常所說的文件內(nèi)容是指未命名數(shù)據(jù)屬性流; 例:我們定義兩個(gè)數(shù)據(jù)屬性: ntfile(數(shù)據(jù) )和 ntfile:data(自定義數(shù)據(jù) )。在向 FAT復(fù)制時(shí),自定義屬性會(huì)丟失。 echo test....data ntfile echo test....user defined data ntfile:data more ntfile more ntfile:data copy ntfile h:ntfile (H為 NTFS) copy ntfile f:ntfile (F為 FAT) more h:ntfile more h:ntfile:data more f:ntfile more f:ntfile:data 106 NTFS文件屬性的存儲(chǔ)形式 ? 常駐屬性 ( Resident Attribute):屬性流直接存放在主文件表中;標(biāo)準(zhǔn)信息和文件名總是常駐的。 ? 非常駐屬性 ( Nonresident Attribute):屬性流的存放不在主文件表中;大文件的數(shù)據(jù)屬性、大目錄的文件名索引屬性等長(zhǎng)度可增加的屬性為非常駐的。 常駐屬性 非常駐屬性 NTFS文件結(jié)構(gòu) NTFS目錄結(jié)構(gòu) 112 6. NTFS的數(shù)據(jù)壓縮 ? 稀疏文件壓縮 :稀疏文件是指相對(duì)于文件大小而言只有少量非零數(shù)據(jù)的文件。壓縮方法為省略(不保存)只包含零的簇。 ? 非稀疏文件壓縮 : NTFS首先把文件分成16個(gè)簇為一組的壓縮單位;分別對(duì)各壓縮單位進(jìn)行壓縮,當(dāng)壓縮后不能節(jié)約一個(gè)簇時(shí),不壓縮而直接存儲(chǔ);當(dāng)壓縮后可節(jié)約至少一個(gè)簇時(shí),只分配相應(yīng)空間,存儲(chǔ)壓縮后的數(shù)據(jù)。 NTFS支持基于文件、目錄和卷的壓縮。 稀疏文件壓縮 非稀疏文件壓縮 7. NTFS卷結(jié)構(gòu) ? 卷集 :是由 1到 32個(gè)硬盤分區(qū)構(gòu)成的單一文件卷,可在不影響已存儲(chǔ)數(shù)據(jù)的條件下把一個(gè)硬盤分區(qū)增加到卷集中??捎糜冢?合并多個(gè)小硬盤分區(qū) ,形成跨越多個(gè)小硬盤的更大卷;動(dòng)態(tài)增加卷的大小。 通常一個(gè)文件卷與一個(gè)硬盤分區(qū)相對(duì)應(yīng),但 NTFS支持由多個(gè)硬盤分區(qū)構(gòu)成的文件卷 ,以提高文件 I/O效率 、提供 動(dòng)態(tài)增加卷大小 和 容錯(cuò) 功能。 SpanSpanSpanSpanC:20 0 MBD:10 0 MBG:50 MBDisk 0E:10 0 MBF:12 5 MBG:25 0 MBDisk 1E:50 MBF:20 0 MBG:12 5 MBDisk 2Tota l SizeC: 20 0 MBD: 10 0 MBE: 15 0 MBF: 32 5 MBG: 42 5 MB? 條帶卷 :由 2個(gè)以上的分布在不同物理硬盤上的大小相同的分區(qū),以 64KB大小的條帶為單位組合成的文件卷。條帶卷可 使數(shù)據(jù)在硬盤間的分布趨于平均 ,通過多個(gè)并行的硬盤I/O來提高文件I/O速度。 Strip e 1Strip e 4Strip e 7Strip e 1 0Disk 0Strip e 2Strip e 5Strip e 8Strip e 1 1Disk 1Strip e 3Strip e 6Strip e 9Strip e 1 2Disk 2? 鏡像卷:由 2個(gè)分布在 不同物理硬盤上的大小相同的分區(qū) ,通過完全復(fù)制構(gòu)成的單一文件卷。鏡像卷有一半的空間用于冗余數(shù)據(jù)存儲(chǔ)??捎糜冢簲?shù)據(jù)的 冗余存儲(chǔ) ,當(dāng)數(shù)據(jù)不可讀時(shí),自動(dòng)從鏡像分區(qū)中讀??;通過 平衡讀取操作 來提高文件讀取效率。 DuplexC: FA T20 0 MBD: NT FS10 0 MBE: N TFS12 5 MBDisk 0C: FA T20 0 MBD: NT FS10 0 MBF: FA T30 0 MBDisk 1? 帶校驗(yàn)的條帶卷:由 3個(gè)以上 的分布在不同物理硬盤上的 大小相同 的分區(qū),以 64KB大小的條帶為單位組合成的帶校驗(yàn)的文件卷。由 N個(gè)分區(qū)構(gòu)成的帶校驗(yàn)條帶卷有 1/N的空間用于冗余數(shù)據(jù)存儲(chǔ) ,可恢復(fù)一個(gè)條帶的錯(cuò)誤??捎糜冢簲?shù)據(jù)的冗余存儲(chǔ) (容錯(cuò) );提高文件 I/O速度 。 Stripe 1Pa rityStripe 5Stripe 7Disk 0Stripe 2Stripe 3Pa rityStripe 8Disk 1Pa rityStripe 4Stripe 6Pa rityDisk 2119 3 UNIX的文件系統(tǒng) ? 改進(jìn)的多級(jí)文件目錄 ,可以建立 文件別名 (索引結(jié)點(diǎn)方式和符號(hào)鏈接方式),有 用戶訪問權(quán)限控制(文件的讀 R、寫 W和執(zhí)行 X,相應(yīng)于目錄的檢索文件、增刪文件和進(jìn)入目錄) – 注意:如果對(duì)文件具有寫權(quán)限,而對(duì)文件所在目錄沒有寫權(quán)限,仍然可以改變?cè)撐募拈L(zhǎng)度(如添加數(shù)據(jù)),因?yàn)槌募獾钠渌募夸泝?nèi)容都存放在索引結(jié)點(diǎn)而不是在目錄文件。 ? 文件類型 :常規(guī)文件 (ordinary file)、目錄文件(directory)、特殊文件 (special file)如外設(shè)、先進(jìn)先出文件 (FIFO)如命名管道; 1. 概述 120 2. 磁盤文件卷結(jié)構(gòu) ? 超級(jí)塊 :描述文件系統(tǒng)的狀態(tài),包括磁盤空閑塊棧,空閑 i結(jié)點(diǎn)棧 ? i節(jié)點(diǎn) ( inode list):存放文件說明信息,每項(xiàng) 64字節(jié) ? 目錄文件 :每個(gè)目錄項(xiàng) 16字節(jié)。文件名區(qū)分大小寫。 ? 文件分配 :直接索引,一級(jí)、二級(jí)、三級(jí)間接索引 i n o d eT a b l eDa t a( F i l e amp。 Di r e c t o r y )Bo o tRe c o r dV o l um e S t r uc t ur e i n U NI XSe c t o r 0 1SuperBl o c k121 3. 空閑 i結(jié)點(diǎn)的分配和釋放 ? 每次從磁盤上尋找一批空閑 i結(jié)點(diǎn),把它們的編號(hào)記錄在 內(nèi)存的空閑 i結(jié)點(diǎn)棧 中。其中 “銘記” i結(jié)點(diǎn)(remembered inode)是棧中編號(hào)最大的 i結(jié)點(diǎn)。 ? i結(jié)點(diǎn)分配 時(shí),移出棧頂?shù)?i結(jié)點(diǎn)。若到達(dá) 銘記 i結(jié)點(diǎn)則表示棧已空,需要從磁盤上重新尋找。 (銘記 i結(jié)點(diǎn)在棧底 ) 652 ... f r ee i nod es0 1571 566 em pt y4922i nde xr em e m ber ed i nod eas s i gn i nod e f r ee i nod eI node L i s t i n S u per B l ock? i結(jié)點(diǎn)釋放 時(shí),若棧未滿,則把被釋放 i結(jié)點(diǎn)放入棧頂。若棧已滿,則判斷被釋放 i結(jié)點(diǎn)的編號(hào)小于 銘記 i結(jié)點(diǎn)編號(hào),則把前者替換 銘記 i結(jié)點(diǎn),否則被釋放的 i結(jié)點(diǎn)不入棧。 ? 問題舉例:這里的問題出在內(nèi)存中的 i結(jié)點(diǎn)棧與磁盤上的狀態(tài)不一致。如:分配空閑 i結(jié)點(diǎn) 100和 150;釋放 i結(jié)點(diǎn) 100而“銘記” i結(jié)點(diǎn)變?yōu)?100;分配 i結(jié)點(diǎn) 100,則需要重新從磁盤上尋找空閑 i結(jié)點(diǎn);此時(shí) i結(jié)點(diǎn) 150還在內(nèi)存 i結(jié)點(diǎn)表中,如果它尚未更新到磁盤上,那么從磁盤上會(huì)找到空閑的 i結(jié)點(diǎn) 150。 (由于內(nèi)外存不同步而產(chǎn)生問題,內(nèi)存已分配而外存沒有反映出來 ) ? 問題的解決:從空閑 i結(jié)點(diǎn)棧中得到 i結(jié)點(diǎn)編號(hào)之后,還需要對(duì)其在內(nèi)存 i結(jié)點(diǎn)表中進(jìn)行查找 (相當(dāng)于進(jìn)行核對(duì) );如果找到,說明這個(gè) i結(jié)點(diǎn)并非空閑。 123 4. 磁盤空閑塊的分配和釋放 ? 采用成組鏈接法 ,把鏈表和索引相結(jié)合。每一組 50塊,用 索引表 表示;各組間通過鏈表指針串在一起,構(gòu)成 鏈表 。鏈表的開頭是超級(jí)塊中的磁盤空閑塊棧,在運(yùn)行時(shí)被讀入到內(nèi)存中。 棧計(jì)數(shù) count是棧中的空閑塊數(shù)目,棧中的元素是空閑塊編號(hào)。鏈表中的每一塊都存放一個(gè)類似的空閑塊棧 ? 分配過程 :查看超級(jí)塊中是否 count == 1;若不是,則彈出棧頂元素 N, count;若是,則彈出棧頂元素 N,把空閑塊 N中的棧(包括棧計(jì)數(shù))讀入到超級(jí)塊中;返回空閑塊編號(hào) N ? 釋放過程 :被釋放空閑塊為編號(hào) N。查看超級(jí)塊中是否棧已滿(如 count == 50);若不是,則 N入棧, ++count;若是,則將超級(jí)塊中的棧(包括棧計(jì)數(shù))寫入到空閑塊 N,然后把 N放入超級(jí)塊中的棧頂并置 count為 1。 41350187Sup er Bl oc kcount50040400351... ...049count 50450401...049count 460......045count350 400 L as t O ne...成組鏈接 125 6. 打開文件管理 ...5...9U s er Fi l e D es cr i pt ors Fi l e T abl e500...8...60P r o ce s s AP r o ce s s CO f f s et7 8dup ( )...5...90P r o ce s s B 82 3193 r2 5609 rwCount Read/ W r i t eMo de./ f i l e1F i l e Si zeI node T abl e81234Countf or k( )? 內(nèi)存 i結(jié)點(diǎn)表 :空閑的內(nèi)存 i結(jié)點(diǎn)- 組織成鏈表;占用的內(nèi)存 i結(jié)點(diǎn)- 哈希表(對(duì)沖突采用鏈表方式解決) ? 進(jìn)程所進(jìn)入的目錄 :包括各個(gè)打開文件的目錄路徑,以及進(jìn)程的當(dāng)前目錄 – 進(jìn)入一個(gè)目錄,如果該目錄文件的內(nèi)存 i結(jié)點(diǎn)已經(jīng)存在,則只需把內(nèi)存 i結(jié)點(diǎn)的引用計(jì)數(shù)加 1,否則讀入該目錄文件的磁盤 i結(jié)點(diǎn)并建立內(nèi)存 i結(jié)點(diǎn)。 – 系統(tǒng)起動(dòng)之后,進(jìn)入根目錄并建立相應(yīng)內(nèi)存 i結(jié)點(diǎn),直到系統(tǒng)關(guān)閉 – 退出目錄:如關(guān)閉文件或修改當(dāng)前目錄 ? 目錄路徑查找 :把目錄路徑分解為各級(jí)目錄名,然后逐級(jí)進(jìn)入目錄并查找。如:目錄路徑為 /usr/include/sys,則各級(jí)目錄名為 usr, include, sys。 ? 安裝和拆卸文件卷 : mount和 umount