日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

硬盘存储结构及分区简介

發布時間:2023/12/25 综合教程 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 硬盘存储结构及分区简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

硬盤結構簡介:

很久以前, 硬盤的容量還非常小的時候,人們采用與軟盤類似的結構生產硬盤. 也就是硬盤盤片的每一條磁道都具有相同的扇區數. 由此人們定義硬盤參數為(CHS)參數,即磁頭數(Heads),柱面數(Cylinders),扇區數(Sectors),以及相應的尋址方式。

其中:

磁頭數表示硬盤總共有幾個磁頭,也就是有幾面盤片,最大為255 (用8個二進制位存儲);

柱面數表示硬盤每一面盤片上有幾條磁道, 最大為1023(用10個二進制位存儲);

扇區數(Sectors) 表示每一條磁道上有幾個扇區, 最大為63 (用6個二進制位存儲);

每個扇區一般是 512個字節, 理論上講這不是必須的, 但好象沒有取別的值的;

所以磁盤最大容量為:255 * 1023 * 63 * 512 / 1048576 = 8024 GB ( 1M = 1048576 Bytes )

或硬盤廠商常用的單位:255 * 1023 * 63 * 512 / 1000000 = 8414 GB ( 1M = 1000000 Bytes )

在 CHS 尋址方式中, 磁頭, 柱面, 扇區的取值范圍分別為 0 到 Heads – 1,0 到 Cylinders - 1,1 到 Sectors (注意是從 1 開始)

在老式硬盤中,由于每個磁道的扇區數相等,所以外道的記錄密度要遠低于內道,因此會浪費很多磁盤空間 (與軟盤一樣)。為了解決這一問題,進一步提高硬盤容量,人們改用等密度結構生產硬盤。也就是說,外圈磁道的扇區比內圈磁道多。采用這種結構后,硬盤不再具有實際的3D參數,尋址方式也改為線性尋址,即以扇區為單位進行尋址。為了與使用3D尋址的老軟件兼容在硬盤控制器內部安裝了一個地址翻譯器。由它負責將老式3D參數翻譯成新的線性參數。這也是為什么現在硬盤的3D參數可以有多種選擇的原因 (不同的工作模式, 對應不同的3D參數,
如 LBA, LARGE, NORMAL)。

磁盤分區簡介:

BOOTSECTOR簡介

Boot Sector 也就是硬盤的第一個扇區, 它由 MBR (Master Boot Record), DPT (Disk Partition Table) 和 Boot Record ID 三部分組成。MBR 又稱作主引導記錄占用 Boot Sector 的前 446 個字節 ( 0 to 0x1BD ), 存放系統主引導程序 (它負責從活動分區中裝載并運行系統引導程序).

DPT 即主分區表占用 64 個字節 (0x1BE to 0x1FD), 記錄了磁盤的基本分區信息,主分區表分為四個分區項,,每項 16 字節,分別記錄了每個主分區的信息(因此最多可以有四個主分區).Boot Record ID 即引導區標記占用兩個字節 (0x1FE and 0x1FF), 對于合法引導區,它等于 0xAA55,這是判別引導區是否合法的標志。

BOOTSECTOR的具體結構如下圖所示:

Master Boot Record主引導記錄(446字節)
分區信息1(16字節)
分區信息2(16字節)
分區信息3(16字節)
分區信息4(16字節)
55AA

BOOTSECTOR結構圖

分區表結構簡介

分區表由四個分區項構成, 每一項長度為16個字節,分區表結構如下圖所示:

分區狀態,0=未激活,0x80=激活(注意此項) 0
分區起始磁頭號 1
分區起始扇區和柱面號,底字節的低6位為扇區號,高2位為柱面號的第9,10位,高字節為柱面號的低8位 2
3
分區類型,如0x0B=FAT32,0x83=Linux等,0表示此項未用 4
分區結束磁頭號 5
分區結束扇區和柱面號,低字節的低6位為扇區號,高2位為柱面號的第9,10位,高字節為柱面號的低8位 6
7
在線性尋址方式下的分區相對扇區地址(對于基本分區即為絕對地址) 8
9
A
B

