860 likes | 1.09k Views
Good Morning Everyone!!!. Windows 2000/XP 文件系统. 文件系统模型 Windows FSD Windows 常用文件系统 NTFS 设计目标与可恢复性 NTFS FSD NTFS 磁盘结构 NTFS 可恢复性支持 NTFS 坏簇恢复支持 NTFS 安全性支持. 文件系统模型. 层次文件系统模型 虚拟文件系统模型 Windows 文件系统模型. 层次文件系统模型. 虚拟文件系统模型. Windows 文件系统模型. Windows FSD 体系结构(本地). Windows FSD 体系结构(远程).
E N D
Good Morning Everyone!!!
Windows 2000/XP文件系统 • 文件系统模型 • Windows FSD • Windows 常用文件系统 • NTFS设计目标与可恢复性 • NTFS FSD • NTFS磁盘结构 • NTFS可恢复性支持 • NTFS坏簇恢复支持 • NTFS安全性支持
文件系统模型 • 层次文件系统模型 • 虚拟文件系统模型 • Windows文件系统模型
文件系统操作与FSD • 显式文件I/O • 高速缓存迟后写 • 高速缓存超前读 • 内存脏页写 • 内存缺页处理
文件系统操作与FSD:显式文件I/O CreateFile(ReadFile,WriteFile)(Win32API) • NtCreateFile • 通过ObOpenObjectByName解析名称字符串 • 通过IopParseDevice创建IRP(I/O request packet,I/O请求包) • 通过IoCallDriver将IRP交给合适的FSD以创建文件
文件系统操作与FSD:显式文件I/O ReadFile =>NtReadFile =>将已打开文件的句柄转换成文件对象指针 =>检查访问权限 =>创建IRP读请求 =>通过IoCallDriver将IRP交给合适的FSD =>如可在高速缓存,则应检查PrivateCacheMap =>如有效则表示该文件已有私有高速缓存映射结构; =>如无效则表示尚没有私有高速缓存映射结构,需要调用CcInitializeCacheMap来初始化 =>通过CcCopyRead从高速缓存中读取数据。如果数据还不在高速缓存中,CcCopyRead会引起缺页中断,并间接调用MmAccessFault。
文件系统操作与FSD:高速缓存迟后写高速缓存超前读文件系统操作与FSD:高速缓存迟后写高速缓存超前读 • 高速缓存迟后写: • 高速缓存管理器的迟后写线程定期地对高速缓存中已被修改的页面进行写操作。这是通过调用内存管理器的MmFlushSection函数来完成的。具体地说,MmFlushSection通过IoAsynchronousPageWrite将数据送交FSD。 • 高速缓存超前读: • 高速缓存管理器的超前读线程负责提前读数据。超前读线程通过分析已作的读操作,来决定提前读多少。提前读线程是通过缺页中断来完成的。
文件系统操作与FSD:内存脏页写 内存缺页处理文件系统操作与FSD:内存脏页写 内存缺页处理 • 内存脏页写: • 内存脏页写线程定期地清洗缓冲区。该线程通过IoAsynchronousPageWrite来创建IRP写请求,这些IRP被标识为不能通过高速缓存,因此它们被FSD直接送交到磁盘存储驱动程序。 • 内存缺页处理: • 以上在进行显式I/O操作与高速缓存提前读时,都会用到内存缺页处理。另外,只要应用程序访问内存映射文件且所需页面不在内存时,也会产生内存缺页处理。内存缺页处理MmAccessFault通过IoPageRead向文件所在文件系统发送IRP请求包来完成。
Windows 2000/XP文件系统 • CDFS,UDF • FAT12, FAT16, FAT32 • NTFS
Windows 2000/XP文件系统:CDFS CDFS(CDROM File system,只读光盘文件系统)是1988年为只读光盘所制定的文件系统标准。CDFS比较简单,但是有一定的限制: • 文件和目录名的长度必须少于32个字符。 • 目录树的深度不能超过8层。 • 现已过时,已被UDF标准所代替。 • FSD:\Winnt\System32\Drivers\Cdfs.sys。
Windows 2000/XP文件系统:UDF UDF(Universal Disk Format,通用磁盘格式)是于1995年由OSTA(Optical Storage Technology Association,光学存储技术协会)为光磁盘存储媒介如DVD-ROM等所制定的,用来代替CDFS,比CDFS更加灵活。UDF具有如下特点: • 文件名区分大小写 • 文件名可以有255字符长 • 最长路径为1023个字符 • FSD:\Winnt\System32\Drivers\Udfs.sys
Windows 2000/XP文件系统:FAT12,FAT16,FAT32 • FAT(File Allocation Table,文件分配表)文件系统属遗产文件系统。为了向后兼容,也为了方便用户升级,Windows 2000/XP仍然提供对FAT的支持 • 每一种FAT文件系统都用一个数字来标识磁盘上簇号的位数。 • 例如,FAT12的簇标识为12位(二进制数),这限制了它的单个分区最多只能存储2 12(=4096)个簇,而FAT 12在Windows 2000/XP中的簇大小在512B与8KB之间,这意味着FAT12卷的大小至多只有32M。 • FAT卷的结构: • Boot Sector + FAT1 + FAT2 +Root +Other dirs and files • FSD:\Winnt\System32\Drivers\Fastfat.sys
Windows 2000/XP文件系统:NTFS • NTFS是Windows 2000/XP的首选文件系统 • NTFS的簇标识为64位(二进制数)(但是Windows 2000有限制) • 文件与目录的安全性 • 文件与目录的压缩 • 文件与目录的加密 • 文件与目录的可恢复性。
NTFS设计要求 • NTFS设计目标 • NTFS的高级特性
NTFS设计目标 • NTFS设计目标 • 可恢复性 • 安全性 • 数据冗余和容错
NTFS设计目标:可恢复性 • 文件系统的要求:速度快和可恢复性 • 速度快 =>读写操作快 => 使用缓存 =>可恢复性降低 • 文件系统的可恢复性取决于文件系统的写入操作方式。 • 谨慎写(careful write)文件系统 • 例如FAT文件系统的“写通”技术 。速度性能差 • 延迟写(lazy-write)文件系统 • 例如UNIX文件系统的 “写回”高速缓存技术。可恢复性差 • 事务日志(transaction log)文件系统 • 试图既超越谨慎写文件系统的安全性,也达到延迟写文件系统的速度性能。 • 例如NTFS通过基于事务处理模式的日志记录技术,成功保证了NTFS卷的一致性,实现了文件系统的可恢复性。 当然,采用这种措施会付出代价,但是,代价可以通过高速缓存的延迟写技术来弥补,甚至可以增加高速缓存刷新之间的时间间隔。这样做不仅弥补了进行记录活动的系统耗费,有时甚至有所超越。
NTFS设计目标:安全性 • 一是对文件和目录的进行权限设置 • 二是对文件和目录进行加密。
NTFS设计目标:安全性 • 对文件和目录的进行权限设置 • 只有用户在被赋予权限或是属于拥有这种权限的组,才能对文件或目录进行访问。 • 权限是累积的。当组A用户对一个文件拥有“写入“权限,而组B用户则只有“读取”权限。用户C同属两个组,则C也将获得“写入”权限。 • 拒绝访问”权限优先级高于其他所有权限。如果组A的权限是“写入”,而组B则是“拒绝访问”,那么同属两个组的用户C也不能读写该文件。 • 文件权限始终优先于目录权限。 • 当用户在相应权限的目录中创建新的文件和子目录时,创建的文件和子目录继承该目录的权限。 • 创建文件或目录的拥有者,总是可以随时更改对文件或目录的权限设置来控制其他用户对该文件或目录的访问。
NTFS设计目标:安全性 • 对文件和目录进行加密。 • 文件加密是对文件中的内容,按照一定的变换规则进行重新编码,从而得到新的无法正常可读的加密文件。 • 当今流行的加密算法有置换表算法、对称密钥算法、以及非对称密钥算法等 • 参见后面
NTFS设计目标:数据冗余和容错 • 可恢复性保护系统数据(元数据),容错性保护用户数据。 • RAID1 • RAID5
NTFS高级特性 • NTFS的高级特性 • 多数据流 • 基于Unicode的名称 • 通用索引机制 • 动态坏簇重印映射 • POSIX支持 • 文件压缩 • 日志记录 • 磁盘限额 • 硬链接与软链接 • 链接跟踪 • 加密 • 碎片整理
NTFS高级特性:多数据流 • 在NTFS中,与文件相关的每个信息单元,包括文件名、文件的拥有者、文件的时间标记、文件的内容等,都是当作文件属性(NTFS Object Attribute, NTFS对象属性)来实现的。每个文件属性都对应着一个流(即一个简单的字符序列) • 每个流都有其各自的分配大小(已预留的磁盘空间),实际大小(实际使用了多少字节空间),以及有效的数据长度(初始化了多少数据流)等等。 • NTFS文件有一个缺省数据流,该流没有名称。应用程序可以创建其他的具有名称的数据流,且可通过指定名称来访问这些数据流。 • NTFS所特有的多数据流文件为许多应用程序(如高端服务器应用程序)提供了一种创造性的解决手段,例如支持Apple Macintosh文件系统等。(。Macintosh的每个文件都使用两个数据流:一个用于存储数据,另一个用于存储资源信息,如文件类型和文件图标等。 ) • 当混用NTFS和非NTFS文件系统时,也会造成一些兼容性的问题。
NTFS高级特性:基于Unicode的名称 • NTFS完全支持Unicode,完全使用Unicode字符来存储文件、目录和卷的名称。 • NTFS路径名中的每个文件名或目录名的长度可达255个字节,其中可以包含Unicode字符、多个空格及多个圆点。 • NTFS支持向后兼容,甚至可以从新的长文件名中产生老式的短文件名。当文件写入可移动存储介质(如软盘)时,它自动采用FAT文件名和FAT文 件系统。
NTFS高级特性:通用索引机制 • NTFS文件系统能够在一个磁盘卷中索引文件属性,从而大大提高了文件管理的效率 。而FAT文件系统仅仅索引文件名,但是不把它们分类,这使得在大目录下查找文件十分费时。 • 许多NTFS的特点都充分使用了通用索引,如综合安全描述符。将卷上的文件和目录的安全描述符存储于同一个内部流,再删除重复部分,就可按照NTFS所定义的内部安全标识来建立索引。
NTFS高级特性:动态坏簇重印映射 • 对于普通文件系统来说,如果用户试图从坏扇区中读取数据,那么读写操作失败,该扇区所在分配簇中的数据也将无法访问。 • 对于NTFS, NT容错驱动程序会将受损扇区的数据写入其他好的扇区,并标记具有坏扇区的簇的地址,防止以后再使用它。这对执行磁盘读写的任何应用程序是透明的。该特性有时叫做“热修复”(Hot Fix)。 • 如果容错驱动程序在扇区损坏时没有被加载,NTFS仍然可以替换坏簇并不再使用它,但是不能恢复坏扇区中的数据。
NTFS高级特性: POSIX支持 • Windows 2000/XP完全支持POSIX 1003.1(Portable Operating System Interface,可移植操作系统结构).在文件系统方面,NTFS实现了POSIX 1003.1的所有要求,如: • 大小写敏感的文件名:在POSIX环境下,文件名是大小写敏感的。因而README.TXT,Readme.txt, readme.txt是不同的文件。 • 通过许可:当判定一个用户是否可以访问一个文件或目录时,需要考虑路径上的所有目录的安全许可。 • 文件改变时间:提供文件最后被访问的时间标记。 • 硬链接:在不同的目录下不同文件名的两个文件指向相同的数据时,两个文件发生硬链接。
NTFS高级特性:文件压缩 • NTFS支持文件数据的压缩。因为NTFS可以透明地执行压缩和解压缩,应用程序不必修改就可利用这一特点。目录也可以压缩,这指该目录中以后所建文件均会被压缩。 • 文件压缩能将文本性质的应用程序代码和数据文件压缩大约50%,将可执行文件压缩大约40%。 • 应用程序通过向DeviceIoControl • 传递FSCTL_SET_COMPRESSION文件控制代码来压缩或解压缩; • 通过传递FSCTL_GET_COMPRESSION文件系统控制代码来获取文件和目录的压缩状态。 • 另外,应用程序也可以通过GetFileAttributes来确定文件和目录的压缩属性,这是因为压缩文件或目录的属性FILE_ATTRIBUTE_COMPRESSED会被置位。 • NTFS压缩功能的使用将会引起NTFS卷的性能下降,原因是每次访问被压缩的文件时,都需要对它进行解压缩。 • 如果要拷贝一个压缩文件,其过程是:解压缩、拷贝、重新对拷贝的文件进行压缩,大大增加了CPU的处理时间。
NTFS高级特性:文件压缩 • 压缩的另外一种形式称为稀疏文件。如果一个文件被标记为稀疏,那么NTFS不会为被应用程序设置为0的部分分配空间。当应用程序从稀疏文件的空白区域读数据时,NTFS将返回用0填充的缓冲区。与压缩文件一样,NTFS透明地管理稀疏文件。 • 应用程序通过向DeviceIOControl传递FSCTL_SET_SPARSE文件系统控制代码来指定文件的稀疏状态。 • 应用程序可以通过使用FSCTL_SET_ZERO_DATA控制代码来将文件某部分设置为空, • 通过使用FSCTL_QUERY_ALLOCATED_RANGES控制代码来获取文件的哪些区域为空。稀疏文件的应用之一就是NTFS的日志文件。
NTFS高级特性:日志记录 • 许多类型的应用需要监视卷上文件或目录的改变。 • 方法一:对卷进行扫描以记录文件和目录的状态,在以后的扫描时记录变化情况。 • 方法二:让应用程序通过Win32函数FindFirstChangeNotification或ReadDirectoryChangesW来注册目录通知。 • 方法三:应用程序可以向函数DeviceIOControl传递文件系统控制代码FSCTL_CREATE_USN_JOURNAL,来配置NTFS日志记录,这样NTFS将文件和目录改变记录到一个内部日志文件中。日志文件足够大,几乎可以保证应用程序能有机会来处理记录。应用程序可以使用FSCTL_QUERY_USN_JOURNAL文件控制代码来读日志文件,也可以指定只有新记录时DeviceIOControl才完成。
NTFS高级特性:磁盘限额 • NTFS可以支持基于用户的磁盘限额。当用户超过其警告线时,NTFS可以记录这一事件。类似地,当用户试图使用超过其限额的空间时,NTFS也可以记录这一事件并让这一企图失败。 • NTFS使用文件和目录的逻辑大小来控制空间的使用。因此用户无法通过压缩文件和稀疏文件来使用超过其限额的空间。 • 缺省时,不使用磁盘限额跟踪。如果要使用,可以通过卷属性来完成。
NTFS高级特性:硬链接与软链接 • 硬链接允许从多个路径来指向同一个文件和目录。如果已有一个文件为C:\Home\Doc\NtBook\Chap5.doc,且为其创建一个硬链接为C:\chap5.doc,那么这两个路径指向同一文件,因此可以通过任一路径来对该文件进行操作。进程可以用Win32API函数CreateHardLink或POSIX命令ln来创建硬链接。 • 软链接允许用来重定向一个目录。软链接是基于重解析点的。
NTFS高级特性:链接跟踪 • 外壳快捷允许用户通过链接将文件加入到外壳名称空间。对象链接和嵌入(Object Linking and Embedding,OLE)技术允许将一个程序的文档透明地嵌入到其他程序中。 • 虽然外壳和OLE提供了一种简单的方法将文件链接起来,但是这些链接却不好管理。 • Windows 2000/XP提供称为分布链接跟踪的服务程序,该程序可以用来对移动源进行跟踪,以保持外壳和OLE链接的完整性。 • NTFS链接跟踪是基于一个称为对象标识(Object ID)的可选文件属性。应用程序可以用FSCTL_CREATE_OR_GET_OBJECT_ID和FSCTL_SET_OBJECT_ID文件系统控制代码来为文件赋予一个对象标识;可以用FSCTL_CREATE_OR_GET_OBJECT_ID和FSCTL_GET_OBJECT_ID文件系统控制代码来查询对象标识;可以用FSCTL_DELETE_OBJECT_ID文件系统控制代码来删除对象标识。
NTFS高级特性:加密 • NTFS文件权限许可并不能完全保护数据。 • NTFS包含有一个称为EFS(Encrpyting File System)的工具,可以用来加密数据。EFS操作如同文件压缩一样,对应用程序而言是透明的。也就是说,当受权用户的程序需要读数据时,数据自动解密;当需要改变数据时,数据自动加密。 • EFS依赖于Windows 2000/XP所提供的处于用户态的加密服务。安全验证子系统)通信的DLL和加密DLL • 加密文件只能通过一个账号的EFS私有/公共密钥对的私有密钥来访问,而私有密钥用账号的口令加锁。因此,没有受权账号的口令,不能用其他方法访问EFS加密文件。 • 应用程序可以用Win32 API EncryptFile和DecryptFile来加密或解密文件,可以用FileEncrpytionStatus来获得有关文件和目录的EFS有关属性,如文件和目录是否已加密。
NTFS高级特性:碎片整理 • Windows 2000/XP本身带有一个碎片整理工具。 • 为了便于第三方开发碎片整理工具,Windows 2000/XP提供了碎片整理函数以用于移动文件数据以使占用连续扇区簇。该API包括一组文件系统控制: • FSCTL_GET_VOLUME_BITMAP可以获得一个卷的空闲的扇区簇和已占用的扇区簇的情况, • FSCTL_GET_RETRIEVAL_POINTERS可以获得一个文件扇区簇的情况, • FSCTL_MOVE_FILE可以用于移动文件数据。
NTFS FSD • 应用程序通过NTFS FSD创建和存取文件: • 首先进行有关使用权限的检查,只有合法用户的请求,才会被执行。 • 然后I/O管理器将文件句柄转换为文件对象指针。 • 最后通过文件对象指针来获得磁盘上的文件。
NTFS FSD • 通过文件对象指针来获得磁盘上的文件: • 通过文件对象指针获得文件属性的SCB(System Control Block,流控制块),每个SCB表示了文件的单个属性,并包含如何获得该属性的信息。 • 同一个文件的所有SCB都指向一个共同的数据结构FCB(File Control Block,文件控制块),FCB包含一个指向MFT(Master File Table,主文件表)中的该文件记录的指针,通过该指针获得文件访问权。
NTFS磁盘结构 • NTFS具有众多优点,这主要是因为它在磁盘上独特的实现方法。 • 如何划分磁盘, • 如何组织文件与目录, • 如何存储文件属性与数据, • 如何压缩文件数据等。 • NTFS磁盘结构 • 卷,簇 • 主控文件表 • 文件引用号,文件记录,文件名称 • 常驻属性与非常驻属性 • 索引 • 数据压缩
NTFS磁盘结构:卷 • 卷是建立在磁盘分区上 。 • 一个磁盘可以有多个卷,一个卷也可以有多个磁盘组成 • (已格式化过的)卷上的数据可分为:元数据和用户数据
NTFS磁盘结构:簇 • 簇作为磁盘空间分配和回收的基本单位 • 簇的大小是用户在使用Format命令或其他的格式化程序格式化卷时确定的。簇因子随卷的大小而不同,但都是物理扇区的整数倍,通常是2的幂, • NTFS使用LCN(Logical Cluster Number,逻辑簇号)和VCN(Virtual Cluster Number,虚拟簇号)来进行簇的定位。 • LCN是对整个卷中所有的簇从头到尾所进行的简单编号。 • VCN是对属于特定文件的簇从头到尾进行编号,以便于引用文件中的数据。
NTFS磁盘结构:主控文件表 • MFT(Master File Table,主控文件表)是NTFS卷结构的核心,是NTFS中最重要的系统文件,包含了卷中所有文件的信息。 • MFT是以文件记录数组来实现的,每个文件记录的大小都固定为1KB。卷上的每个文件(包括MFT本身)都有一行MFT记录。 • MFT开始的16个元数据文件是保留的。在NTFS中只有这16个元数据文件占有固定的位置。每个这样的元数据文件都有一个以"$"开头的文件名称,不过该符号是隐藏的。16个元数据文件之后则是普通的用户文件和目录。
NTFS磁盘结构:主控文件表 • 0:$Mft:MFT本身 • 1:$MftMirr:MFT镜像 • 2:$LogFile:日志文件 • 3:$Volume:卷文件 • 4:$AttrDef:属性定义表 • 5:$\:根目录 • 6:$Bitmap:位图文件 • 7:$Boot:引导文件 • 8:$BadClus:坏簇文件 • 9:$Secure:安全文件 • 10:$UpCase:大写文件 • 11:$Extended metadata directory:扩展元数据目录 • 12,13,14,15:预留 • >15:其他用户文件和目录