NTFS文件系統
簡介
NTFS的安全性很高,提供許多安全性能方面的選項,可以在本機也可以通過遠程的方法保護文件、目錄。NTFS還支持加密文件系統(EFS),可以阻止沒有授權的用戶訪問文件。
NTFS文件系統數據存儲的可靠性很強,比較適合做服務器的文件系統,因為其提供了基於原子事務(Atomic Transaction)概念的文件系統可恢復性。
將文件系統所需的全部數據,如記錄卷的分配狀態位圖、文件、目錄和系統引導程序等數據,像一般的文件一樣儲存在硬盤上。這些系統文件稱為元文件(metafile),這些數據則稱為元數據(metadata) 。
由於元文件在重要性,所以NTFS系統在該卷文件存儲部分的正中央對它們進行了備份。


NTFS引導扇區
NTFS的第一個扇區為引導扇區,即DBR扇區。其中有NTFS分區的引導程序和一些BPB參數,系統根據這些BPB參數來得到分區的重要信息。
NTFS文件系統的DBR扇區與FAT文件系統的結構一樣,也包括跳轉指令、OEM代號、BPB參數、引導程序和結束標志。
BPB描述了每扇區字節數、每簇扇區數、$MFT的起始簇號、文件記錄的大小描述等信息。
NTFS的DBR引導程序占用426字節(54H~1FDH),其負責完成將系統文件NTLDR裝入。
MFT
16個元文件中主文件表($MFT)是一個非常重要的元文件,它由文件記錄構成,每個文件記錄占用2個扇區。
在$MFT中前16個文件記錄總是元文件的紀錄
系統通過$MFT來確定文件在磁盤上的位置以及文件的所有屬性。
鏡像文件($MFTMirr),是$MFT的一個小部分鏡像,一般只鏡像前四個文件記錄。
文件記錄由文件記錄頭,屬性列表:屬性1 、屬性2……,結束標志“FFFFFFFFH”組成。

①文件記錄頭
- 在同一系統中,文件記錄頭的長度和具體偏移位置的數據含義是不變的,而屬性列表是可變的,其不同的屬性有着不同的含義。
- 偏移00H~03H為MFT的標志字符串,它總為“FILE”。
- 偏移14H第一個屬性的偏移地址
- 偏移18H~1BH處文件記錄的實際長度也即文件記錄在磁盤上實際占用的字節空間
②MFT
- 每個文件記錄中都有多個屬性,它們相對獨立,有各自的類型和名稱。
- 每一個屬性都可以分為兩個部分:屬性頭和屬性體。

MFT的結構
- 小文件和文件夾將全部存儲在文件的MFT記錄里,其屬性為常駐屬性。
- 如果一個屬性(文件數據屬性)太大不能放在只有1KB的MFT文件記錄里,NTFS將從MFT之外分配區域,這些區域通常稱為一個運行(Run)或一個盤區(Extent),它們用來存儲屬性值。這種屬性稱為非常駐屬性。
- 當一個屬性為非常駐時,其頭部包含NTFS需要在磁盤上定位屬性值的有關信息。
屬性
-
每個屬性都有一個屬性頭,這個屬性頭包含了一些該屬性的重要信息,如屬性類型、屬性大小、名字(並非都有)及是否為常駐屬性等。
-
一個屬性根據其是否常駐和是否有屬性名,可以排列組合成四種不同的情況,分別為:常駐沒有屬性名、常駐有屬性名、非常駐沒有屬性名、非常駐有屬性名,下面分別分析它們的屬性頭。
常駐沒有屬性名的屬性頭結構

非常駐有屬性名的屬性頭結構

10H($STANDARD_INFORMATION)屬性分析
- 它包含文件的一些基本信息,如文件的傳統屬性、文件的創建時間和最后修改時間、有多少目錄指向該文件(即其硬連接數)等
- 偏移00H文件創建時間
- 偏移08H件最后修改時間
- 偏移20H傳統文件屬性
20H($ATTRIBUTE_LIST)屬性分析
- 如果文件記錄里的某個屬性大到該文件記錄不能把該屬性完全存儲時,系統會采取用Run List來存儲這些屬性的屬性體,這種屬性被稱為非常駐屬性。
- 不能完全放進該文件記錄中的屬性會被放置在一個新的文件記錄中,而屬性列表屬性描述了應該如何找到這個新的文件記錄。
- 在標准屬性頭之后,20H類型屬性包括一系列不同長度的記錄,用於描述該文件其他屬性的類型和位置。它可能是常駐屬性,也可能是非常駐屬性,沒有最大最小尺寸限制。

30H($FILE_NAME)屬性分析

