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也被映射到进程的虚拟地址空间,在需要的时候才被读入内存。
其他项目的空间从物理内存中分配,并映射到虚拟空间中。
应用程序通过使用虚拟地址空间中的地址开始执行,然后虚拟内存管理器把每次内存访问映射到物理位置