分區大小(總扇區數)

注意:在DOS/Windows系統下,基本分區必須以柱面為單位劃分(Sectors*Heads個扇區),如對于CHS為764/255/63的硬盤,分區的最小尺寸為255*63*512/1048576=7.844MB

C
D
E
F

分區表結構圖

擴展分區簡介

由于主分區表中只能分四個分區, 無法滿足需求, 因此設計了一種擴展分區格式. 基本上說,擴展分區的信息是以鏈表形式存放的, 但也有一些特別的地方.

首先, 主分區表中要有一個基本擴展分區項, 所有擴展分區都隸屬于它,也就是說其他所有擴展分區的空間都必須包括在這個基本擴展分區中. 對于DOS / Windows 來說, 擴展分區的類型為 0x05(EXTENDX). 除基本擴展分區以外的其他所有擴展分區則以鏈表的形式級聯存放,后一個擴展分區的數據項記錄在前一個擴展分區的分區表中, 但兩個擴展分區 的空間并不重疊.擴展分區類似于一個完整的硬盤, 必須進一步分區才能使用. 但每個擴展分區中只能存在一個其他分區. 此分區在 DOS/Windows 環境中即為邏輯盤.
因此每一個擴展分區的分區表 (同樣存儲在擴展分區的第一個扇區中)中最多只能有兩個分區數據項(包括下一個擴展分區的數據項).

擴展分區的分區表存放在該分區的第一個扇區中它的結構與硬盤的BOOTSETOR基本相同,只是沒有主引導紀錄,即該扇區的0-0X1BD的數據是無效的,另外它的分區表只有前面兩項是有效的。他的最后兩個字節也是合法性檢測標志即55AA

下面是擴展分區的結構示意圖

擴展分區的結構示意圖

硬盤分區類型

0 未使用分區項

1 DOS12一種Fat表為12位的分區主要用于早期小硬盤和部分軟盤

2 xenix一種linux分區

4 D0S16早期硬盤分區方法,分區表項為16位,最大支持32M分區大小

5 EXTEND擴展分區的一種該分區的 起始扇區為前面的第一個EXTENDX分區起始扇區+該分區的相對偏移

6 BIGDOS即FAT16分區 分區表為16位,每簇最大為32K,最大分區為2G

7 NTFS分區

B FAT32分區 分區表為32位

C FAT32X分區與FAT32基本相同

E BIGDOSX即FAT16分區擴展 分區表為16位,每簇最大可以超過32K

F EXTENDX擴展分區的一種,起始扇區為該分區的相對偏移或者 前面的前面的第一個EXTENDX分區起始扇區+該分區的相對偏移;

如何找到一個邏輯分區

前面介紹了硬盤的分區結構,下面主要講解如何找到一個硬盤的邏輯分區首先讀取硬盤BOOTSECTOR,讀取該硬盤的分區表例如下面是一個15G硬盤的BOOTSECTOR

一個硬盤的BOOTSECTORS數據

其中紅色部分是主引導紀錄(MBR)藍色和淺綠色是分區表數據一共是4個分區項和顯然后兩個分區表項是未用的。最后兩個字節是合法性標志。

