文件系統
數據恢復是挽救遭受計算機病毒破壞后的一個有效彌補手段
數據恢復所需要的最基本的基本知識是硬盤和文件系統的結構
文件系統簡介
磁盤分區后只是划分了存儲數據的空間,還需要文件系統將分區空間內的文件組織管理起來。
與文件系統相關的組成部分有:操作系統引導記錄(DOS Boot Record,DBR)、文件分配表(File Allocation Table, FAT)、文件目錄表(File Directory Table, FDT)、數據區(DATA)。
文件系統簡介
FAT可以理解成為一種文件管理系統,它可以追蹤記錄每一段程序或文件的位置。
FAT文件系統將數個扇區合並成一個簇(Cluster),作為文件分配存儲空間的基本單位,因為當分區容量較大時,選用扇區管理會增加FAT表的項數。
一個簇所占用的空間由OS和磁盤類型共同決定,通常可以將磁盤的容量除以64KB(65536個字節),將得到的數據進位到最接近2的冪方數而得到簇的大小。
FAT表的大小及位置
磁盤上共有FAT表的兩個復制,一個是基本FAT表FAT1,另一個是FAT表的備份FAT2。
第二個FAT表為第一個FAT表的備份。
FAT在磁盤上安排在緊接操作系統引導扇區DBR之后。
FAT占用多少個扇區因硬盤分區情況和邏輯盤的容量大小的不同而不同。
文件目錄表
文件目錄表(FDT),也稱根目錄DIR(Root Directory),緊跟在FAT表之后。
FDT記錄根目錄下每個文件(目錄)的起始單元、文件屬性等。
定位文件位置時,操作系統根據FDT中的起始單元,結合FAT表就可以確定文件在磁盤中的具體位置和大小。
早期系統中FDT長度固定,最多只能有512項,為突破此限制,根目錄采用和子目錄一樣的方式來管理,稱為根目錄文件。
數據區
數據(DATA)區,是真正意義上的數據存儲的地方,位於FDT區之后,占據硬盤上的大部分空間。
文件的簇號鏈
磁盤格式化后,用戶文件以簇為單位存放在數據區中,一個文件至少占用一個簇。
磁盤上的每個可用簇在FAT只有一個登記項,通過在對應簇號的登記項內填入表項值來表明數據區中的該簇的狀態。
一、FAT16文件系統(內存小於等於2GB)
簡稱為FAT
文件結構
-----
|MBR|
-----
|DBR及其保留扇區| //DOS引導記錄,操作系統引導記錄
-----
|FAT1| //文件分配表
-----
|FAT2| //備份FAT1
-----
|FDT| //根目錄,一般占用32個扇區
-----
|DATA| //數據區
-----
簇:
每簇扇區數:...個扇區為一個簇
跳轉到相應位置:
MBR->DBR
DBR->FAT1:需要跳轉保留扇區大小(從當前位置)
FAT1->FAT2:需要跳轉FAT1的大小(從當前位置)
FAT2->FDT:需要跳轉FAT2的大小(從當前位置,FAT1的大小等於FAT2的大小)
FDT->DATA:需要跳轉FDT的大小(從當前位置,FDT的大小一般為32個扇區)
DATA:需要從DBR中知道每簇扇區數,這樣就可以找到相應的文件
跳轉至文件:
DATA區:從2號簇開始記錄,
需要找到相應文件的話,(文件所在簇-2)*每簇扇區數=相對DATA的文件所在扇區
跳轉至文件開始的位置(相對DATA的文件所在扇區),然后加上文件大小,即可到達文件末尾。
總結:MBR---隱藏扇區數---DBR---保留扇區數---FAT1---FAT表大小---FAT2---FAT表大小---FDT(尋找文件信息)---32個扇區---DATA
BPB目錄的分析
DBR目錄的分析
| FAT32分區上DBR中各部分的位置划分 | ||
|---|---|---|
| 字節位移 | 字段長度 | 字段名 |
| 0x00 | 3個字節 | 跳轉指令 |
| 0x03 | 8個字節 | 廠商標志和os版本號 |
| 0x0B | 53個字節 | BPB |
| 0x40 | 26個字節 | 擴展BPB |
| 0x5A | 420個字節 | 引導程序代碼 |
| 0x01FE | 2個字節 | 有效結束標志 |
FDT目錄的分析
二、FAT32文件系統
FAT32文件系統由DBR及其保留扇區、FAT1、FAT2、DATA區四個部分組成。
①FAT32 DBR
DBR區即操作系統引導記錄扇區,通常占用分區的第0扇區共512個字節。
內容包括:跳轉指令、廠商標志和操作系統版本號、BPB(BIOS Parameter Block)、擴展BPB、OS引導程序、結束標志幾部分組成。
| FAT32分區上DBR中各部分的位置划分 | ||
|---|---|---|
| 字節位移 | 字段長度 | 字段名 |
| 0x00 | 3個字節 | 跳轉指令 |
| 0x03 | 8個字節 | 廠商標志和os版本號 |
| 0x0B | 53個字節 | BPB |
| 0x40 | 26個字節 | 擴展BPB |
| 0x5A | 420個字節 | 引導程序代碼 |
| 0x01FE | 2個字節 | 有效結束標志 |
MBR將CPU執行轉移給引導扇區,因此,引導扇區的前三個字節必須是合法的可執行的基於x86的CPU指令。
這通常是一條跳轉指令,該指令負責跳過接下來的幾個不可執行的字節(BPB和擴展BPB),跳到操作系統引導代碼部分。
跳轉指令之后是8字節長的OEM ID,它是一個字符串, OEM ID標識了格式化該分區的操作系統的名稱和版本號。
為了保留與MS-DOS的兼容性,通常Windows 2000格式化該盤是在FAT16和FAT32磁盤上的該字段中記錄了“MSDOS 5.0”。
在NTFS磁盤上(關於ntfs,另述),Windows 2000記錄的是“NTFS”。通常在被Windows 95格式化的磁盤上OEM ID字段出現“MSWIN4.0”,在被Windows 95 OSR2和Windows 98格式化的磁盤上OEM ID字段出現“MSWIN4.1”。
接下來的從偏移0x0B開始的是一段描述能夠使可執行引導代碼找到相關參數的信息。通常稱之為BPB(BIOS Parameter Block)。
BPB一般開始於相同的位移量,因此,標准的參數都處於一個已知的位置。磁盤容量和幾何結構變量都被封在BPB之中。
由於引導扇區的第一部分是一個x86跳轉指令。因此,將來通過在BPB末端附加新的信息,可以對BPB進行擴展。只需要對該跳轉指令作一個小的調整就可以適應BPB的變化。
0DH~0DH:每簇扇區數
- 每簇扇區數記錄着文件系統的簇大小,即由多少個扇區組成一個簇。
- FAT32最大支持128扇區的簇。
- 在FAT32文件系統中所有的簇從2開始進行編號,每個簇都有一個自己的地址編號,並且所有的簇都位於數據區內,在數據區之前是沒有簇的。
1CH~1FH:隱藏扇區數
- 隱藏扇區數是指本分區之前使用的扇區數,該值與分區表中所描述的該分區的起始扇區號一致。
- 對於主磁盤分區來講,是MBR到該分區DBR之間的扇區數;對於擴展分區中的邏輯驅動器來講,是其EBR到該分區DBR之間的扇區數。
2CH~2FH:根目錄首簇號
- 分區在格式化為FAT32文件系統時,格式化程序會在數據區中指派一個簇作為FAT32的根目錄區的開始,並把該簇號記錄在BPB中。
- 通常都是把數據區的第一個簇分配給根目錄使用,也就是2號簇。
30H~31H:文件系統信息扇區號
- FAT32文件系統在DBR的保留扇區中安排了一個文件系統信息扇區,用以記錄數據區中空閑簇的數量及下一個空閑簇的簇號,該扇區一般在分區的1號扇區,也就是緊跟着DBR后的一個扇區
②FAT表的大小及位置
磁盤上共有FAT表的兩個復制,一個是基本FAT表FAT1,另一個是FAT表的備份FAT2。
FAT在磁盤上安排在緊接操作系統引導扇區DBR之后。
FAT占用多少個扇區因硬盤分區情況和邏輯盤的容量大小的不同而不同。
FAT(File Allocation Table)文件分配表
- FAT文件系統一般有兩份FAT,它們由格式化程序在對分區進行格式化時創建,FAT1是活動FAT,FAT2是備份FAT。
- FAT1跟在DBR之后,其具體地址由DBR的BPB參數中偏移量為0EH~0FH的兩字節描述;FAT2跟在FAT1之后,其地址可以用FAT1的所在扇區號加上每個FAT所占的扇區數獲得。
- FAT表是由FAT表項構成的,我們把FAT表項簡稱為FAT項,每個FAT項的大小32位。
- FAT表的前兩個FAT項有專門的用途:0號FAT項通常用來存放分區所在的介質類型,例如硬盤的介質類型為“F8”,那么硬盤上分區的FAT表第一個FAT項就以“F8”開始;1號FAT項則用來存儲文件系統的骯臟標志,表明文件系統被非法卸載或者磁盤表面存在錯誤。
- 分區的數據區中每一個簇都會映射到FAT表中的唯一一個FAT項。因為0號FAT項和1號FAT項有特殊用途,無法與數據區中的簇形成映射,所以從2號FAT項開始跟數據區中的第一個簇映射。
- 數據區中的第一個簇編號為2號簇,然后3號簇跟3號FAT項映射,以此類推,直到數據區中的最后一個簇。
-
-
③文件目錄表
文件目錄表(FDT),也稱根目錄DIR(Root Directory),緊跟在FAT表之后。
FDT記錄根目錄下每個文件(目錄)的起始單元、文件屬性等。
定位文件位置時,操作系統根據FDT中的起始單元,結合FAT表就可以確定文件在磁盤中的具體位置和大小。
早期系統中FDT長度固定,最多只能有512項,為突破此限制,根目錄采用和子目錄一樣的方式來管理,稱為根目錄文件。
FAT32文件系統目錄項
目錄存儲位置
在FAT32文件系統下,分區根目錄下的文件及文件夾的目錄項存放在根目錄區中,分區子目錄下的文件及文件夾的目錄項存放在子目錄區中,根目錄區和子目錄區都在數據區中。
FAT32的目錄項為四類
短文件名目錄項。
長文件名目錄項。
“.”目錄項和“..”目錄項。
卷標目錄項。
14H~15H:文件起始簇號的高位
- 這兩個字節作為文件起始簇號的高位使用。
1AH~1BH:文件起始簇號的低位
-
這兩個字節作為文件起始簇號的低位使用。
-
FAT32的目錄項中,文件起始簇號占用4字節,把偏移14H~15H處的兩個字節作為高位,跟該偏移處的兩個字節和在一起,得到文件開始簇號。
1CH~1FH:文件大小
- 文件大小占用4字節,記錄着文件的總字節數。
FAT32文件系統目錄項
目錄存儲位置
在FAT32文件系統下,分區根目錄下的文件及文件夾的目錄項存放在根目錄區中,分區子目錄下的文件及文件夾的目錄項存放在子目錄區中,根目錄區和子目錄區都在數據區中。
FAT32的目錄項為四類
短文件名目錄項。
長文件名目錄項。
“.”目錄項和“..”目錄項。
卷標目錄項。
長文件名目錄項:
當創建一個長文件名時,其對應短文件名的存儲有以下三個處理原則:
- 系統取長文件名的前6個字符加上“~1”形成短文件名,其擴展名不變;
- 如果已存在這個名字的文件,則符號“~”后的數字自動增加;
- 如果有DOS和Windows 3.x非法的字符,則以下畫線“_”替代。
-
-
④數據區
數據(DATA)區,是真正意義上的數據存儲的地方,位於FDT區之后,占據硬盤上的大部分空間。
文件的簇號鏈
磁盤格式化后,用戶文件以簇為單位存放在數據區中,一個文件至少占用一個簇。
磁盤上的每個可用簇在FAT只有一個登記項,通過在對應簇號的登記項內填入表項值來表明數據區中的該簇的狀態。
⑤保留扇區
所謂保留扇區是指從分區DBR扇區開始的僅為系統所有的扇區,包括DBR扇區。
在FAT16文件系統中,保留扇區的數量通常設置為1,即僅僅DBR扇區。
在FAT32中,保留扇區的數量通常取為32。
FAT32中的保留扇區除了磁盤邏輯0扇區用作DBR,邏輯2扇區(win98)或0xC扇區(Win2000/XP)用作OS引導代碼擴展部分外,部分用於備份和升級,其余通常閑置。
閑置扇區為病毒提供了棲息之地。
定位FAT1的步驟
- 系統通過該分區的分區表信息,定位到其DBR扇區;
- 讀取DBR的BPB,主要讀取“DBR保留扇區數”這個參數,它在DBR的0EH~0FH偏移處;
- 讀取到“DBR保留扇區數”這個參數的值為6之后,跳轉到該分區的6號扇區,這里就是FAT1的開始。
- FAT2的位置:用“DBR保留扇區數”加上“每FAT扇區數”。