80H($DATA)屬性分析
- 該屬性容納着文件的內容,沒有最大最小限制,最小情況是該屬性為常駐屬性,可以不占用除MFT以外的空間。
- 當文件屬性能夠在文件記錄中完全存儲下來而不需要存儲到其他的Data Run(數據流)中時,這種屬性就是常駐屬性。
非常駐80H屬性結構
-
在NTFS文件系統中常用數據流有:
-
[未命名]([Unnamed])、{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}、^EDocumentSummaryInformation、^ESebiesnrMkudrfcoIaamtykdDa、^ESummaryInformation、$MountMgrDatabase、$Bad、$SDS、$J、$Max
80H屬性未命名數據流
- 由Data Run來記錄其屬性體即文件數據的具體地址

例:數據屬性的Run List值為“32 0C 1B 00 00 0C”

雲文件$Root
元文件$Root是用來管理根目錄的,其文件名實際上是“.”,它包含6個屬性。
90H屬性
- 90H屬性是索引根屬性,為非常駐屬性,屬性名為“$I30”,表示其為文件名索引。屬性中定義了90H屬性的索引屬性類型為30H,也就是30H類型的索引;定義了單位字節的索引分配的大小(這里為1000H)、每索引記錄的簇數(這里為01)等。
MFT的結構
- 下圖為含有兩個運行的非常駐屬性結構。

- NTFS的文件夾只是一個簡單的文件名和文件引用號的索引。
- 一個大目錄也可能包含非常駐屬性,其中一部分索引存放在索引根屬性中,而另一部分則存放在稱作“索引緩沖區”的非常駐運行中。
- 對目錄而言,索引根的頭及部分值應是常駐的。
- 文件夾屬性示例

文件的定位
- NTFS使用一個儲存在MFT記錄中的邏輯簇號(LCN),來指向文件在磁盤上的實際的物理位置,即對簇定位。LCN 是對卷中所有簇從開始到結束的編號,起始的LCN 是0。NTFS能通過計算LCN 與簇的大小的乘積找到文件的磁盤物理地址 。
- NTFS使用VCN引用文件中的數據。
- VCN可以映射成LCN。