對于第一個分區表項可以知道該分區是一個活動分區,分區類型是0X0C (FAT16)分區分區相對扇區起始地址是0x3f(63) 分區大小是0x32F8E(208782個扇區大小大概未100M由于這是柱分區該分區的起始扇區號就為0x3f;

對于第二個分區表項可以知道該分區的分區類型是0x0F(EXTENDX)分區,起始扇區地址是0X32FCD(208845)分區大小是0X1BC6CD5(29125845)個扇區。

讀取扇區0X32FCD取出擴展分區得的分區表項

00 01 01 0D 07 FE BF 0A 3F 00 00 00 3F 04 7D 00

00 00 81 0B 05 FE FF 09 7E 04 7D 00 3F 82 3E 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

取出第一個分區表項知道該分區是類型是7(NTFS分區)分區大小是0X7D043F分區相對扇區號為0x3f可以算出分區的起始扇區是0X32FCD+0X3F=0X3300C

取出第二個分區表項知道該分區是類型是5(EXTEND分區)分區大小是0X3E823F分區相對扇區號為0X7D047E可以算出分區的起始扇區是0X32FCD+0X7D047E=0X80344B

讀取扇區0X80344B取出擴展分區得的分區表項

00 01 81 0b 0b fe ff 08 3f 00 00 00 00 82 3e 00

00 00 c1 0a 05 fe ff ff bd 86 bb 00 57 a7 00 01

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

取出第一個分區表項知道該分區是類型是0b(Fat32分區)分區大小是0X3e8200分區相對扇區號為0x3f可以算出分區的起始扇區是0X32FCD+0x7d047e +0X3F=0X80348a

取出第二個分區表項知道該分區是類型是5(EXTEND分區)分區大小是0X100a757分區相對扇區號為0Xbb86bd可以算出分區的起始扇區是0X32FCD+0Xbb86bd=0Xbbe68a

讀取扇區0Xbbe68a取出擴展分區得的分區表項

00 01 c1 0a 07 fe ff ff 3f 00 00 00 18 a7 00 01

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

取出第一個分區表項知道該分區是類型是7(NTFS分區)分區大小是0X100a718分區相對扇區號為0x3f可以算出分區的起始扇區是0X32FCD+0xbbe68a+3f=0Xbeb6c9

邏輯分區簡介:

FAT16 FAT32 NTFS邏輯分區BOOTSECTOR

邏輯分區的BOOTSECTOR的第一個扇區它由以下部分組成 1.跳轉指令 2.硬盤分區類型的文本字符名 3.分區參數塊 4.擴展的分區參數塊 5.啟動指令塊 6.合法性標志55AA

對于不同的分區類型這些塊的內容與意義是不同的下面是FAT FAT32 NTFS各分區的BOOTSECTORD的內容語義的略圖

0H 3 Byte 跳轉指令 EB 3C 90
3H 8 Byte 硬盤分區類型的文本字符名 MSDOS5.0
0BH 25 Byte 分區參數塊 0BH 2 Byte 每扇區字節數
0DH 1 Byte 每簇扇區數
0EH 2 Byte 保留扇區數
10H 1 Byte FAT表份數
11H 2 Byte 根目錄入口項
13H 2 Byte 磁盤大小
15H 1 Byte 介質類型
16H 2 Byte FAT表占用扇區
18H 2 Byte 每道扇區數
1AH 2 Byte 磁頭數
1CH 2 Byte 隱藏扇區數
24H 26 Byte 擴展的分區參數塊 24H 1 Byte 物理磁盤號
25H 1 Byte 當前磁頭號
26H 1 Byte 0x28或0x29
27H 4 Byte 磁盤序列號
2BH 11 Byte 卷表
36H 8 Byte 系統標識符
3EH 448 啟動指令塊
1FE 2 Byte 合法性標志 55AA

FAT16分區BOOTSECTOR結構圖

0H 3 Byte 跳轉指令 EB 58 90
3H 8 Byte 硬盤分區類型的文本 MSWIN4.1
0BH 25 Byte 分區參數塊 0B 2 Byte 每扇區字節
0D 1 Byte 每簇扇區數
0E 2 Byte 保留扇區數
10 1 Byte FAT表份數
11 2 Byte 未用
15 1 Byte 介質類型
16 2 Byte 未用
18 2 Byte 每道扇區數
1A 2 Byte 磁頭數
1C 2 Byte 隱藏扇區數
20 4 Byte 磁盤總扇區
24H 52 Byte 擴展的分區參數塊 24 4 Byte FAT表占用
2C 1 Byte 根目錄入口
40 1 Byte 物理磁盤號
42 1 Byte 0x29
43 4 Byte 磁盤序列號
47 8 Byte 系統標識符
52 8 Byte 系統標識符
58 422 啟動指令塊
1FE 2 合法性標志 55AA

FAT32分區BOOTSECTOR結構圖

0H 3 Byte 跳轉指令 EB 52 90
03H 8 Byte 硬盤分區類型的文本字符名 NTFS
0BH 25 Byte 分區參數塊 0B 2 Byte 每扇區字節數
0D 1 Byte 每簇扇區數
0E 2 Byte 保留扇區數
10 1 Byte 0
11 4 Byte 0
15 1 Byte 介質類型
16 2 Byte 0
18 2 Byte 每道扇區數
1A 2 Byte 磁頭數
1C 2 Byte 隱藏扇區數
20 4 Byte 0(未用)
24H 52 Byte 擴展的分區參數塊 24 4 Byte 0(未用)
28 8 Byte 總扇區數
30 8 Byte MFT 表起始簇
38 8 Byte MFT鏡像起始簇
40 4 Byte 每個記錄段簇
44 4 Byte 每個索引占簇
48 8 Byte 磁盤序列號
50 4 Byte 校驗和
54H 426 Byte 啟動指令塊
1FE 2 Byte 合法性標志 55AA

NTFS分區BOOTSECTOR結構圖

FAT16 FAT32邏輯分區組成結構

FAT16和FAT32的分區組成結構比較類似其基本如下:

BOOT SETCOR
保留扇區
FAT表1
FAT表2
根目錄區
磁盤內容

FAT16 FAT32邏輯盤結構圖

其中FAT16的根目錄區是固定大小的緊跟在FAT表后,而FAT32的根目錄區可以是不固定大小的在BOOTSECTOR中提供了根目錄區的第一個簇的簇號。

每一個目錄項占20個字節這些字節的定義如下

0xA文件名 第一個字節為E5表示該目錄項已被刪除,為0表示未用,為2E表示是當前目錄或者根目錄。

0xB是文件屬性BIT0文檔 BIT1只讀文件BIT2系統文件BIT3隱藏文件BIT4目錄 BIT5卷標

0x10-0X13 文件創建日期

0x14-0X15 文件或目錄起始簇號高16位(對FAT16無效為00 00)。

0x16-0X19 文件更改日期

0X1A-0X1B 文件或目錄起始簇號低16位。

0X1C-0X1F 文件大?。▽δ夸浽擁棡?)

