FAT文件結(jié)構(gòu)概述_第1頁
FAT文件結(jié)構(gòu)概述_第2頁
FAT文件結(jié)構(gòu)概述_第3頁
FAT文件結(jié)構(gòu)概述_第4頁
FAT文件結(jié)構(gòu)概述_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

一、硬盤的物理構(gòu)造:盤片以及盤片兩面所安裝的磁頭和相應(yīng)的把握電路組成(圖1),其中盤片和磁頭密封在無塵的金屬殼中。硬盤工作時,盤片以設(shè)計轉(zhuǎn)速高速旋轉(zhuǎn),設(shè)置在盤片外表的磁頭則在電路把握下徑向移動到指定位置然后將數(shù)據(jù)存儲或讀取出來。當(dāng)系統(tǒng)向硬盤寫入數(shù)據(jù)時,磁頭中“寫數(shù)據(jù)”電流產(chǎn)生磁場使盤片外表磁性物質(zhì)狀態(tài)發(fā)生轉(zhuǎn)變,并在寫電流磁場消逝后仍能保持,這樣數(shù)據(jù)就存儲下來了;當(dāng)系統(tǒng)從硬盤中讀數(shù)據(jù)時,磁頭經(jīng)過盤片指定區(qū)域,盤片外表磁場使磁頭產(chǎn)生感應(yīng)電流或線圈阻抗產(chǎn)生變化,經(jīng)相關(guān)電路處理后復(fù)原成數(shù)據(jù)。因此只要能將盤片外表處理得更平滑、磁頭設(shè)計得更周密以及盡量提高盤片旋轉(zhuǎn)速度,就能造出容量更高讀、寫靈敏度和速度;磁頭設(shè)計越小越周密就能使磁頭在盤片上占用空間越小,使磁頭在一張盤片上建立更多的磁道以存儲更多的數(shù)據(jù)。二、硬盤的規(guī)律構(gòu)造。(platter)N2N個0、1、2開頭編號。每個盤片被劃分成假設(shè)干個同心圓磁道(規(guī)律上的,)R的同心圓再規(guī)律上1、2、3……Cylinde個扇區(qū)。這三個參數(shù)即是硬盤的物理參數(shù)。我們下面的很多實踐需要深刻理解這三個參數(shù)的意義。三、磁盤引導(dǎo)原理。MBR(masterbootrecord)扇區(qū):bios程序。進(jìn)展完一系列檢測和配置以后。開頭按biosBios執(zhí)行完自己的程序后如何把執(zhí)行權(quán)交給硬盤呢。交給硬盤后又執(zhí)行存儲在哪里的程序呢。其實,稱為mbr的一段代碼起著舉足輕重的作用。MBR(maste001扇區(qū)(可以看作是中的第一條指令。將系統(tǒng)的把握1FEH~1FFH)是分區(qū)有效完畢標(biāo)志。MBR,即使不同,MBR也不會夾帶操作系統(tǒng)的性質(zhì)。具有公共引導(dǎo)的特性。mbr。下面是120GBmbr。系統(tǒng)ID(System系統(tǒng)ID(SystemID)定義了分區(qū)的類型,具體定義,請參閱圖4完畢磁頭(EndingHead)完畢扇區(qū)(EndingSector)只使用了0~5位。最終兩位(第6、7位)被完畢柱面字段所使用完畢柱面(EndingCylinder除了完畢扇區(qū)字段最終的兩位外,還使用了1位,以組成該柱面值。完畢柱面是一個101023相對扇區(qū)數(shù)(RelativeSectors從該磁盤的開頭到該分區(qū)的開頭的位移量,以扇區(qū)來計算總扇區(qū)數(shù)(TotalSectors該分區(qū)中的扇區(qū)總數(shù)ck關(guān)于磁盤mbr的反編譯,已加了具體的注釋,感興趣可以細(xì)細(xì)爭論一下。C~ZDPT64個字節(jié)中如何表其次個分區(qū)表項描述除根本分區(qū)外的其余空間,一般而言,就是我們所說的擴(kuò)展分區(qū)。這局部的大體說明1。移值12分區(qū)表第一字段字段名和定義EBYTE0引導(dǎo)指示符(BootIndicator)指明該分區(qū)是否是活動分區(qū)。(00為非活動分區(qū))FBYTE1開頭磁頭(StartingHead)0x01C00x01C16位10位10開頭扇區(qū)(StartingSector)0~5位。后面的兩位(6位和7位)被開頭柱面字段所使用開頭柱面(StartingCylinder) 除了開頭扇區(qū)字段的最終兩位外,還使用了1位來組成該柱面值。開頭柱面是一個10位數(shù),最大值為10230x01C2BYTE0x070x01C3BYTEE0x01C46位F0x01C510位B0x00x01CDWO0006RD003F0x00x01CDWO0DAARDA83Dwinhex中看到這些參數(shù)的意義:0334同3。。80H為活動,00Hmicrosoft而言為非法值。(littleendianformat)或稱反字節(jié)挨次保存下來。低字節(jié)在前的格式是一種保存數(shù)的方法,這樣,最低位的字節(jié)最先出現(xiàn)在十六進(jìn)制數(shù)符號中。例如,相對扇區(qū)數(shù)字段的值為0x3F000000,低字節(jié)在前,0x0000003F63。3、系統(tǒng)在分區(qū)時,各分區(qū)都不允許跨柱面,即均以柱面為單位,這就是通常所說的分區(qū)粒度。有時候7000M,分出來卻是6997M2H6H的扇區(qū)10位(bit)6H6位用作扇區(qū)數(shù)的二進(jìn)制表107H8108位。由此可知,實際上用這種方式表示的分區(qū)容量是有限的,柱面和磁頭從0開頭編號,扇區(qū)從1開頭編號,所以最多只能8.4GB(實際上應(yīng)當(dāng)255個(由匯編語言的尋址存放器打算),3個42^32個扇區(qū),即2TB=2048GB,目前對于大多數(shù)計算機(jī)而言,這已經(jīng)是個天8.4GB的分區(qū)上,C/H/S的表示方法和線性扇區(qū)的表示方法所表示的分區(qū)大小是全都(可能在某些系統(tǒng)中會提示出FEHFFHFFHC/H/S所能表示的最大值。有時候1024的模來填充。不過這幾個字節(jié)是什么其實都無關(guān)緊要了。(保存扇區(qū)中的第一個扇區(qū)就是第一個分區(qū),保存扇區(qū)是本分區(qū)前的全部扇區(qū)。4擴(kuò)展分區(qū):MBR的擴(kuò)展引導(dǎo)記錄(ExtendedBootRecord,E標(biāo)簽。擴(kuò)展引導(dǎo)記錄將記錄只包含擴(kuò)展分區(qū)中每個規(guī)律驅(qū)動器的第一個柱面的第一面的信息。一個規(guī)律驅(qū)3263。但是,假設(shè)磁盤上沒有擴(kuò)展分區(qū),那么就不會有擴(kuò)展引導(dǎo)記錄和規(guī)律驅(qū)動器。第一個規(guī)律驅(qū)動器的擴(kuò)展分區(qū)表中的第一項指向它自身的引導(dǎo)扇區(qū)。其次項指向下一個規(guī)律驅(qū)動器的EBR。假設(shè)不存在進(jìn)一步的規(guī)律驅(qū)動器,其次項就不會使用,而且被記錄成一系列零。如果有附加的規(guī)律驅(qū)動器,那么其次個規(guī)律驅(qū)動器的擴(kuò)展分區(qū)表的第一項會指向它本身的引導(dǎo)扇區(qū)。其次個果有附加的規(guī)律驅(qū)動器,那么其次個規(guī)律驅(qū)動器的擴(kuò)展分區(qū)表的第一項會指向它本身的引導(dǎo)扇區(qū)。其次個會被使用。45:關(guān)于擴(kuò)展分區(qū),如圖6所示,擴(kuò)展分區(qū)中規(guī)律驅(qū)動器的擴(kuò)展引導(dǎo)記錄是一個連接表。該圖顯示了一個擴(kuò)除了擴(kuò)展分區(qū)上最終一個規(guī)律驅(qū)動器外,表2中所描述的擴(kuò)展分區(qū)表的格式在每個規(guī)律驅(qū)動器中都是重EBR。最終一個規(guī)律驅(qū)動器的擴(kuò)展分區(qū)表只會列出它本身的分區(qū)項。最終一個擴(kuò)展分區(qū)表的其次個項到第四個項未被使用。22擴(kuò)展分區(qū)表項的內(nèi)容擴(kuò)展分區(qū)表項分區(qū)表項的內(nèi)容第一個項包括數(shù)據(jù)的開頭地址在內(nèi)的與擴(kuò)展分區(qū)中當(dāng)前規(guī)律驅(qū)動器有關(guān)的信息其次個項有關(guān)擴(kuò)展分區(qū)中的下一個規(guī)律驅(qū)動器的信息,包括包含下一EBR的扇區(qū)的地址。假設(shè)不存在進(jìn)一步的規(guī)律驅(qū)動器的話,該字段不會被使用第三個項未用第四個項未用擴(kuò)展分區(qū)表項中的相對扇區(qū)數(shù)字段所顯示的是從擴(kuò)展分區(qū)開頭到規(guī)律驅(qū)動器中第一個扇區(qū)的位移的字定義的引導(dǎo)扇區(qū)到規(guī)律驅(qū)動器末尾的扇區(qū)數(shù)。有時候在磁盤的末尾會有剩余空間,剩余空間是什么呢?我們前面說到,分區(qū)是以1柱面的容量為分區(qū)粒度的,那么假設(shè)磁盤總空間不是整數(shù)個柱面的話,不夠一個柱面的剩下的空間就是剩余空間了,這局部空般在物理上并不是依據(jù)外圍的扇區(qū)大于里圈的扇區(qū)這種治理方式,只是為了與操作系統(tǒng)兼容而抽象出來CHS。可能其實際空間容量不愿定正好為整數(shù)個柱面的容量吧。關(guān)于這點,如有高見,請告知“://ww/“://ww“mailto:zymail@vip.sina“。先來一幅構(gòu)造圖:FATMICROSOFT最早支持的分區(qū)(有關(guān)概念,后面會講到)fat12、fat16、fat32三種格式“變種“,但其根本存儲方式是相像的。DBR、FAT1、FAT2、根名目、數(shù)據(jù)區(qū)、剩余扇區(qū)的概念。提到的地址如無特別提示均為分區(qū)內(nèi)部偏移。DBR.RECORD)0512個字節(jié)(特別狀況也要占用其它保存扇區(qū),我們先說第0扇)。在這512個字節(jié)中,其實又是由跳轉(zhuǎn)指令,廠ParameterBlock)BPB,os引導(dǎo)程序,完畢標(biāo)志幾局部FAT32DBR8。3DBR3DBR中各局部的位置劃分8DBR的相關(guān)參數(shù)解釋:DBR各字節(jié)的參數(shù)意義。x86的到操作系統(tǒng)引導(dǎo)代碼局部。字節(jié)位移0x000x03字段長度3個字節(jié)8個字節(jié)字段名 跳轉(zhuǎn)指令os版本號0x0B個字節(jié)BPB0x40個字節(jié)0x5A個字節(jié)引導(dǎo)程序代碼0x01FE2個字節(jié)有效完畢標(biāo)志OEMOEMID標(biāo)識了格式化該分區(qū)的操作系統(tǒng)的名稱和版本號。為了保存與MS-DOS的兼容性,通常Windows2023格式化該盤是在FAT16和FAT3ID字段消滅Windows95OSR2Windows98格式化的磁盤上OEMID字段消滅“MSWIN4.1”。接下來的從偏移0x0B開頭的是一段描述能夠使可執(zhí)行引導(dǎo)代碼找到相關(guān)參數(shù)的信息。通常稱之為BPB(BIOSParameterBlock),BPB一般開頭于一樣的位移量,因此,標(biāo)準(zhǔn)的參數(shù)都處于一個的位置。BPBx86通過在BPB末端附加的信息,可以對BPB進(jìn)展擴(kuò)展。只需要對該跳轉(zhuǎn)指令作一個小的調(diào)整就可以適應(yīng)9FAT32分區(qū)格式的BPB45。字段字節(jié)長度8對位移(字應(yīng)取值字段字節(jié)長度8對位移(字應(yīng)取值節(jié))名稱和定義0x0 B0x0

0x0200

扇區(qū)字節(jié)數(shù)(BytesPerSector制值有512、1024、2048和4096。對大多數(shù)磁盤來說,本字段的512每簇扇區(qū)數(shù)(SectorsPerCluster),FAT32文件系統(tǒng)只能跟蹤有限個簇(4294967296個),因此,通過增加每簇扇區(qū)數(shù),可以使FAT32文件系統(tǒng)支持最大分區(qū)數(shù)。一個分區(qū)1 0x08 缺省的簇大小取決于該分區(qū)的大小。本字段的合法十進(jìn)制值有1、2、D 4、8、16、32、64和128。Windows2023的FAT32實現(xiàn)只能創(chuàng)32GB的分區(qū)。但是,Windows2023能夠訪問由其他操作系統(tǒng)(Windows95、OSR2及其以后的版本)所創(chuàng)立的更大的分區(qū)0x0e20x1010x1120x1320x1510x0020x0e20x1010x1120x1320x15100x02

括引導(dǎo)扇區(qū)。本字段的十進(jìn)制值一般為32FAT數(shù)(NumberofFAT)FAT的副本數(shù)。本字段的值一般20x000根名目項數(shù)(RootEntries)FAT12/FAT16FAT0 32分區(qū)而言,本字段必需設(shè)置為00x000小扇區(qū)數(shù)(SmallSector)(FAT12/FAT16使用此字段)FAT30 20媒體描述符(MediaDescriptor)供給有關(guān)媒體被使用的信息。值0x0xF8 F8表示硬盤,0xF0表示高密度的3.5寸軟盤。媒體描述符要用于MS-DOSFAT16Windows2023中未被使用0x16 2

0x000FAT扇區(qū)數(shù)(SectorsPerFAT)FAT12/FAT16所使用,FA0 T3200x18 2

0x003每磁道扇區(qū)數(shù)(SectorsPerTrack)INT13h的磁盤的“每A

F2 0x00FF

道扇區(qū)數(shù)”幾何構(gòu)造值。該分區(qū)被多個磁頭的柱面分成了多個磁道磁頭數(shù)(NumberofHead)INT13h的磁盤的“磁頭數(shù)”幾何構(gòu)造值。例如,在一張1.44MB3.5英寸的軟盤上,本字段2隱蔽扇區(qū)數(shù)(HiddenSector該分區(qū)上引導(dǎo)扇區(qū)之前的扇區(qū)數(shù)。在引C

4 0x000導(dǎo)序列計算到根名目的數(shù)據(jù)區(qū)確實定位移的過程中使用了該值。本字0003F13h上可見的媒體有意義。在沒有分區(qū)的媒體上它必需總是為00x20 4

0x007D043F

總扇區(qū)數(shù)(LargeSector)本字段包含F(xiàn)AT32分區(qū)中總的扇區(qū)數(shù)FAT扇區(qū)數(shù)(SectorsPerFAT)(FAT32使用)FA0x24 4

0x000TFAT數(shù)以及隱蔽扇區(qū)數(shù)(本表中01F32所描述的)來打算根名目從哪里開頭。該計算機(jī)還可以從名目中的項數(shù)打算該分區(qū)的用戶數(shù)據(jù)區(qū)從哪里開頭擴(kuò)展標(biāo)志(ExtendedFlag)(只被FAT32使用)該兩個字節(jié)構(gòu)造中各位的值為:0-3FAT數(shù)(01).0x28 2 0x000 只有在不使用鏡像時才有效0 4-6:保存7:0值意味著在運行時FAT被映射到全部的FAT1FAT是活動的8-15:保存文件系統(tǒng)版本(FileystemVersion)FAT32使用,高字節(jié)是主要AC

2 0x000的修訂號,而低字節(jié)是次要的修訂號。本字段支持將來對該FAT32媒0 Windows版本將不支持這樣的分區(qū)4 0x000根名目簇號(RootClusterNumber)(只供FAT32使用)根名目第一00002 簇的簇號。本字段的值一般為2,但不總是如此文件系統(tǒng)信息扇區(qū)號(FileSystemInformationSectorNumber)(FAT32使用)FAT32分區(qū)的保存區(qū)中的文件系統(tǒng)信息(FileSy0x30 2 10x000

stemInformation,FSINFO)1引導(dǎo)扇區(qū)(BackupBootSector)FSINFO構(gòu)造的一個副本,但是這個副本不保持更備份引導(dǎo)扇區(qū)(只供FAT32使用)0x34 2

6 區(qū)保存引導(dǎo)扇區(qū)的副本的保存區(qū)中的扇區(qū)號。本字段的值一般為6,建議不要使用其他值0x36 12 12個保存(FAT32使用)供以后擴(kuò)大使用的保存空間。本字段的值總為表表5 FAT32分區(qū)的擴(kuò)展BPB字段字節(jié)位移字段長度(字節(jié))8對應(yīng)取值字段名稱和定義0x4010x800x000x291CFE“NONAME““物理驅(qū)動器號(PhysicalDriveNumber)BIOS物理驅(qū)動器號有關(guān)。軟盤驅(qū)動器被標(biāo)識為0x00,物理硬盤被標(biāo)識為0x80,而與物理磁盤驅(qū)動器無關(guān)。一般地,在發(fā)出一個INT13hBIOS調(diào)用之前設(shè)置該值,具體指定所訪問的設(shè)備。只有當(dāng)該設(shè)備是一個引導(dǎo)設(shè)備時,這個值才有意義保存(Reserved)FAT32分區(qū)總是將本字段的值設(shè)置為0擴(kuò)展引導(dǎo)標(biāo)簽(ExtendedBootSignature)本字段必需要有能被Windows20230x280x29分區(qū)序號(VolumeSerialNumber在格式化磁盤時所產(chǎn)生的一個隨機(jī)序號,它有助于區(qū)分磁盤卷標(biāo)(VolumeLabel在,卷標(biāo)被作為一個特別文件保存在根名目中ID(SystemID)FAT32文件系統(tǒng)中一般取為“FAT32“字節(jié)均000x4110x4210x4340x47110x528DBRDBR0x5A開頭的數(shù)據(jù)為操作系統(tǒng)引導(dǎo)代碼。這是由偏移0x00開頭的跳轉(zhuǎn)指令所指向的。在0x5A。此段指令在不同的操作系統(tǒng)上和不同的引導(dǎo)方式上,其內(nèi)容也是不同的。大多數(shù)的資料上都說win98,fatwin2023,winxpDB0fat32320扇區(qū)是win98,02扇區(qū)存win2023winxp,0扇區(qū)00xAB偏移指出)os引導(dǎo)代碼。DBR2扇區(qū)(win98系統(tǒng))0xC扇區(qū)(wNTLDR雙系統(tǒng),必需知道這一點。66FAT16分區(qū)上的引導(dǎo)扇區(qū)段字節(jié)位字段長度FE4扇區(qū)完畢標(biāo)識符(0x55AA)DBR扇區(qū)的最終兩個字節(jié)一般存儲值為0x55AA的DBR有效標(biāo)志,對于其他的取值,系統(tǒng)將不會執(zhí)os0x55AA為合法完畢標(biāo)志。FAT16DBR:如此,對于FAT12和FAT16其根本意義類似,只是相關(guān)偏移量和參數(shù)意來因,以后會說到,此處不在多說FAT12與FAT16。我將FAT16的意義列表。感興趣的朋友自己爭論一下,和FAT32大同小異的。 DBR圖移0x00(字節(jié))3字段名稱跳轉(zhuǎn)指令(JumpInstruction)0x038OEMID0x0B25BPB0x2426BPB0x3E448引導(dǎo)程序代碼(BootstrapCode)77FAT16BPB字段字節(jié)位移字段長度(字節(jié))例值名稱和定義0x0B200x0D1扇區(qū)字節(jié)數(shù)(BytesPerSector硬件扇區(qū)的大小。本字段合法的十進(jìn)制值有512、1024、2048和4096。對大多數(shù)磁盤來說,本字段的值512每簇扇區(qū)數(shù)(SectorsPerCluster)一個簇中的扇區(qū)數(shù)。由于FAT16文件系統(tǒng)只能跟蹤有限個簇(最多為65536個)小。本字段合法的十進(jìn)制值有1、2、4、8、16、32、64和128。導(dǎo)致簇大于32KB(每扇區(qū)字節(jié)數(shù)*每簇扇區(qū)數(shù))的值會引起磁盤錯誤和軟件錯誤0x0e20x1010x000保存扇區(qū)數(shù)(ReservedSector)FAT開頭之前的扇區(qū)數(shù),包括1 引導(dǎo)扇區(qū)。本字段的十進(jìn)制值一般為10x02 FAT數(shù)(NumberofFAT)FAT的副本數(shù)。本字段的值一般為0x11 20x13 2

0x02000x0000

2根名目項數(shù)(RootEntries)能夠保存在該分區(qū)的根名目文件夾中的32個字節(jié)長的文件和文件夾名稱項的總數(shù)。在一個典型的硬盤上,本字段的值為512。其中一個項常常被用作卷標(biāo)號(VolumeLabel),長名稱的文件和文件夾每個文件使用多個項。文件和文件夾項的最大數(shù)一般為511,但是假設(shè)使用的長文件名,往往都達(dá)不到這個數(shù)小扇區(qū)數(shù)(SmallSector)該分區(qū)上的扇區(qū)數(shù),表示為16位(<65536)。對大于65536個扇區(qū)的分區(qū)來說,本字段的值為0,而使用大扇區(qū)數(shù)來取代它媒體描述符(MediaDescriptor)供給有關(guān)媒體被使用的信息。值0xF0x15 1 0xF8 8表示硬盤,0xF03.5寸軟盤。媒體描述符要用于MS-DOSFAT16Windows2023中未被使用FAT扇區(qū)數(shù)(SectorsPerFAT)FAT所占用的扇區(qū)0x16 2

0x00FFAT數(shù)以及隱蔽扇區(qū)數(shù)來打算根名目在哪里開C0x1820x1A20x1820x1A20x1C40x2040x0040

始。計算機(jī)還可以依據(jù)根名目中的項數(shù)(512)打算該分區(qū)的用戶數(shù)據(jù)區(qū)從哪里開頭每道扇區(qū)數(shù)(SectorsPerTrark)磁頭數(shù)(Numberofhead)0x000隱蔽扇區(qū)數(shù)(HiddenSector0x003

序列計算到根名目和數(shù)據(jù)區(qū)確實定位移的過程中使用了該值大扇區(qū)數(shù)(LargeSector)假設(shè)小扇區(qū)數(shù)字段的值為0,本字段就包含該FAT16分區(qū)中的總扇區(qū)數(shù)。假設(shè)小扇區(qū)數(shù)字段的值不為0,那么本字0字段字節(jié)長度8對

表8 FAT16分區(qū)的擴(kuò)展BPB字段位移

應(yīng)取值

字段名稱和定義物理驅(qū)動器號(PhysicalDriveNumber)BIOS物理驅(qū)動器號有關(guān)。軟盤驅(qū)動器被標(biāo)識為0x00,物理硬盤被標(biāo)識為0x80,而與物理磁0x24 10x25 10x26 1

0x80 INT13hBIOS調(diào)用之前設(shè)置該值,具體指定所訪問的設(shè)備。只有當(dāng)該設(shè)備是一個引導(dǎo)設(shè)備時,這個值才有意義0x00 保存(Reserved)FAT1600x29 擴(kuò)展引導(dǎo)標(biāo)簽(ExtendedBootSignature)本字段必需要有能被Win0x2740x2B110x368dows2023dows20230x280x290x523卷序號(VolumeSerialNumber在格式化磁盤時所產(chǎn)生的一個隨機(jī)68BA8 序號,它有助于區(qū)分磁盤“NON卷標(biāo)(VolumeLabel本字段只能使用一次,它被用來保存卷標(biāo)號?,F(xiàn)AME“6“在,卷標(biāo)被作為一個特別文件保存在根名目中文件系統(tǒng)類型(FileSystemType依據(jù)該磁盤格式,該字段的值可以FAT、FAT12FAT16DBR0x0E處,用2個字節(jié)存儲保存扇區(qū)的數(shù)目。所謂保存扇區(qū)(有時候)DBRDBRFAT1DBRFAT32中,保存扇區(qū)的數(shù)據(jù)通PartitionMagicFAT3236個保存扇區(qū),有的工具可能會設(shè)置個保存扇區(qū)。DBR2扇區(qū)(win98系統(tǒng))0xC扇區(qū)(wiOS引導(dǎo)代碼擴(kuò)展部格外,其余扇區(qū)都不參與操作系統(tǒng)治理與磁盤數(shù)據(jù)治理,通常情FAT32DBR作備份或留待以后升級時用。FAT32中,DBR0x342DBR0x06,即第6扇區(qū)。當(dāng)FAT32分區(qū)DBR扇區(qū)被破壞導(dǎo)致分區(qū)無法訪問時??梢杂玫?扇區(qū)的原備份替換第0扇區(qū)來找回數(shù)據(jù)。FAT表和數(shù)據(jù)的存儲原則FAT文件系統(tǒng)中用于磁盤數(shù)據(jù)(文件)FAT表可以認(rèn)為相當(dāng)于書中的名目,而文件就FAT表的表示方法卻與名目有很大的不同。FAT文件系統(tǒng)將組織數(shù)據(jù)時使用的名目也抽象為文件,以簡化對數(shù)據(jù)的治理?!锎鎯^程假想:FAT文件系統(tǒng)中數(shù)據(jù)的存儲原則。100KB,我們將其想象為線形的空間地址。為了存儲治理上的便利,我們?nèi)藶榈膶⑦@100KB100份,每份1KB。我們來依次存儲這樣幾20.5KB)。100KB3個文件。同時不要忘了,我們還要登記1(屬性)1KB,所以,A.TXT10個存“簇”吧。也能少打點字,呵呵。),B.TXT54個簇,C.文件大小文件名(占開頭簇(4(10個字創(chuàng)立日期、時間修改日期((占保存(12節(jié))B.TXTC.TXT1簇的空間嗎?干嘛不讓他們緊挨著,不是省地方嗎?我的答復(fù)是,假設(shè)依據(jù)這樣的方式存儲,名目中原本只需要登記簇號,現(xiàn)在還需要登記簇內(nèi)的偏移,這樣會增加名目的存儲量,而且存取沒有了規(guī)章,讀取也不太便利,是得不償失的。依據(jù)上面所說的思想,我們設(shè)計了這樣的圖4.3.1所示的存儲方式。4.3.14.3.1整個100KB空間目錄A.TXTB.TXTC.TXT占1簇10簇54簇21簇剩余14簇我們再考慮如何來寫這三個文件的名目。對于每個文件而言,確定要記錄的有:文件名,開頭簇,大小,創(chuàng)立日期、時間,修改日期、時間,文件的讀寫屬性等。這里大小能不能用完畢簇來計算呢?確定不不行,可多了也是不行的。那么我們怎么記錄呢?可以想象一下。為了治理上的便利,我們用數(shù)據(jù)庫的1KB100100B的各個位置的代表含義如圖4.3.24.3.2每行100B10行(這是例子,非Fat系統(tǒng))A.TXT1102023.3.2210:41 2023.3.2210:41只讀B.TXT1153.61949:10:112:0 2023.8.2220:40隱蔽有效記錄C.TXT6520.52023:3:821:11 2023:3:89:11系統(tǒng)10行記錄。。。內(nèi)容留空這樣設(shè)計的構(gòu)造確定可以對文件進(jìn)展正確的讀寫了。接著讓我們設(shè)計的文件系統(tǒng)工作吧。先改動個文件,這樣設(shè)計的構(gòu)造確定可以對文件進(jìn)展正確的讀寫了。接著讓我們設(shè)計的文件系統(tǒng)工作吧。先改動個文件,B.TXT決不了。b.txt4.3.34.3.44.3.44.3.4每行100B10行(這是例子,非Fat系統(tǒng))A.TXT1102023.3.2210:412023.3.2210:41只讀C.TXT6520.52023:3:821:112023:3:89:11系統(tǒng)10行記錄。。。空文件名(占開頭簇(4(10個字(10修改日期、時間(4字文件大小讀寫屬性節(jié))節(jié))4.3.34.3.3整個100KB空間目錄A.TXTC.TXT占1 簇空白54簇21簇剩余14簇這個操作看來還可以,我們接著做,在存入一個文件這個操作看來還可以,我們接著做,在存入一個文件D.txt(60.3KB),100簇的空間只用了361個連續(xù)的空間了,名目行沒方法寫了,看來無連續(xù)塊存儲臨時也不行。出空間來,但我要問你,那不是成天啥也不要干了,就是倒騰東西了嗎?看來我們設(shè)計的文件系統(tǒng)有致命的漏洞,怎么解決呢?。。。。。。。。。。其實可以這樣解決:文件名(占文件名(占50開頭簇(4(1(占保存(12字個字節(jié)) 節(jié))4.3.7文件安排表簇號12 3 ... 111213 ... 656667 ... 8687... 99...A.TXT(10)B.TXTB.TXT...B.TXT(54)C.TXTC.TXT...C.TXT(21)...(1)(2)(1)(2)個存儲空間的前部留下幾簇來記錄數(shù)據(jù)區(qū)中數(shù)據(jù)與簇號的關(guān)系。對于上例由于總空間也不大,所以用前部33.64.3.54.3.5整個100KB空間表名目A.TXTB.TXTC.TXT0簇第1簇簇12~6566~86簇87~99簇4.3.6每行100B10行(這是例子,非Fat系統(tǒng))A.TXT2102023.3.2210:41 2023.3.2210:41只讀B.TXT1253.61949:10:112:0 2023.8.2220:40隱蔽有效記錄C.TXT6620.52023:3:821:11 2023:3:89:11系統(tǒng)10行記錄。。。內(nèi)容留空第一簇用來記錄數(shù)據(jù)區(qū)中每一簇的被占用狀況,臨時稱其為文件安排表。結(jié)合文件安排表和文件名目就可第一簇用來記錄數(shù)據(jù)區(qū)中每一簇的被占用狀況,臨時稱其為文件安排表。結(jié)合文件安排表和文件名目就可4.3.7的形式記錄簇與數(shù)據(jù)的對應(yīng)。對A.A.應(yīng)目TXTX數(shù)據(jù)錄T(1)T(2)4.3.84.3.8改進(jìn)后的文件安排表簇號對應(yīng)表中記錄太多,鋪張空間,而實際上在名目中已經(jīng)記錄了文件的開頭簇了。所以可以改進(jìn)一下,用鏈的方123 ... 111213 ... 656667 ... 8687 ... 99名目34 ... FF1314 ... FF6768 ... FF00 ... 00下文件安排表的意義下文件安排表的意義如文件a.txt我們依據(jù)名目項中指定的a.txt的首簇為2,然后找到文件安排表的第2簇記錄,上面登記的是3,我們就能確定下一簇是3。找到文件安排表的第3記錄,上面登記的是4,我們就能確定下一簇是4. 第11簇,覺察下一個指向是FF,就是完畢。文件便絲毫無誤讀取完畢。b.txt60.3KBd.txt。利用簇4.3.94.3.104.3.114.3.9整個100KB空間劃分文件安排表名目A.TXTD.TXTC.TXTD.TXT空0簇1簇第2~1112~6566~8687~93簇94~99簇4.3.10文件安排表簇號123 ... 11 12 13 ... 65 66 67 ... 868788 ... 93 94 ... 99對應(yīng)數(shù)據(jù)目錄34 ... FF 13 14 ...8767 68 ... FF 88 89 ... FF 00 ... 004.3.11名目每行100B10行(這是例子,非Fat系統(tǒng))共10A.TXT2102023.3.2210:412023.3.2210:41只讀行行記錄C.TXT6620.52023:3:821:112023:3:89:11系統(tǒng)D.TXT1260.31999:5:18:002023:3:2014:0存檔。。。內(nèi)容留空讀寫屬性保存(12(4字字節(jié))節(jié))(占創(chuàng)立日期、時間修改日期、時間fatfat文件系統(tǒng)的思想下邊)。存儲原理:文件系統(tǒng)時,fat文件系統(tǒng)就將這個分區(qū)當(dāng)成整塊可安排的區(qū)域進(jìn)展7FAT16局部提取出來,具體描述一下:較早推出的文件系統(tǒng),具有高度兼容性,目前照舊廣泛應(yīng)用于個人電腦尤其是移FATFATFAT16用來記FAT將磁盤空間按確定數(shù)目的扇區(qū)為單位進(jìn)展劃5122n(n為整數(shù))32K512Bfat表94.3.12Fat16的組織形式引導(dǎo)扇區(qū)FAT1的)根文件夾其他文件夾及全部文件(2開頭)剩余扇區(qū)1扇區(qū)實際狀況取大小32個扇區(qū)缺乏一簇分區(qū)空間大小分區(qū)大小與對應(yīng)簇大小每個簇的扇區(qū)簇空間大小0MB-32MB1個字節(jié)33MB-64MB21k65MB-128MB42k129MB-225MB84k256MB-511MB168k512MB-1023MB3216k1024MB-2047MB6432k2048MB-4095MB12864k326808個扇區(qū)。不管用戶是使用磁盤治理format12FAT。12FAT,F(xiàn)AT12FAT的初始實現(xiàn)形式,是針對小FAT16FAT32FAT125.251.44MB3.56均一樣,不再單獨解釋。。。分區(qū)時,格式化程序依據(jù)分區(qū)的大小確定簇的大小,然后依據(jù)保存扇區(qū)的數(shù)目、根名目FAT表所需的扇區(qū)數(shù)目,然后將計算后的DBR的相關(guān)位置。FAT16DBR0x110x16記錄了FAT表所占扇區(qū)的數(shù)據(jù)。偏移0x10記錄了FAT表的副本數(shù)目。系統(tǒng)在得到這幾項參數(shù)以后,就可以確定數(shù)據(jù)區(qū)的開頭扇區(qū)偏移了。32個扇區(qū)之后的第一個扇區(qū)開頭以簇為單位進(jìn)展數(shù)據(jù)的處理,這之01(可能是留作關(guān)鍵字的)212簇。FAT12,16,32FAT表用來記錄任意一簇鏈接的二16位)。所以,F(xiàn)AT16最大可以表示可以治理的最大磁盤空間為:32FAT162GB分區(qū)的緣由。FATFAT表實際上是一個數(shù)據(jù)表,以2個字節(jié)為單位,我們暫將這個單位稱為FAT記錄項,通常狀況其第鏈狀況。依據(jù)簇的表現(xiàn)狀況FAT用相應(yīng)的取值來描述,見表10FAT16記錄項的取值00000002~FFEFFFF0~FFF6FFF7FFF8~FFFF

10FAT16記錄項的取值含義(16進(jìn)制)對應(yīng)簇的表現(xiàn)狀況系統(tǒng)保存壞簇文件完畢簇FAT1610:FFFFFF“2FAT表簇鏈關(guān)系。小紅字FAT2字節(jié)對應(yīng)的簇號。(1簇)FF,2簇上的文件(名目)是個1個簇便完畢了。第3簇中存放的數(shù)據(jù)是0x0005,這是一個文件或文件夾的首簇。其內(nèi)容為第5簇,就是說接下來的簇FAT5簇指向,上面寫的數(shù)據(jù)是“FFFF“,意即此文件到此簇已至結(jié)尾。第4簇中存放的數(shù)據(jù)是0x0006,這又是一個文件或文件夾的首簇。其內(nèi)容為第6簇,就是說接下來的〉FATFAT60x0007,就是說接下〉FATFAT7簇指向……FAT鏈讀取到扇區(qū)相對14簇——〉14簇的內(nèi)容為“FFFF“,意即此文件到此簇已至結(jié)尾。FAT表數(shù)據(jù)與上面的道理一樣。不再分析。Microsoft為其。FAT2FAT1的內(nèi)容通常是FAT1FAT2也同樣被更。假設(shè)從這個角度來看,系統(tǒng)的這個功能在數(shù)據(jù)恢復(fù)時是個天災(zāi)。FAT分區(qū)內(nèi)的任一文件(包括文件夾),均需從根名目尋址來找到??梢赃@樣認(rèn)為:名目存儲構(gòu)造的入口就是根名目。T文件系統(tǒng)依據(jù)根名目來尋址其他文件包括文件夾DBRDBRFAT表(2份)的大小表表11 FAT16名目項32個字節(jié)的表示定義字節(jié)偏移(16進(jìn)制)0x0~0x70x8~0xA字節(jié)數(shù)83定義文件名擴(kuò)展名屬0xB1性字00000000(讀寫)00000001(只讀)00000010(隱蔽)00000100(系統(tǒng))00001000(卷標(biāo))來確定的。格式化以后,根名目的大小和位置其實都已經(jīng)確定下來了:位置緊隨FAT2之后,大小通常為FAT文件系統(tǒng)的另一個重要思想是把名目(文件夾)當(dāng)作一個特別的文件來處理,F(xiàn)AT32甚至將根名目當(dāng)作文件處理(旁:NTFS將分區(qū)參數(shù)、安全權(quán)限等好多東西抽象為文件更是這個思想的升華),在FAT16中,雖然根名目地位并不等同于一般的文件或者說是名目,但其組織形式和一般的名目(文件夾)并沒有不同。FAT分區(qū)中全部的文件夾(名目)文件,實際上可以看作是一個存放其他文件(文件夾)入口參數(shù)的數(shù)據(jù)0。通常是占很小的空間的,可以看作名目文件是一個簡潔的二維表文件。其具體存儲原理是:不管名目文件所占空間為多少簇,一簇為多少字節(jié)。系統(tǒng)都會以32個字節(jié)為單位進(jìn)展名目文件所占簇的安排。這32個字節(jié)以確定的偏移來定義本名目下的一個文件(或文件夾)的屬性,實際上是一個簡潔的二維表。節(jié)00010000(子名目)0xC~0x151000100000(歸檔)系統(tǒng)保存0x16~0x172文件的最近修改時間0x18~0x192文件的最近修改日期0x1A~0x1B2表示文件的首簇號0x1C~0x1F4表示文件的長度11中的一些取值進(jìn)展說明:字節(jié)記錄文ASCII碼值。不記錄主文件名與擴(kuò)展名之間“.“(20H)填充3個字符同樣以空白符(20H)填充。0x000H,說明名目項為空;假設(shè)為E5H,說明名目項曾被使用,但對應(yīng)的文件或文件夾已被刪除。(這也是誤刪除后恢復(fù)的理論依據(jù))。文件名中的第一個字符假設(shè)為“.”或“..”表示這個簇記錄的是一個假設(shè)磁盤數(shù)據(jù)被破壞,就可以通過這兩個名目項的具體參數(shù)推算磁盤的數(shù)據(jù)區(qū)的起始位置,猜測簇的大小等等,故而是比較重要的)0xB8位,用其中的一位代表某種屬性的有00000101就表示這是個文件,屬性是只讀、系統(tǒng)。WINDOWS系統(tǒng)中有時也用它來FAT32FAT32。中的時間=小時*2048+分鐘*32+秒/2。得出的結(jié)果換算成16進(jìn)制填入即可。也2位是分鐘;0x173~7位是小時。月份*32+16進(jìn)制填入即1980~2099Windows0~127,即年2107年。FAT表中找到入口,0x1C~0x1F(名目)了。(指非名目文件)不同0xB410。假設(shè)簇的大小設(shè)定為2扇區(qū),就會有1個扇區(qū)無法安排給任何一個簇。這就是分區(qū)的剩余扇區(qū),位于分區(qū)DBR,這也是一種好的備份方法。WindowsFAT16上的長文件名了。FAT32FAT32局部再具體作解釋。存儲原理:MicrosoftNTFS鋪天蓋地襲FAT16FAT32還是成功的。4.3.13FAT32分區(qū)的根本構(gòu)成。引導(dǎo)引導(dǎo)扇區(qū)其余保存扇區(qū)4.3.13Fat32的組織形式FAT21扇區(qū)31個扇區(qū)(重復(fù)的)實際狀況取大同F(xiàn)ATFAT1根文件夾首簇其他文件夾及全部文件剩余扇區(qū)小12簇缺乏一簇保存扇區(qū)BPB參數(shù)是很重要的,可以回過頭來看一下表4和表5。首先FAT32保存扇區(qū)的數(shù)目默認(rèn)為32個,而不是FAT16的僅僅一個。這樣的好處是有助于磁盤DBR指令的長度擴(kuò)展,而且可以為DBR扇區(qū)留有備份空間。上面我們已經(jīng)提到,構(gòu)建在FAT32上的win98或win2023、winXP,其操作系統(tǒng)引導(dǎo)代碼并非只占一個扇區(qū)了。留有多余的保存扇區(qū)就可以很好的拓展OS引導(dǎo)代碼。在BPB中也記錄了DBR扇區(qū)的備份扇區(qū)編號。備份扇區(qū)可以讓DBR。FAT32 的文件安排表的數(shù)據(jù)構(gòu)造照舊和FAT16一樣,所不同的是,F(xiàn)AT32將記錄簇鏈的二進(jìn)制位數(shù)FAT32。32FAT表最大可以尋址2T個簇。這樣即使簇的大小為1扇區(qū),理論上照舊能夠?qū)ぶ?TB范圍內(nèi)的分區(qū)。但實際中FAT32是不能尋表的記錄數(shù)會變得臃腫不堪,嚴(yán)峻影響系統(tǒng)的性能。32GBFAT32WIN2023OS3WIN98127GBFAT32分區(qū),但這樣沒必要也分區(qū)變大時,假設(shè)簇很小,文件安排表也隨之變大。照舊會有上面的效率問題存在。既要有效地讀寫大文件,又要最大可能的削減空間的鋪張。FAT32同樣規(guī)定了相應(yīng)的分區(qū)空間對應(yīng)的簇的大小,見表12:分區(qū)空間大小每個簇的扇區(qū)數(shù)(字節(jié))<8GB84k168k3216k>=32GB6432kFAT1613:13FAT各系統(tǒng)記錄項的取值含義(16進(jìn)制)FAT12記錄項的FAT16記錄項的取

FAT32記錄項的取值

對應(yīng)簇的表現(xiàn)狀況取值000FF0~FF6FF7FF8~FFF

值00000002~FFEFFFF0~FFF6FFF7FFF8~FFFF

0000000000000002~FFFFFFEFFFFFFFF0~FFFFFFF6FFFFFFF7FFFFFFF8~FFFFFFFF0FFFFFF8~0FFFFFFF

系統(tǒng)保存壞簇文件完畢簇分區(qū)大小與對應(yīng)簇大小FAT32的另一項重大改革是根名目的文件化,馬上根名目等同于一般的文件。這樣根名目便沒有了FA分區(qū)大小與對應(yīng)簇大小14.3.12中也是按這種狀況制作的畫的。12簇,通常為根名目所用(FAT的根名目并不占簇區(qū)空間,321個簇)FAT16FAT16有所不同,一方面它中的名目項保存字段,同時又完全支持長文件名了。對于短文件格式的名目項。其參數(shù)14:14FAT32短文件名目項32個字節(jié)的表示定義字節(jié)偏移(16進(jìn)制)字節(jié)數(shù)定義0x0~0x78文件名0x8~0xA3擴(kuò)展名00000000(讀寫)00000001(只讀)00000010(隱蔽)0xB*1屬性字節(jié)00000100(系統(tǒng))00001000(卷標(biāo))00010000(子名目)0xC100100000(歸檔)系統(tǒng)保存0xD1創(chuàng)立時間的10毫秒位0xE~0xF2文件創(chuàng)立時間0x10~0x112文件創(chuàng)立日期0x12~0x132文件最終訪問日期0x14~0x152文件起始簇號的高16位0x16~0x172文件的最近修改時間0x18~0x192文件的最近修改日期0x1A~0x1B2文件起始簇號的低16位0x1C~0x1F4表示文件的長度0FH,0FH,名目段為長文件名名目段說明:說明:FAT32短文件格式名目項的意義。其中文件名、擴(kuò)展名、時間、日期的算法和FAT16時相同的。0x14~0x1516位。表表15 FAT32長文件名目項32個字節(jié)的表示定義字節(jié)偏移(16進(jìn)制)字節(jié)數(shù)定義76保存未用5保存未用0x01屬性字節(jié)位意義432挨次號數(shù)值FAT324GB的文件(名目4GB),系統(tǒng)會截斷處理。的一個重要的特點是完全支持長文件名。長文件名照舊是記錄在名目項中的。為了低版本的OS或程序能正確讀取長文件名文件,系統(tǒng)自動為全部長文件名文件創(chuàng)立了一個對應(yīng)的短文件名,使對應(yīng)數(shù)OS或程序會無視它認(rèn)為不合法的長文件名字段,而支持長文件名的OS或程序則會以長文件名為顯式項來記錄和編輯,并隱蔽起短文件名。當(dāng)創(chuàng)立一個長文件名文件時,系統(tǒng)會自動加上對應(yīng)的短文件名,其一般有的原則:、取長文件名的前6個字符加上“~1“形成短文件名,擴(kuò)展名不變。、假設(shè)已存在這個文件名,則符號“~“5?!皛1“直到最終(假設(shè)有必要,或是其他數(shù)字以避開重復(fù)的文件名)。即其值為0FH時,DOS和WIN32會認(rèn)為其不合法而無視其存在。這正是長文件名存在的依據(jù)。將名目項文件需要多個名目項,這時長文件名的各個名目項按倒序排列在名目表中,以防與其他文件名混淆。形式編碼(一個巨大的進(jìn)步哦2字節(jié)的空間。其名目10x1~0xA100unicode碼①0xB1長文件名名目項標(biāo)志,取值0FH0xC1系統(tǒng)保存0xD1校驗值(依據(jù)短文件名計算得出)0xE~0x1912unicode碼②0x1A~0x1B 20x1C~0x1F 4

文件起始簇號(目前常置0)unicode碼③unicode2613個字符然后緊跟其對應(yīng)的短文件名15可以看出,長文件名中并不存儲對應(yīng)文件的文件開頭簇、文件大小、各種時間和日期屬性。文件的這些屬性還是存放在短文件名名目項中,一個長文件名總是和其相應(yīng)的短文件名一一對應(yīng),沒有了長文件名還可以用短文件名讀,但長文件名假設(shè)沒有對應(yīng)的短文件名,不管什么系統(tǒng)都將無視其存在。所以短文件名是至對首字符改寫E5H),都會使長文件名形同虛設(shè)。長文件名和短文件名之間的聯(lián)系光靠他們之間的位置關(guān)系維系明顯遠(yuǎn)遠(yuǎn)不夠。其實,長文件名的0xD字節(jié)的校驗和起很重要的作用,此校驗和是用短文件名的11個字符通過一種運算方式來得到的。系統(tǒng)依據(jù)相應(yīng)的算法來確定相應(yīng)的長文件名和短文件名是否匹配。這個算法不太簡潔用公式說明,我們用一段c程序來加以說明。shortname[],chknum表示。得到過程如下:inti,j,chknum=0;for(i=11;i>0;i--)chksum=((chksum&1)?0x80:0)+(chksum>>1)+shortname[j++];注:0x80,chksum右移(>>)一位的值,再加上每個字符的代碼0xD偏移處數(shù)據(jù)不相等。系統(tǒng)無論如何都不會將它們配對的。FAT32上數(shù)據(jù)的讀取便游刃有余了。五、實例分析。以下是一幅根名目入口截圖: 圖11進(jìn)60113,意為這是第三個名目項。意為第三個名目項是這個長文件名名目項的02,表示是其次項名目項按倒序排列,所以其次項反而在后面;0x43040xB0x0F,表示這是長文件名;0xD位置為F9,表示校驗碼為F9。0x1A~0x1B位置兩個字節(jié)常置0。系統(tǒng))a.FAT表入口,只有一個文件的時候,就是上圖介紹的那個文件〔上圖是用WINHEX軟件翻開。此文件大小為9,858U盤每一個簇只占用一個扇區(qū)??匆砸韵聢D:0x804開頭,這個文件從根名目完畢后的第一個位置(2個簇)開頭寫入文件內(nèi)容,到0x82B完畢,共占用20個簇,一個簇是一個扇區(qū),因此占用20*512=10240字節(jié)。圖1FATFAT表2個簇〕的位置,依此類推。0x84,就是4個扇區(qū),DBR04個扇區(qū)。以以下圖是這個文件的數(shù)據(jù)區(qū)入口:

扇區(qū)每個FAT表占250個扇區(qū)所以數(shù)據(jù)區(qū)開頭處就是0x43000開頭了。過了250*2+32=532個扇區(qū),加上前FAT表前有4個扇區(qū),所以圖中顯示“當(dāng)前所在扇區(qū)”為536。以以下圖是這個文件數(shù)據(jù)區(qū)的完畢位置。 圖14滿。由圖110x4307C~0x4307F是文件大小,即0x00002682,十進(jìn)9858字節(jié),從圖可以計字節(jié)。以上單個文件比較簡潔,以下介紹在剛剛的單文件的根底上創(chuàng)立一個空文件夾。以以下圖為參與空文件夾后根名目截圖:

15可以看出,名稱為“建文件”的0x3F0A0E5表示刪除。0x3F11A~0x,這個數(shù)據(jù)所表示的簇的位置又是一個名目表,類似于根名目表,組織數(shù)16:FAT表入口圖:17文件之后的一55516,空556扇區(qū)。如圖16,0x458002E表示該名目項是當(dāng)前名目的記錄,位置在鏈方法即可。COPY入一個文件,看一下是什么變化。如下是根名目入口截圖:18根名目入口截圖1516的變化:19文件夾的名目項記錄0x4587FAT表的變化:表FAT0x82E~0x82F處開頭,此處位置17號簇位置,這個文件占用兩個簇。這樣每個名目的名目項記錄都可以用跟文件一樣的方式用簇鏈0x82C~0x82D位置的文件夾,假設(shè)這個文件夾內(nèi)有很多的文件或是文件夾,則有可能位置這個簇就寫不下這么多的名目項記錄,那么就可以轉(zhuǎn)到一個空的簇連續(xù)寫,而只FAT表中同樣的位置寫入結(jié)尾標(biāo)志中有所記錄。名目項記錄不管在數(shù)據(jù)區(qū)的哪個地方,所記錄的文件或名目的位置都會在FAT表中寫入,而號簇呢?固然可以,這個0x01號就是根名目,只是它占用的不是一個簇,而是一個規(guī)定大,假設(shè)這個范圍不夠用也是可以如簇鏈一樣擴(kuò)展的。0x00號的F8FF可以看成是開頭標(biāo)志吧。請看下面拷入文件在數(shù)據(jù)區(qū)數(shù)據(jù)入口圖 0x82E~0x82F0x170x45A00COPY入一個空文件夾,空文件夾名稱為:888888888888888888888888888888,現(xiàn)在來看看截圖: 處寫入了參與的文件夾名目項入口位置。下面來看根名目有無變化。(第504扇區(qū),見前圖)扇區(qū))的名目項。 第一重名目的名目項0x458EB=0x10表示為文件夾而不是文件。0x458FA~0x45559扇區(qū)),如下:0x45E1A~0x45E1B處所表示的位指明白父名目的名目項位置?,F(xiàn)在說一下長文件名跨扇區(qū)和跨簇的問題。先看四張圖 圖25 圖26圖27 圖28252627282525是一張根名目其次扇區(qū)的截圖,由圖可知0x3F3A0開頭的名目項,到末尾并未寫完,而是接到下一個扇區(qū)了(見圖26),由于根名目是連續(xù)的,所以這種狀況27270x45E000x190x45FA00x19FAT表圖(29)29簇E0x43000+(0x2E-0x2)*512=0x48800,由圖0x48800,2827。這個就是文件名名目項跨簇?,F(xiàn)在說一下刪除的問題。記錄的每個32字節(jié)的第一個字節(jié)標(biāo)為:0xE5,FAT表同位置置0x00,面不是把文件的數(shù)據(jù)區(qū)的內(nèi)容全部清0,這就是為什么文件刪除后,只要不對盤進(jìn)展任何寫操作,就還能找的緣由。如以以下圖,第一個文件夾內(nèi)刪除一個文件后的FAT表。 圖30第一個文件內(nèi)刪除一個文件FAT表圖圖圖31 第一個文件內(nèi)刪除一個文件根名目圖根名目沒有任何變化?,F(xiàn)在看子名目的名目項圖32第一個文件內(nèi)刪除一個文件后這個文件夾的名目項圖0xE5標(biāo)記,表示該文件被刪除。但這個記錄項其它內(nèi)容一點都沒有改動,其中就有文件在數(shù)據(jù)區(qū)的起始位置記錄,這個起始記錄沒有破壞,并且還記錄有文件長度,所以文件還可以找回一局部來。即可以至少找回一個簇,假設(shè)這個文件在存儲時是連續(xù)簇存儲,則可以完全找回,假設(shè)不是,則只能找回一個簇的內(nèi)容,其它簇的內(nèi)容由于FAT表對應(yīng)位置清零,就不能找回了。x表示〕1188888888888888FAT表288888888888888視圖(上圖)附圖3文件夾88888888888888刪除之前父名目XXXXXXXXXXXXXXXXXX文件夾的名目表488888888888888內(nèi)的一個子名目5kkkk.ghtt的名目表511kkkkkkkkkFAT表611kkkkkkkkk11kkkkkkk的名目表11kkkkkkkkk時完全一樣。711kkkkkkkkk文件夾后文件夾888888888888888的名目表8888888888888888FAT表附圖9刪除888888888888文件夾后的XXXXXXXXXXXXX文件夾名目表附圖10刪除888888888888文件夾后的8888888888888888888的名目表附圖11刪除8888

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論