啟動過程簡介
- 開機,系統BIOS加電自檢
-
BIOS(基本輸入輸出系統)是直接與硬件交互的底層代碼,為操作系統提供控制硬件設備的基本功能。
-
計算機啟動過程是在BIOS的控制下進行的。
-
當上電穩定后,CPU從內存地址FFFF:0000處開始執行指令,存放在此處的只是一條跳轉指令,跳轉到系統BIOS中真正的啟動代碼處。
-
BIOS首先進行加電自檢(Power On Self Test, POST)。
-
然后BIOS將更新ESCD(Extended System Configuration Data,擴展系統配置數據)
-
ESCD是系統BIOS用來與操作系統交換硬件配置信息的一種手段,這些數據存在CMOS中。
- 讀主引導扇區(MBR)
- BIOS的啟動代碼進行的最后一項工作,就是根據用戶指定的啟動順序從軟盤、硬盤或光驅啟動。
- 如硬盤啟動,BIOS將硬盤的第一個扇區的MBR讀入到內存0000:7C00處,並檢查0000:7DFE是否等於0xAA55,若相等,則跳轉到0000:7C00處執行MBR中的程序。若不等則嘗試其他介質啟動。
- 讀取活動分區
- MBR首先將自己復制到0000:0600處,然后在主分區表中搜索0x80的活動分區。如沒有找到或者有多個,則不能啟動。
- 找到活動分區后,根據DPT將活動分區的第一個扇區讀入到內存地址0000:7C00處,並檢查0000:7DFE是否等於0xAA55,若相等則跳回0000:7C00處,否則報告錯誤。
- 操作系統引導代碼引導系統並讀取操作系統初始化文件
- MBR找到第一個活動分區后,讀取活動分區的DBR,負責讀取並執行IO.SYS
- Win98的IO.SYS首先要初始化一些重要的系統數據,然后繼續進行DOS部分和GUI部分的引導和初始化工作。
DOS引導程序
- 調整堆棧位置
- 修改並用修改后的磁盤參數表來復位磁盤系統
- 計算根目錄的首扇區的位置及IO.SYS的扇區位置
- 讀入根目錄的首扇區
- 檢查根目錄表的起始兩項是否為IO.SYS及MSDOS.SYS
- 將IO.SYS文件起始3個扇區讀入內存0000:0700處
- 跳到0000:0700處執行IO.SYS,引導完畢。
Windows 2000/XP啟動過程
- 預啟動
- 計算機加電自檢,由系統BIOS完成基本硬件配置。
- 讀取並執行MBR,將引導分區上的操作系統引導扇區調入內存中執行,此處執行NTLDR(操作系統加載器)文件。
- 多重啟動的實現:將其它操作系統引導扇區保存為BootSect.DOS文件,引導時再加載該文件。
- 進行初始化
- NTLDR將處理器從實模式轉換為32位保護模式
- 讀取Boot.INI文件
- 位於活動分區根目錄下,作用是使系統在啟動過程中出現選擇菜單,由用戶選擇希望啟動的操作系統
- 加載NtDetect.COM
- 由NtDetect.COM來檢測計算機硬件,並將收集到的硬件列表返回NTLDR用於以后在注冊表中注冊保存。
- 選擇硬件配置文件
- 硬件配置文件是指保存計算機特定硬件配置的系統文件,可以創建多個不同的硬件配置文件以滿足計算機在不同場合的應用。
- 如果有多個硬件配置文件,則會出現選擇菜單,否則啟用默認配置。
- 裝載內核
- 引導過程裝載內核NtOsKrnl.EXE,隨后硬件抽象層(HAL)被引導進程加載。
- 初始化內核
- 內核完成初始化,NTLDR將控制權轉交給Windows 2000/XP內核,后者開始裝載並初始化設備驅動程序,並啟動Win32子系統和Windows 2000/XP服務。
- 用戶登錄
- 由Win32子系統啟動WinLogon.EXE,並由它啟動LSASS.EXE顯示登錄對話框。
- 登錄后,繼續配置網絡設備、用戶環境等。
中斷
中斷與計算機病毒
- 修改操作系統的主要方式之一是擴充中斷功能。
- 操作系統對中斷系統的開放為計算機病毒篡改中斷,並為其達到傳染、激發等服務目的。
- 與病毒相關的中斷有:
INT 08H和INT 1CH,定時中斷
INT 09H(鍵盤輸入),INT 10H(屏幕輸入輸出)
INT 13H(磁盤輸入輸出)
INT 21H、24H、25H、26H
內存管理
內存尋址技術的演變
- 8080直接訪問16位的內存地址,在程序中的地址必須進行硬編碼。
- 8086采用分段的方式實現了20位地址的訪問。
- 80286,地址線為24位,引入保護模式概念,在該模式下內存段的訪問受到了限制。每個段大小仍然是64K。
- 80386,地址總線擴展到了32位,段范圍為4KB~4GB。
DOS內存布局
- 高端內存安排給系統硬件使用
- 低端內存安排中斷向量表和BIOS數據區
- 剩下從500H開始到A0000H區域給DOS和應用程序用。
保護模式與虛擬內存
- 實模式
80x86(80386及其以后)可在實模式、保護模式和虛擬86模式下運行。
實模式就是MS-DOS的運行環境,只能利用32位寄存器的前16位,而后面的16位就浪費了。
- 虛擬86方式
虛擬86模式是以任務形式在保護模式上執行的,在80386上可以同時支持由多個真正的80386任務和虛擬86模式構成的任務。在虛擬86模式下,80386支持任務切換和內存分頁。在Windows操作系統中,有一部分程序專門用來管理虛擬86模式的任務,稱為虛擬86管理程序。
- 保護模式
在保護模式下,支持內存分頁機制,提供了對虛擬內存的良好支持。
保護模式下80386支持多任務,可以依靠硬件僅在一條指令中實現任務切換。任務環境的保護工作是由處理器自動完成的。
- 保護模式的權限級別
在保護模式下,所有的應用程序都具有權限級別PL,分為0級、1級、2級、3級,其中0級最高。
80x86的每個段描述符號中都有DPL字段,它規定了訪問該段的最低特權級別,只有高於此特權級的程序有權訪問它。
應用程序如果擁有第0級的權限,則可以執行任何指令並訪問任何數據;如果運行在第3級,則只能執行有限指令。
- 虛擬內存
在windows系統中,任何一個進程都被賦予其自己的虛擬地址空間,對於32位進程,地址空間可達4GB。但除去操作系統的空間,每個應用程序可以被分配2GB的虛擬地址。
程序的代碼和數據都放在同一地址空間。
進程實際可以得到的物理內存要遠小於其虛擬地址空間
Windwos使用磁盤文件做虛擬內存。
虛擬內存實現的方法:
創建新進程,分配2GB空間的虛擬內存
虛擬內存管理器將應用程序的代碼映射到虛擬地址中的某個位置,並把當前所需要的代碼讀取到物理地址中。
如果使用DLL,DLL也被映射到進程的虛擬地址空間,在需要的時候才被讀入內存。
其他項目的空間從物理內存中分配,並映射到虛擬空間中。
應用程序通過使用虛擬地址空間中的地址開始執行,然后虛擬內存管理器把每次內存訪問映射到物理位置