整個磁盤空間是按簇劃分,在BOOTSECTOR中記錄了每個簇的大小參數。

FAT表是用來記錄整個磁盤空間的使用與分配情況的它的結構是一種鏈式結構。

他每16個字節或者32個字節表示一個簇。例如我們在FAT16分區找到第121簇的使用情況過程如下:

假設該分區大小為2G,起始扇區為63,FAT表為255個扇區,根目錄有0X100個入口,每簇大小為64個扇區,隱含扇區為1個。

該簇在FAT表中的位置為:

A=121*2=241;B=A%512;IF(B!=0);B=1;

C=63+1+A/512+B;

讀取扇區C到緩沖區取第A%512/2個字即為該扇區的下一個扇區,如果為0表示該扇區未用,為FF FF表示該扇區為最后一個扇區。其他的表示有下一個扇區。

該簇的物理磁盤扇區號是63+1+255*2+0X100*20/512+(121-2)*64

讀于一個FAT32分區,要找到121簇的使用情況

假設該分區大小為4G,起始扇區為200048,FAT表為3997個扇區,每簇大小為8個扇區,根目錄起始簇號為2,隱含扇區為32個。

該簇在FAT表中的位置為:

A=121*4=241;B=A%512;IF(B!=0);B=1;

C=20048+32+A/512+B;

讀取扇區C到緩沖區取第A%512/4個雙字即為該扇區的下一個扇區,如果為0表示該扇區未用,為FF FF FF FF表示該扇區為最后一個扇區。其他的表示有下一個扇區。

該簇的物理磁盤扇區號是20048+32+3997*2+(121-2)*8

經過上面的介紹我們就比較親楚整個FAT16 FAT32分區的尋址方式

例如讀取文件C:\Windows\SYSTEM.INI

首先找到邏輯盤C的起始扇區,然后讀出他的根目錄區,在根目錄區中找到Windows子目錄項,找到目錄項中該子目錄的起始簇,在FAT表中找到以該簇為起始簇的簇鏈,讀出這些簇的所在的扇區內容然后找到文件名為SYTEM.INI的目錄項,取得它的起始簇號,讀出該簇為起始簇的簇鏈的所有扇區內容即可。

NTFS邏輯分區組成結構

NTFS分區的結構比FAT16和FAT32復雜。整個NTFS分區也是和FAT分區一樣以簇為基本的的存儲結構,但NTFS分區把整個分區的全部扇區都作為簇來劃分,而FAT分區的BOOTSECTORFAT表,根目錄(FAT32除外),作為另外的部分它的起始簇是在這些扇區之后的。

NTFS分區的結構大概如下

BOOTSECTOR記錄了MFT表的起始簇號,通過BOOTSECTOR找到MFT的起始扇區,(方法是 磁盤起始扇區+簇號*每簇扇區數)。

MFT表是由很多個MFT記錄構成,每個MFT記錄表示一個文件的信息,MFT表將整個文件系統的內容,都當成文件來處理包括它自己本身。MFT表記錄將文件的所有信息都當成屬性來處理。

下面是MFT記錄的頭結構說明。

起始 長度 意義
0 4 MFT記錄標志FILE
4 2 修復效驗偏移
6 2 修復數據長度,包含第一個字節
8 8 LSN
10 2 序列號
12 2 鏈接個數(有多少個文件名鏈接在這個實際文件上)
14 2 第一個屬性的起始于該MFT記錄的哪一個字節
16 2 BIT0表示該記錄中有屬性值存于記錄外,BIT1表示該記錄中存有文件目錄
18 4 該記錄的有效字節數(記錄頭+所有屬性長度和)
1C 4 該記錄的長度
20 8 高2字節主MFT記錄的記錄號,低2字節0
28 2 所有屬性加1
2A 6 修復數據依賴于記錄長度
MFT記錄頭
屬性1
屬性2
屬性3

MFT記錄結構示意圖

MFT的記錄由記錄頭和屬性列表組成,每一個屬性都有一個結構相同的屬性頭,屬性頭分兩種,一種是屬性內容在MFT表中,一種是屬性的內容在磁盤分配的簇中,屬性頭分兩部分對于所有屬性第一部分結構是相同的第二部分結構不同:

偏移(16進制) 長度(16進制) 內容的意義
0 4 屬性類型
4 2 屬性總長度
8 1 屬性數據是否存在MFT表中,0表示是,1表示存在磁盤分配的空間
9 1 屬性名長度
A 2 屬性內容相當于屬性頭起始地址的偏移
C 2 屬性值是否壓縮,0表示沒壓縮,1表示壓縮
E 2 屬性標志(通常為0)

屬性頭的第一部分內容(前16字節)

10 4 1屬性數據長度
14 2 屬性數據起始字節(相當于屬性頭起始地址)
16 2 屬性在MFT屬性中是第幾個屬性(從0開始)

屬性內容在MFT表中的屬性頭第二部分內容

10 10H 屬性內容所在簇計算的起始簇
20 2 屬性數據起始字節(相當于屬性頭起始地址)
22 2 屬性內容壓縮方法(不太清楚)
28 8 為屬性數據的分配空間大小
30 8 屬性數據的實際大小
38 8 初始化數據長度(對于壓縮的數據)
40 8 壓縮前的長度(對于壓縮數據)
48 vcn 1cn runlength 數據所在簇的位置(具體解釋在后面)

屬性內容不在MFT表中的屬性的第二部分內容

屬性頭后緊跟的是屬性內容NTFS的標準的屬性包括以下幾種。

10H 標準信息屬性 Standard information
20H 屬性列表屬性 Attribute list
30H 文件名屬性 File Name
40H 卷表版本屬性 Volume Version
50H 安全性描述屬性 Security descriptor
60H 卷表名屬性 Volume name
70H 卷表信息屬性 Volume information
80H 數據內容屬性 Data
90H 索引根目錄屬性 Index Root
A0H 索引分配表屬性 Index Allocation
B0H 鏡像屬性 BitMap
C0H 鏈接屬性 Symlink
D0H HPFS擴展屬性信息屬性 HPFS extended attributes information
E0H HPFS擴展屬性 HPFS extended attributes

對于NTFS標準屬性我并不完全了解下面就我所了解的部分進行介紹

偏移(16進制) 長度(16進制) 內容的意義
0 8 文件創建時間
8 8 文件內容最后一次修改時間
10 8 文件別的屬性最后一次修改時間
18 8 文件最后一次修改時間
20 4 文件存取控制800文件內容是壓縮的,400文件是一個連接,20文檔標志,4系統文件標志,2隱含文件標志,1系統文件標志
24 C 未用通常為0

標準信息屬性內容定義

偏移(16進制) 長度(16進制) 內容的意義
0 4 屬性名
4 2 屬性長度
6 1 屬性字符名長度
8 8 屬性簇號計算起始簇號
10 8 包含該屬性的MFT記錄號
38 8 文件存取控制38
1A 長度為BIT6*2 屬性名的Unicode

屬性列表屬性內容定義

偏移(16進制) 長度(16進制) 內容的意義
0 8 該文件的根目錄的MFT記錄號
8 20 文件的時間信息(與基本信息中的相同)
28 8 屬性分配空間
30 8 屬性大小
38 8 文件屬性 38 20 文檔標志 4 系統文件標志,2隱含文件標志,1系統文件標識,39 08 壓縮 3B10 目錄
40 1 文件名長度
41 1 文件名類型 0 posix 1 unicode 2 dos 3both dos and unicode
42 Q長度為BIT40*2 文件名的Unicode

文件名屬性內容定義

偏移(16進制) 長度(16進制) 內容的意義
0 4 總是30H
4 4 總是1
8 4 索引記錄大小
C 4 每個簇可以記錄的索引記錄個數
10 4 總是10
14 4 整個屬性大小+10H
1C 2 1如果有index allocation 屬性存在
1E 2 標志位(不知道意義)

索引根目錄屬性定義

索引分配表屬性 該屬性分配索引空間以存放目錄

如果一個屬性內容無法在MFT表中放下,MFT表就會申請磁盤空間,存放在申請的空間中,屬性列表定義中第48字節開始說明了該屬性所在的磁盤簇號。下面是該字段的意義的英文說明以及簡單的翻譯:

Nonresident attributes are stored in intervals of clusters called runs. Each run is represented by its starting cluster and its length. The starting cluster of a run is coded as an offset to the starting cluster of the previous run. Length and starting cluster
are variable size fields. The first byte of a run indicates the size of both. The size of the offset is stored in the high nibble, and the size of the length in the low nibble.

For compressed or sparse runs, the offset is 0, and the size of the offset is also 0. Each compression unit starts at a multiple of 16 clusters. If compression is possible, at the VCN of a unit will be one or more data runs followed by an empty run. If there
are data runs for more than 16 clusters, the unit was not compressible.If there is no data run at all (only a large empty run), the unit consists of all zeroes.

Example: 21 20 ED 5 22 48 7 48 22 21 28 C8 DB

First run: 20 clusters starting from 5ED (5ED to 60D)

2nd run: 748 clusters starting from 5ED+2248 (2835 to 2F7D)

3rd run: 28 clusters starting from 2835+DBC8 (3FD to 425)

Note that the offset is interpreted as signed value

不存儲于MFT表中的屬性值被存儲于分散的簇中稱為RUN。每個RUNS由它的起始簇和長度構成。起始簇號和長度存儲于變長的域中,一個RUN的第一個字節表明了起始簇號和簇的個數分別占用的字節數,跟著簇的個數數據,接著是起始簇號的數據。入果沒有RUN存在著RUN的起始字節為0,RUNS是一個累加和,第二個RUN的起始簇號需要加上第一個RUN的起始簇號,以此類推。

NTFS分區的目錄結構

NTFS分區的目錄結構由文件名索引組成,它由 索引根目錄屬性(Index Root)

索引分配表屬性 (Index Allocation) 索引根目錄屬性表明該MFT表記錄是一個目錄,索引分配表屬性給該目錄分配磁盤空間以便存儲索引記錄(Index buffer)。

索引記錄由索引記錄頭和多個索引記錄項主組成,一個索引記錄大小為2k。其結構如下:

索引記錄頭
索引記錄項1
索引記錄項2
索引記錄項N
偏移(16進制) 長度(16進制) 內容的意義
0 4 索引記錄標志 總是INDEX
4 2 自修復數據存儲位置 通常是28H
6 2 自修復數據長度
10 8 VCN值
18 2 頭結構長度(第一個索引記錄項入口字節地址-18)
1C 4 整個記錄的長度
20 4 整個記錄存儲數據的長度
24 4 1表示沒有索引記錄項
28 A 自修復數據

索引記錄頭結構定義

索引記錄項是在這個目錄下的文件或目錄的索引結構其定義如下

偏移(16進制) 長度(16進制) 內容的意義
0 8 該文件的MFT記錄號
8 2 記錄項長度
A 2 0x42+0x2*<0x50>可能是一個校驗位
C 1 本記錄項有沒有子項(1表示有,為了支持DOS文件名)
10 8 父目錄的MFT記錄號
18 20 文件的時間信息
38 8 文件數據屬性分配磁盤空間大小
50 1 文件名長度
51 1 文件名類型(詳見文件名屬性)
52 長度為BIT8*2 文件名(Unicode)

索引記錄項定義

NFTS分區重要文件:

MFT表里存儲了所有的文件的基本信息,MFT表的前16個記錄是保留給系統使用的,這些文件是:

MFT 記錄0 $MFT文件 即MFT表本身的信息
MFT 記錄1 $MFTMIRR文件 MFT表的第一個記錄內容的備份
MFT 記錄2 $LogFile文件 緩沖區文件保證系統突然死機后,重啟時用
MFT 記錄3 $Volume文件 磁盤卷表文件
MFT 記錄4 $Attrdef文件 屬性定義文件,包含各種屬性的定義
MFT 記錄5 $Root文件 根目錄文件,分區目錄結構的入口
MFT 記錄6

$BitMap文件

磁盤分配鏡像文件,每個位表示一個簇是否被分配
MFT 記錄7 $Boot文件 指向磁盤boot setor開始的16個扇區
MFT 記錄8 $BadClus文件 磁盤壞簇的鏡像文件
MFT 記錄9 $Quota文件 不太清楚該文件的用處
MFT 記錄10 $UpCase文件 大寫字母對應的Unicode碼
MFT 記錄10 $MFT記錄15 未用

最后介紹一下NTFS文件系統中一個文件例如:要讀取文件F:\WINNT\SYSTEM32\ANSI .SYS

具體步驟如下:

1讀取分區表信息,找到磁盤F的起始扇區。

2讀取F盤的第一個扇區(分區的BOOTSETOR)取得分區的每簇大小,MFT表起始簇號,每簇大小等信息。

3.讀取MFT表的第五個記錄(根目錄)找到目錄索引所在簇號。

4.讀取索引,查找WINNT目錄所在的MFT記錄號

5.讀取WINNT目錄的MFT記錄,找到目錄索引所在簇號。

6.讀取索引,查找SYTEM32目錄所在MFT記錄號

7. 讀取SYTEM32目錄的MFT記錄,找到目錄索引所在簇號。

8. 讀取索引,查找ANSI . SYS所在MFT記錄號

9. 讀取ANSI .SYS文件的MFT記錄,找到它的DATA屬性。

10.根據DATA屬性中指定的文件數據存放位置讀取出ANSI .SYS文件的數據

總結

以上是生活随笔為你收集整理的硬盘存储结构及分区简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。