文档详情

网络操作系统PPT教学课件第四章Windows文件系统

公****
实名认证
店铺
PPT
5.04MB
约295页
文档ID:591009461
网络操作系统PPT教学课件第四章Windows文件系统_第1页
1/295

网络操作系统网络操作系统第四章 Windows文件系统 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院第四章 Windows文件系统•文件系统有关的术语•Windows文件系统格式•文件系统驱动程序体系结构n本地本地FSDn远程远程FSDn文件系统操作文件系统操作n文件系统过滤型驱动程序文件系统过滤型驱动程序•NTFS的设计目标与特性•NTFS文件系统驱动程序•NTFS在磁盘上的结构 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院第四章 Windows文件系统•NTFS可恢复性支持n文件系统设计的演变文件系统设计的演变n日志记录日志记录n恢复恢复nNTFS的坏簇恢复的坏簇恢复•加密文件系统安全性n概述概述n加密过程加密过程n解密过程解密过程n加密文件的备份加密文件的备份 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院文件系统有关的术语•扇区(sector)n是指存储介质上可由硬件来寻址的块是指存储介质上可由硬件来寻址的块•文件系统格式(file system format)n定义了文件数据在存储介质上的存储方式,它影响了一个定义了文件数据在存储介质上的存储方式,它影响了一个文件系统的各种特性。

文件系统的各种特性n文件系统格式强制规定了文件与其所支持的存储设备的大文件系统格式强制规定了文件与其所支持的存储设备的大小限制 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院文件系统有关的术语•簇(cluster)n是文件系统格式使用的可寻址数据块,簇的大小总是扇区是文件系统格式使用的可寻址数据块,簇的大小总是扇区大小的整数倍大小的整数倍n文件系统使用簇来管理磁盘空间文件系统使用簇来管理磁盘空间n簇越大,其潜在缺点是可能会产生内部碎片,浪费更多簇越大,其潜在缺点是可能会产生内部碎片,浪费更多的磁盘空间的磁盘空间•元数据(metadata)n是为支持文件系统格式管理而存储在卷上的数据是为支持文件系统格式管理而存储在卷上的数据n对于应用程序,元数据通常是不可访问的对于应用程序,元数据通常是不可访问的n例如,元数据包含了卷上的文件和目录的位置信息等例如,元数据包含了卷上的文件和目录的位置信息等 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院Windows文件系统格式•Windows可以支持以下文件系统格式nCDFSnUDFnFAT12、、FAT16与与FAT32nNTFS 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院Windows文件系统格式•CDFSnCDFS或或CD-ROM文件系统(文件系统(cdfs.sys)是一个只读文件系)是一个只读文件系统驱动程序,支持统驱动程序,支持ISO-9660格式。

格式nCDFS格式具有以下限制:格式具有以下限制:n文件大小最大为文件大小最大为4GB;;n最多最多65535个目录nCDFS正逐渐被正逐渐被UDF替代作为只读介质的标准替代作为只读介质的标准 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院Windows文件系统格式•UDFnUDF是是OSTA在在1995年制定文件系统标准,其目的是取代年制定文件系统标准,其目的是取代ISO-9660作为磁光(作为磁光(magneto-optical)存储介质的文件系)存储介质的文件系统格式nUDF文件系统具有以下特性:文件系统具有以下特性:n目录与文件名最长可达目录与文件名最长可达254个个ASCII字符或字符或127个个Unicode字符;字符;n文件可以是稀疏的;文件可以是稀疏的;n文件的大小使用文件的大小使用64位表示nWindows的的UDF文件系统驱动程序(文件系统驱动程序(udfs.sys)仅支持只读)仅支持只读方式另外,方式另外,Windows不支持命名流、访问控制列表及扩不支持命名流、访问控制列表及扩展属性等展属性等UDF特征 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院Windows文件系统格式•FAT12、FAT16与FAT32nWindows支持支持FAT文件系统的主要目的是为了能够从其他文件系统的主要目的是为了能够从其他版本的版本的Windows系统升级,并与多引导系统中的其他操作系统升级,并与多引导系统中的其他操作系统兼容,以及作为软盘的文件系统格式。

系统兼容,以及作为软盘的文件系统格式nWindows的的FAT文件系统驱动程序是文件系统驱动程序是Fastfat.sysnFAT格式名称包含数值格式名称包含数值n指明了该格式用于标识磁盘上的簇所需要的位数指明了该格式用于标识磁盘上的簇所需要的位数 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院Windows文件系统格式nFAT12文件系统文件系统n限制一个分区最多可以容纳限制一个分区最多可以容纳212((4096)个簇nWindows使用的簇大小可以从使用的簇大小可以从512B至至8KB,,FAT12卷最卷最大可达大可达32MBnFAT12常常作为作为5英寸软盘与英寸软盘与3.5英寸软盘的文件系统格式英寸软盘的文件系统格式 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院Windows文件系统格式nFAT16文件系统文件系统n最多可以容纳最多可以容纳216((65,536)个簇,)个簇,Windows使用的使用的FAT16簇大小可以从簇大小可以从512B至至64KB,因此,因此FAT16卷最大卷最大可达可达4GBnWindows使用的簇大小取决于卷的大小。

使用的簇大小取决于卷的大小nFAT16格式的缺省簇大小格式的缺省簇大小 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院Windows文件系统格式nFAT格式的组织格式的组织nFAT卷被划分为若干区域卷被划分为若干区域n文件分配表对于解释卷的内容至关重要,因此文件分配表对于解释卷的内容至关重要,因此FAT格格式维护了文件分配表的两个拷贝式维护了文件分配表的两个拷贝n卷中的每个簇在文件分配表中都有一个表项卷中的每个簇在文件分配表中都有一个表项 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院Windows文件系统格式n文件分配表中的表项定义了文件与目录的文件分配链文件分配表中的表项定义了文件与目录的文件分配链((chain),其中的每个环节(),其中的每个环节(link)指向文件数据所在)指向文件数据所在的下一个簇的位置的下一个簇的位置p文件的目录项保存了文件的起始簇位置文件的目录项保存了文件的起始簇位置p文件分配链的最后一个表项,在文件分配链的最后一个表项,在FAT16格式中设置格式中设置保留值为保留值为0xFFFF,在,在FAT12格式中设置为保留值格式中设置为保留值0xFFF。

p对于未使用的簇,文件分配表的对应表项设置为对于未使用的簇,文件分配表的对应表项设置为0 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院Windows文件系统格式pFAT16文件分配链的示例文件分配链的示例 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院Windows文件系统格式n在在FAT12与与FAT16卷的起始处,预先为卷的根目录分配卷的起始处,预先为卷的根目录分配了足够的空间以存放了足够的空间以存放256个目录项个目录项pFAT目录项的大小是目录项的大小是32字节,用于存储文件名、文字节,用于存储文件名、文件大小、文件起始簇及时间戳等信息件大小、文件起始簇及时间戳等信息Ø若文件名是若文件名是Unicode文件名或文件名不遵循文件名或文件名不遵循MS-DOS 8.3命名规范,则为文件分配额外的目录项命名规范,则为文件分配额外的目录项用于存储长文件名用于存储长文件名Ø额外的目录项位于文件的主目录项之前额外的目录项位于文件的主目录项之前 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院Windows文件系统格式p文件目录项的示例:文件目录项的示例:文件名为文件名为“The quick brown.fox”。

nFAT32文件系统文件系统nFAT32使用使用32位簇标识符,但保留最高位簇标识符,但保留最高4位,只使用了位,只使用了其中的其中的28位簇标识符位簇标识符n由于由于FAT32格式的簇大小最大可达格式的簇大小最大可达32KB,因此,,因此,FAT32理论上可以寻址理论上可以寻址8TB的卷nWindows限制新的限制新的FAT32卷的大小最大可达卷的大小最大可达32GB,但,但Windows可以工作在现有的更大尺寸的可以工作在现有的更大尺寸的FAT32卷上nFAT32格式卷的缺省簇大小格式卷的缺省簇大小 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院Windows文件系统格式nFAT32相对于相对于FAT12与与FAT16的优点包括的优点包括p更多的簇数量;更多的簇数量;pFAT32的根目录无需保存在卷上预先定义的位置;的根目录无需保存在卷上预先定义的位置;p根目录的大小没有上限;根目录的大小没有上限;pFAT32保存了引导扇区的拷贝以提高可靠性保存了引导扇区的拷贝以提高可靠性nFAT32与与FAT16共同的限制共同的限制p允许的最大文件大小是允许的最大文件大小是4GB。

南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院Windows文件系统格式•NTFSnNTFS文件系统是文件系统是Windows的原生文件系统格式的原生文件系统格式nNTFS使用使用64位簇标识符,理论上可寻址位簇标识符,理论上可寻址16exabytes((16billion GB)的卷nWindows限制限制NTFS卷使用卷使用32位标识符,即在使用位标识符,即在使用64KB簇簇时,卷的大小略微少于时,卷的大小略微少于256TBnNTFS格式卷的缺省簇大小格式卷的缺省簇大小 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院Windows文件系统格式nNTFS支持每个卷最多存放支持每个卷最多存放232-1个文件,允许每个文件最大个文件,允许每个文件最大16exabytes,但具体实现限制文件最大为,但具体实现限制文件最大为16TBnNTFS实现了文件与目录安全、磁盘配额、文件压缩、基于实现了文件与目录安全、磁盘配额、文件压缩、基于目录的符号链接、加密与可恢复性等高级特性目录的符号链接、加密与可恢复性等高级特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院文件系统驱动程序体系结构•文件系统驱动程序(FSDs)管理文件系统格式。

•FSD必须向I/O管理器注册,且与内存管理器进行交互•为了提高性能,文件系统驱动程序通常还依赖于缓存管理器提供的服务•Windows有两种不同类型的文件系统驱动程序:n本地本地FSD((Local FSDs))n管理本地计算机上的卷管理本地计算机上的卷n网络网络FSD((Network FSDs))n允许用户访问远程计算机上的数据卷允许用户访问远程计算机上的数据卷 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院文件系统驱动程序体系结构•文件系统驱动程序体系结构n本地本地FSDn远程远程FSDn文件系统操作文件系统操作n文件系统过滤型驱动程序文件系统过滤型驱动程序 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•本地FSD包括Ntfs.sys、Fastfat.sys、Udfs.sys、Cdfs.sys与Raw FSD•本地FSD与I/O管理器和存储设备驱动程序进行交互文件系统驱动程序体系结构-本地-本地FSDFSD 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n本地本地FSD负责向负责向I/O管理器注册管理器注册n一旦一旦FSD已注册,当应用程序或系统初次访问卷时,已注册,当应用程序或系统初次访问卷时,I/O管管理器会通知本地理器会通知本地FSD执行卷识别过程。

执行卷识别过程n卷的识别过程包括检查卷的引导扇区与文件系统卷的识别过程包括检查卷的引导扇区与文件系统元数据元数据(以实现一致性检查)(以实现一致性检查)pWindows所支持的文件系统格式的第一个扇区通常所支持的文件系统格式的第一个扇区通常保留作为卷的引导扇区,引导扇区中包含了足够的保留作为卷的引导扇区,引导扇区中包含了足够的信息,信息,Ø使得本地使得本地FSD能够识别该扇区所在卷上包含能够识别该扇区所在卷上包含FSD所管理的文件系统格式,所管理的文件系统格式,Ø并定位保存在卷上的元数据的位置并定位保存在卷上的元数据的位置文件系统驱动程序体系结构-本地-本地FSDFSD 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n当完成卷识别后,本地当完成卷识别后,本地FSD创建一个设备对象以代表所挂创建一个设备对象以代表所挂载的文件系统载的文件系统nI/O管理器通过卷参数块管理器通过卷参数块VPB在卷设备对象与本地在卷设备对象与本地FSD创建创建的设备对象之间建立关联,的设备对象之间建立关联,n该该VPB关联使得关联使得I/O管理器可以将发往卷设备对象的管理器可以将发往卷设备对象的I/O请求重定向到请求重定向到FSD设备对象。

设备对象文件系统驱动程序体系结构-本地-本地FSDFSD 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n为了提高性能,本地为了提高性能,本地FSD通常使用缓存管理器来缓存包括通常使用缓存管理器来缓存包括元数据在内的文件系统数据,并与内存管理器一起实现内元数据在内的文件系统数据,并与内存管理器一起实现内存文件映射存文件映射n本地本地FSD还支持文件系统卸载操作,以允许系统将还支持文件系统卸载操作,以允许系统将FSD与与卷设备对象断开卸载通常发生在以下情况:卷设备对象断开卸载通常发生在以下情况:n应用程序请求以原始应用程序请求以原始I/O方式访问卷的内容;方式访问卷的内容;n与卷相关联的介质发生变化与卷相关联的介质发生变化n在卸载操作之后,应用程序初次访问介质时,在卸载操作之后,应用程序初次访问介质时,I/O管理器重管理器重新为该介质发起卷的挂载操作新为该介质发起卷的挂载操作文件系统驱动程序体系结构-本地-本地FSDFSD 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•远程FSD由两部分组成n客户端客户端FSDn客户端客户端FSD允许应用程序访问远程的文件和目录。

允许应用程序访问远程的文件和目录n客户端客户端FSD首先接收来自应用程序的首先接收来自应用程序的I/O请求,然后将请求,然后将其转换成网络文件系统协议命令,再通过网络发送给服其转换成网络文件系统协议命令,再通过网络发送给服务器务器FSDn服务器服务器FSDn服务器服务器FSD监听来自网络连接的命令,然后将监听来自网络连接的命令,然后将I/O请求请求发送给本地发送给本地FSD执行,该本地执行,该本地FSD管理命令的目标文件管理命令的目标文件或目录所在的卷或目录所在的卷文件系统驱动程序体系结构-远程-远程FSDFSD 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nWindows的客户端的客户端FSD是是LANMan重定向器(重定向器(LANMan Redirector)n重定向器通过端口重定向器通过端口/小端口驱动程序的组合来实现小端口驱动程序的组合来实现p端口驱动程序(端口驱动程序(Rdbss.sys)被实现为一个驱动程序)被实现为一个驱动程序子例程库子例程库p小端口驱动程序(小端口驱动程序(Mrxsmb.sys)使用端口驱动程序)使用端口驱动程序提供的服务提供的服务。

p小端口驱动程序小端口驱动程序WebDAV((Mrxdav.sys)实现了通)实现了通过过HTTP进行文件访问的客户端部分进行文件访问的客户端部分n端口端口/小端口模型简化了重定向器的开发,所有的远程小端口模型简化了重定向器的开发,所有的远程FSD小端口驱动程序可以共享端口驱动程序,而由端口小端口驱动程序可以共享端口驱动程序,而由端口驱动程序处理客户端远程驱动程序处理客户端远程FSD与与Windows的的I/O管理器之管理器之间的交互细节间的交互细节文件系统驱动程序体系结构-远程-远程FSDFSD 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nWindows的服务器的服务器FSD是是LANMan服务器(服务器(LANMan Server)()(Srv.sys)nWindows使用公共互联网文件系统使用公共互联网文件系统CIFS协议实现重定向器协议实现重定向器与服务器之间传递消息与服务器之间传递消息文件系统驱动程序体系结构-远程-远程FSDFSD 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•客户通过重定向器与服务器FSD远程访问文件文件系统驱动程序体系结构-远程-远程FSDFSD 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•分布式缓存一致协议oplocks(opportunistic locking)n客户端客户端FSD通常使用缓存管理器来在本地缓存属于远程文通常使用缓存管理器来在本地缓存属于远程文件与目录的文件数据。

件与目录的文件数据n此时,客户端此时,客户端FSD必须实现分布式缓存一致协议必须实现分布式缓存一致协议oplocks,,从而,当应用程序访问远程文件时,其所看到的数据与运从而,当应用程序访问远程文件时,其所看到的数据与运行在其他计算机上访问相同文件的应用程序所看到的数据行在其他计算机上访问相同文件的应用程序所看到的数据是是相同相同的n当客户端访问服务器文件时,必须首先请求一个当客户端访问服务器文件时,必须首先请求一个oplockn并指明客户端可以根据服务器授予的并指明客户端可以根据服务器授予的oplock类型执行相类型执行相应的缓存应的缓存文件系统驱动程序体系结构-远程-远程FSDFSD 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院noplock主要有三种类型:主要有三种类型:n级别级别I oplockp当客户以独占方式访问文件时被授予级别当客户以独占方式访问文件时被授予级别I oplock;;p持有该锁的客户端可以在客户端系统上缓存读与写持有该锁的客户端可以在客户端系统上缓存读与写操作n级别级别II oplockp表示共享文件锁;表示共享文件锁;p持有该锁的客户端可以缓存读操作,但对文件的写持有该锁的客户端可以缓存读操作,但对文件的写操作会导致该锁失效;操作会导致该锁失效;文件系统驱动程序体系结构-远程-远程FSDFSD 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n批处理批处理oplockp持有该锁的客户端既可以缓存对文件的读和写操作,持有该锁的客户端既可以缓存对文件的读和写操作,也可以缓存对文件的打开与关闭操作,而无需请求也可以缓存对文件的打开与关闭操作,而无需请求额外的额外的oplock。

p通常只用于支持批处理文件的执行,当批处理文件通常只用于支持批处理文件的执行,当批处理文件执行时,可以反复打开与关闭文件执行时,可以反复打开与关闭文件n若客户端没有若客户端没有oplock,则不能在本地缓存读与写操作的数,则不能在本地缓存读与写操作的数据n此时,客户端必须从服务器获取数据,并将对数据的修此时,客户端必须从服务器获取数据,并将对数据的修改直接发送给服务器改直接发送给服务器文件系统驱动程序体系结构-远程-远程FSDFSD 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院noplock的例子的例子文件系统驱动程序体系结构-远程-远程FSDFSD 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n服务器向客户端服务器向客户端1授予级别授予级别I的的oplock,使其能够访问一,使其能够访问一个服务器文件,客户端的重定向器将对该文件读和写的个服务器文件,客户端的重定向器将对该文件读和写的数据保存在客户端机器的文件缓存中数据保存在客户端机器的文件缓存中n若客户端若客户端2打开了该文件,它也向服务器请求级别打开了该文件,它也向服务器请求级别I的的oplock。

p由于此时有两个客户端访问相同的文件,服务器必由于此时有两个客户端访问相同的文件,服务器必须采取相应的措施,以保证向两个客户端呈现一致须采取相应的措施,以保证向两个客户端呈现一致的文件数据视图的文件数据视图文件系统驱动程序体系结构-远程-远程FSDFSD 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n若客户端若客户端1已经对文件进行了写操作已经对文件进行了写操作p服务器撤销客户端服务器撤销客户端1的的oplock,且不会将,且不会将oplock授予授予任何一个客户端任何一个客户端p当客户端当客户端1的的oplock被撤销时,客户端被撤销时,客户端1将其缓存的将其缓存的文件数据刷新到服务器文件数据刷新到服务器n若客户端若客户端1没有对该文件进行写操作没有对该文件进行写操作p客户端客户端1拥有的拥有的oplock将会转变为级别将会转变为级别II的的oplockp服务器也会授予客户端服务器也会授予客户端2级别级别II的的oplock,此时,两,此时,两个客户端都可以缓存读操作个客户端都可以缓存读操作n但是,如果任何一个客户端对文件进行写操作,服务器但是,如果任何一个客户端对文件进行写操作,服务器会撤销所有客户端的会撤销所有客户端的oplock,以便开始非缓存操作。

以便开始非缓存操作文件系统驱动程序体系结构-远程-远程FSDFSD 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n一旦一旦oplock被撤销,则服务器不会对该文件的同一个打被撤销,则服务器不会对该文件的同一个打开实例再次授予开实例再次授予oplockn若客户端关闭该文件,然后再次打开时,服务器会根据若客户端关闭该文件,然后再次打开时,服务器会根据哪些客户端已打开该文件,以及是否有客户端对该文件哪些客户端已打开该文件,以及是否有客户端对该文件执行写操作,来重新评估授予该客户端的执行写操作,来重新评估授予该客户端的oplock等级文件系统驱动程序体系结构-远程-远程FSDFSD 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•实验:查看已注册文件系统的列表n使用使用Winobj工具来查看系统中注册的文件系统工具来查看系统中注册的文件系统文件系统驱动程序体系结构-远程-远程FSDFSD 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n使用使用System Information查看器(查看器(Msinfo32)来)来查看系统中查看系统中注册的文件系统注册的文件系统文件系统驱动程序体系结构-远程-远程FSDFSD 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•应用程序和系统可以通过两种方式来访问文件n通过文件通过文件I/O函数直接访问;函数直接访问;n通过读写代表映射文件区域的进程地址空间间接访问。

通过读写代表映射文件区域的进程地址空间间接访问•Windows文件系统的有关操作都是通过FSD来完成的文件系统驱动程序体系结构-文件系统操作-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•FSD可以通过以下方式进行调用n用户或系统线程执行显式文件用户或系统线程执行显式文件I/O;;n内存管理器的修改页面写入器与映射页面写入器;内存管理器的修改页面写入器与映射页面写入器;n缓存管理器的延迟写间接调用;缓存管理器的延迟写间接调用;n缓存管理器的预读线程间接调用;缓存管理器的预读线程间接调用;n内存管理器的缺页处理程序内存管理器的缺页处理程序文件系统驱动程序体系结构-文件系统操作-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•显式I/On应用程序可以调用以下应用程序可以调用以下Windows的的I/O函数访问文件函数访问文件nCreateFile函数;函数;nReadFile函数;函数;nWriteFile函数等文件系统驱动程序体系结构-文件系统操作-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nCreateFile函数函数n应用程序调用应用程序调用CreateFile函数打开文件,然后将函数打开文件,然后将CreateFile函数返回的文件句柄传递给其他函数返回的文件句柄传递给其他Windows函函数,对文件进行读、写与删除操作。

数,对文件进行读、写与删除操作nCreateFile函数是在函数是在Windows子系统子系统DLL((Kernel32.dll)中实现的,调用了原生函数)中实现的,调用了原生函数NtCreateFilen对于应用程序传递给对于应用程序传递给NtCreateFile函数的路径,形成了函数的路径,形成了相对于根的完全路径名,并在前面加上相对于根的完全路径名,并在前面加上“\??”nNtCreateFile系统服务使用系统服务使用ObOpenObjectByName函数函数打开文件打开文件p该函数解析由对象管理器根目录开始且开始部分是该函数解析由对象管理器根目录开始且开始部分是“??”的路径名的路径名文件系统驱动程序体系结构-文件系统操作-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n对象管理器将对象管理器将\??转换为进程的、针对每个会话的名字空转换为进程的、针对每个会话的名字空间目录,该名字空间目录位于进程对象引用中设备映射间目录,该名字空间目录位于进程对象引用中设备映射结构的结构的DosDevicesDirectory字段p对于对于不带终端服务的不带终端服务的Windows 2000系统中,系统中,ØDosDevicesDirectory字段指向字段指向\??目录目录;;p对于对于带有终端服务的带有终端服务的Windows 2000系统中,系统中,Ø设备映射结构指向了针对每个会话的目录,代表设备映射结构指向了针对每个会话的目录,代表所有有效卷驱动器符的符号链接对象均存储在该所有有效卷驱动器符的符号链接对象均存储在该目录中。

目录中文件系统驱动程序体系结构-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院p对于对于Windows XP与与Windows Server 2003系统系统Ø针对每个会话的目录只存储了用于网络共享的卷针对每个会话的目录只存储了用于网络共享的卷名名Ø当一个驱动器名(例如当一个驱动器名(例如C:)没有在针对每个会话)没有在针对每个会话的目录中时,对象管理器会在与会话目录相关联的目录中时,对象管理器会在与会话目录相关联的设备映射的的设备映射的GlobalDosDevicesDirectory字段指字段指向的目录中重新搜索向的目录中重新搜索ØGlobalDosDevicesDirectory字段通常指向字段通常指向\Global??目录,而该目录目录,而该目录通常通常用于存储本地卷的用于存储本地卷的卷驱动器符卷驱动器符n\??或或\Global??目录下的卷驱动器符的符号链接指向目录下的卷驱动器符的符号链接指向\Device目录下的卷设备对象目录下的卷设备对象文件系统驱动程序体系结构-文件系统操作 n驱动器符名字的解析过程驱动器符名字的解析过程p不带终端服务的不带终端服务的Windows 2000系统上,系统上,\??\C:符号符号链接指向链接指向\Device\HarddiskVolume1卷设备对象。

卷设备对象 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n当对象管理器遇到卷对象时,将路径名的剩余部分传递当对象管理器遇到卷对象时,将路径名的剩余部分传递给给I/O管理器的解析函数管理器的解析函数IopParseDevicepIopParseDevice函数将创建一个函数将创建一个IRP_MJ_CREATE类型类型的的I/O请求包请求包IRP,以及用于存储将要被打开文,以及用于存储将要被打开文件名字的文件对象;件名字的文件对象;p根据卷设备对象的根据卷设备对象的VPB查找该卷的挂载文件系统设查找该卷的挂载文件系统设备对象;备对象;p并调用并调用IoCallDriver函数将函数将IRP传递给拥有该文件系传递给拥有该文件系统设备对象的文件系统驱动程序统设备对象的文件系统驱动程序文件系统驱动程序体系结构-文件系统操作-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n当当FSD接受到接受到IRP_MJ_CREATE类型的类型的IRP时,会查找时,会查找指定的文件,执行安全验证指定的文件,执行安全验证n若文件存在且用户拥有其请求的访问权限,若文件存在且用户拥有其请求的访问权限,FSD返回一返回一个成功代码。

个成功代码p对象管理器在进程的句柄表中为该文件对象创建文对象管理器在进程的句柄表中为该文件对象创建文件句柄;件句柄;p然后通过函数调用链将该文件句柄作为然后通过函数调用链将该文件句柄作为CreateFile函函数的返回参数,返回给应用程序数的返回参数,返回给应用程序n若文件系统未能成功地完成创建操作若文件系统未能成功地完成创建操作pI/O管理器会删除其创建的文件对象管理器会删除其创建的文件对象文件系统驱动程序体系结构-文件系统操作-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nReadFile函数函数n调用调用ReadFile函数进入内核执行的过程与调用函数进入内核执行的过程与调用CreateFile函数相同,但函数相同,但NtReadFile系统服务并不需要系统服务并不需要执行路径名查找执行路径名查找p因为因为NtReadFile调用对象管理器将调用对象管理器将ReadFile函数传函数传递来的文件句柄转换为指向文件对象的指针递来的文件句柄转换为指向文件对象的指针文件系统驱动程序体系结构-文件系统操作-文件系统操作Windows缓存管理缓存管理 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n若文件句柄指明调用者拥有在文件打开时读文件的权限若文件句柄指明调用者拥有在文件打开时读文件的权限pNtReadFile系统服务会创建系统服务会创建IRP_MJ_READ类型的类型的IRP,并将该,并将该IRP发送给文件所在的发送给文件所在的FSD。

ØNtReadFile获取存储在文件对象中的获取存储在文件对象中的FSD设备对设备对象;象;Ø然后调用然后调用IoCallDriver,由,由I/O管理器根据设备对管理器根据设备对象定位象定位FSD,并将,并将IRP发送给发送给FSD文件系统驱动程序体系结构-文件系统操作-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n若将要读取的文件可以被缓存,则若将要读取的文件可以被缓存,则FSD检查该文件对象检查该文件对象的缓存特性是否已被启动的缓存特性是否已被启动p若文件对象的缓存特性已被启动若文件对象的缓存特性已被启动Ø文件对象中的文件对象中的PrivateCacheMap字段指向了一个字段指向了一个私有缓存映射结构私有缓存映射结构p若若FSD还没有为该文件对象初始化缓存还没有为该文件对象初始化缓存ØFSD调用缓存管理器的调用缓存管理器的CcInitializeCacheMap函函数初始化缓存,包括由缓存管理器创建的私有缓数初始化缓存,包括由缓存管理器创建的私有缓存映射结构存映射结构Ø在有其他文件对象指向了相同的没有被初始化缓在有其他文件对象指向了相同的没有被初始化缓存的文件时,创建共享缓存映射结构与区域对象。

存的文件时,创建共享缓存映射结构与区域对象文件系统驱动程序体系结构-文件系统操作-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nFSD在验证该文件的缓存使能之后,会将被请求的文件在验证该文件的缓存使能之后,会将被请求的文件数据从缓存管理器的虚拟内存拷贝到线程通过数据从缓存管理器的虚拟内存拷贝到线程通过ReadFile函数指定的缓冲区中函数指定的缓冲区中p文件系统调用缓存管理器的文件系统调用缓存管理器的CcCopyRead函数执行函数执行拷贝操作拷贝操作Ø该函数的参数包括文件对象、文件偏移量与文件该函数的参数包括文件对象、文件偏移量与文件长度Ø当缓存管理器执行当缓存管理器执行CcCopyRead函数时,可以获函数时,可以获得指向保存在文件对象中的共享缓存映射结构的得指向保存在文件对象中的共享缓存映射结构的指针,而在共享缓存映射结构中则保存了指向指针,而在共享缓存映射结构中则保存了指向VACB的指针文件系统驱动程序体系结构-文件系统操作-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院p若指向文件某一部分的若指向文件某一部分的VACB指针为指针为null,,Ø则则CcCopyRead函数会分配一个函数会分配一个VACB,且在缓,且在缓存管理器的虚拟地址空间中保留一个存管理器的虚拟地址空间中保留一个256KB的视的视图,并调用图,并调用MmMapViewInSystemCache函数将函数将文件的指定部分映射到该视图。

文件的指定部分映射到该视图ØCcCopyRead函数会将文件数据从映射视图拷贝函数会将文件数据从映射视图拷贝到其指定的缓冲区中到其指定的缓冲区中文件系统驱动程序体系结构-文件系统操作-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院p若文件数据不在物理内存,则拷贝操作会产生缺页若文件数据不在物理内存,则拷贝操作会产生缺页中断,由中断,由MmAccessFault函数来处理函数来处理Ø当产生缺页时,当产生缺页时,MmAccessFault函数检查产生缺函数检查产生缺页的虚地址,并在产生缺页的进程的页的虚地址,并在产生缺页的进程的VAD树中定树中定位虚地址描述符位虚地址描述符VAD此时,该此时,该VAD描述了缓存描述了缓存管理器中将要被读取文件的映射视图管理器中将要被读取文件的映射视图ØMmAccessFault函数调用函数调用MiDispatchFault函数在函数在一个有效虚拟内存地址上处理缺页一个有效虚拟内存地址上处理缺页ØMiDispatchFault函数定位函数定位VAD指向的控制区域,指向的控制区域,并在控制区域中搜索以发现代表打开文件的文件并在控制区域中搜索以发现代表打开文件的文件对象。

对象文件系统驱动程序体系结构-文件系统操作-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院ØMiDispatchFault函数在获取文件对象之后,调函数在获取文件对象之后,调用用I/O管理器的管理器的IoPageRead函数来构造一个函数来构造一个IRP_MJ_READ类型的类型的IRP,并将该,并将该IRP发送给发送给该文件对象指向的设备对象所属的该文件对象指向的设备对象所属的FSDØ文件系统可以被重入以读取由文件系统可以被重入以读取由CcCopyRead函数函数请求的数据,但此时请求的数据,但此时IRP被标记为非缓存的换页被标记为非缓存的换页I/O,该标记通知,该标记通知FSD应直接从磁盘获取文件数应直接从磁盘获取文件数据ØFSD确定磁盘上的哪些簇包含了被请求的数据,确定磁盘上的哪些簇包含了被请求的数据,并将并将IRP发送给拥有文件所在的卷设备对象的卷发送给拥有文件所在的卷设备对象的卷管理器文件系统驱动程序体系结构-文件系统操作-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院Ø内存管理器等待内存管理器等待FSD完成完成IRP读请求,然后将控读请求,然后将控制权返回给缓存管理器,由缓存管理器继续执行制权返回给缓存管理器,由缓存管理器继续执行由缺页中断的拷贝操作。

由缺页中断的拷贝操作p当当CcCopyRead完成后,完成后,FSD将控制权返回给调用将控制权返回给调用NtReadFile系统服务的线程,此时所请求的文件数系统服务的线程,此时所请求的文件数据已经被拷贝到线程缓冲区中据已经被拷贝到线程缓冲区中文件系统驱动程序体系结构-文件系统操作-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nWriteFile函数函数nNtWriteFile系统调用产生系统调用产生IRP_MJ_WRITE类型的类型的IRPnFSD调用调用CcCopyWrite函数n其他与其他与ReadFile函数的执行过程完全相同函数的执行过程完全相同nCcCopyWrite函数将要被写的文件部分被映射到缓存中,函数将要被写的文件部分被映射到缓存中,然后将然后将WriteFile函数指定的缓冲区内容拷贝到缓存中函数指定的缓冲区内容拷贝到缓存中文件系统驱动程序体系结构-文件系统操作-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•内存管理器的修改页面写入器与映射页面写入器n内存管理器的修改页面写入器与映射页面写入器被定期唤内存管理器的修改页面写入器与映射页面写入器被定期唤醒,或者在可用内存变得很低时被唤醒,以将被修改的页醒,或者在可用内存变得很低时被唤醒,以将被修改的页面刷新到磁盘上。

面刷新到磁盘上n线程调用线程调用IoAsynchronousPageWrite函数创建函数创建IRP_MJ_WRITE类型的类型的IRP,然后将页面或者写入页面文,然后将页面或者写入页面文件,或者写入映射后被修改的文件中件,或者写入映射后被修改的文件中n这些这些IRP被标记为非缓存的换页被标记为非缓存的换页I/O,从而,,从而,FSD可以绕可以绕过文件系统缓存,直接将过文件系统缓存,直接将IRP发送给存储驱动程序,以发送给存储驱动程序,以便将内存数据写入磁盘便将内存数据写入磁盘文件系统驱动程序体系结构-文件系统操作-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•缓存管理器的延迟写入器n缓存管理器的延迟写线程定期将被映射到缓存中且已被修缓存管理器的延迟写线程定期将被映射到缓存中且已被修改过的文件区域视图刷新到磁盘上改过的文件区域视图刷新到磁盘上n缓存管理器调用缓存管理器调用MmFlushSection函数执行刷新操作,刷新函数执行刷新操作,刷新操作会触发内存管理器将刷新区域中任何被修改过的页面操作会触发内存管理器将刷新区域中任何被修改过的页面写入磁盘写入磁盘。

nMmFlushSection函数使用函数使用IoSynchronousPageWrite函数函数将数据发送给将数据发送给FSD文件系统驱动程序体系结构-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•缓存管理器的预读线程n在应用程序、驱动程序或系统线程显式请求数据之前,预在应用程序、驱动程序或系统线程显式请求数据之前,预读线程会尝试从文件中读取该数据读线程会尝试从文件中读取该数据n预读线程使用在文件上所执行读操作的历史记录来确定预预读线程使用在文件上所执行读操作的历史记录来确定预先读取多少数据,该历史记录保存在文件对象的私有缓存先读取多少数据,该历史记录保存在文件对象的私有缓存映射中n当该线程执行预读操作时,它只是将需要读取的部分映射当该线程执行预读操作时,它只是将需要读取的部分映射到缓存中(必要时分配到缓存中(必要时分配VACB),然后访问被映射的数据),然后访问被映射的数据即可文件系统驱动程序体系结构-文件系统操作-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•内存管理器的缺页处理程序n内存管理器的内存管理器的MmAccessFault处理程序会通过处理程序会通过ioPageRead函数向存储文件的文件系统发送函数向存储文件的文件系统发送IRP。

文件系统驱动程序体系结构-文件系统操作-文件系统操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•位于文件系统驱动程序之上的过滤型驱动程序称为文件系统过滤型驱动程序(file system filter driver)n文件系统过滤型驱动程序能够看到所有的文件系统请求,文件系统过滤型驱动程序能够看到所有的文件系统请求,并且可选地修改或完成这些请求并且可选地修改或完成这些请求•各种应用n远程文件复制远程文件复制n文件加密文件加密n备份备份n文件许可控制等文件许可控制等文件系统驱动程序体系结构-文件系统过滤型驱动程序-文件系统过滤型驱动程序 •例子:病毒扫描程序n每一种商业的、在访问时检查的病毒扫描程序均包含了文每一种商业的、在访问时检查的病毒扫描程序均包含了文件系统过滤型驱动程序件系统过滤型驱动程序n当应用程序打开文件时,文件系统过滤型驱动程序会截获当应用程序打开文件时,文件系统过滤型驱动程序会截获应用程序发出的应用程序发出的IRP_MJ_CREATE类型的类型的IRPn在将该在将该IRP传递给文件系统驱动程序之前,病毒扫描程序传递给文件系统驱动程序之前,病毒扫描程序会检查将要被打开的文件,以确保该文件没有病毒。

会检查将要被打开的文件,以确保该文件没有病毒n若文件是无病毒的,则病毒扫描程序会继续传递该若文件是无病毒的,则病毒扫描程序会继续传递该IRP;;n若文件感染病毒,病毒扫描程序会通知与其关联的若文件感染病毒,病毒扫描程序会通知与其关联的Windows服务进程隔离或清理该文件服务进程隔离或清理该文件p若文件不能够被清理,则文件系统过滤型驱动程序若文件不能够被清理,则文件系统过滤型驱动程序会返回该会返回该IPR失败(通常带有一个访问被拒绝错误),失败(通常带有一个访问被拒绝错误),因而病毒不会被激活因而病毒不会被激活 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•两种特殊的文件系统过滤型驱动程序nFilemonnFilemon是由是由sysinternals公司提供的文件系统活动监视公司提供的文件系统活动监视工具,它是一个被动的过滤型驱动程序,因而不会修改工具,它是一个被动的过滤型驱动程序,因而不会修改应用程序与文件系统驱动程序之间的应用程序与文件系统驱动程序之间的IRP流n系统恢复系统恢复n系统恢复使用了文件系统过滤型驱动程序来监视对关键系统恢复使用了文件系统过滤型驱动程序来监视对关键系统文件的修改,并执行相应的备份,从而使得文件可系统文件的修改,并执行相应的备份,从而使得文件可以被恢复到恢复点(以被恢复到恢复点(restore points)时的状态。

时的状态文件系统驱动程序体系结构-文件系统过滤型驱动程序-文件系统过滤型驱动程序 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n实验:执行实验:执行Filemon实时显示所有文件活动实时显示所有文件活动文件系统驱动程序体系结构-文件系统过滤型驱动程序-文件系统过滤型驱动程序 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院NTFS的设计目标与特性•NTFS的设计目标n是满足企业级文件系统的需求是满足企业级文件系统的需求n文件系统需求文件系统需求n可恢复性可恢复性p为了在系统崩溃或掉电时能够尽可能地减少数据丢为了在系统崩溃或掉电时能够尽可能地减少数据丢失,文件系统必须确保在任何时候都能够保证其失,文件系统必须确保在任何时候都能够保证其元元数据数据的完整性的完整性n安全性安全性p为了保护敏感数据避免遭受未授权的访问,文件系为了保护敏感数据避免遭受未授权的访问,文件系统必须有统一的安全模型统必须有统一的安全模型 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n数据冗余与容错能力数据冗余与容错能力p文件系统必须允许基于软件的数据冗余机制,以作文件系统必须允许基于软件的数据冗余机制,以作为硬件冗余机制的替代来保护用户数据。

为硬件冗余机制的替代来保护用户数据NTFS的设计目标与特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•NTFS的特性n可恢复性可恢复性n安全性安全性n数据冗余与容错数据冗余与容错n动态添加卷磁盘空间动态添加卷磁盘空间n多数据流多数据流n基于基于Unicode的文件名的文件名n通用索引机制通用索引机制n动态坏簇重映射动态坏簇重映射n磁盘配额磁盘配额n压缩文件与稀疏文件压缩文件与稀疏文件NTFS的设计目标与特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n分布式链接跟踪分布式链接跟踪n文件加密文件加密n碎片整理碎片整理nPOSIX支持支持n只读支持只读支持NTFS的设计目标与特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n可恢复性可恢复性nNTFS提供基于原子事务概念的文件系统恢复机制提供基于原子事务概念的文件系统恢复机制p原子事务的基本原则原子事务的基本原则Ø要么全部完成,要么全部不做(要么全部完成,要么全部不做(all-or-nothing)p在在Windows系统中,系统中,事务事务被定义为一个改变文件系被定义为一个改变文件系统数据或卷目录结构的统数据或卷目录结构的I/O操作。

操作p构成事务的独立磁盘更新操作必须构成事务的独立磁盘更新操作必须以原子的方式以原子的方式执执行行Ø一旦事务开始执行,所有的磁盘更新必须完成;一旦事务开始执行,所有的磁盘更新必须完成;Ø若系统失败使事务中断,则已经完成的部分必须若系统失败使事务中断,则已经完成的部分必须被撤销(被撤销(undo),或回滚(),或回滚(rolled back)NTFS的设计目标与特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院p若应用程序发起修改若应用程序发起修改NTFS卷结构的卷结构的I/O操作,则操作,则NTFS将该操作作为原子事务将该操作作为原子事务ØNTFS保证事务或者全部完成,或者若事务执行保证事务或者全部完成,或者若事务执行时系统失败,则回滚时系统失败,则回滚nNTFS支持对关键文件系统信息的冗余存储支持对关键文件系统信息的冗余存储p使得如果磁盘上的一个扇区损坏,使得如果磁盘上的一个扇区损坏,NTFS仍然可以访仍然可以访问卷的关键文件系统数据问卷的关键文件系统数据NTFS的设计目标与特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n安全性安全性nNTFS利用操作系统提供的对象模型与安全描述符来实利用操作系统提供的对象模型与安全描述符来实现数据安全性。

现数据安全性p打开的文件被实现为一个带有安全描述符的文件对打开的文件被实现为一个带有安全描述符的文件对象,其安全描述符作为文件的一部分保存在磁盘上象,其安全描述符作为文件的一部分保存在磁盘上p在进程打开任何对象的句柄之前,在进程打开任何对象的句柄之前,Windows安全系安全系统会验证该进程是否拥有适当的权限统会验证该进程是否拥有适当的权限p安全描述符与用户登录口令相结合,确保进程只有安全描述符与用户登录口令相结合,确保进程只有被系统管理员或文件所有者授予特定的权限,才能被系统管理员或文件所有者授予特定的权限,才能访问文件访问文件n在在Windows中,安全策略(中,安全策略(ACL)只需存储一次即可在)只需存储一次即可在多个文件中引用多个文件中引用NTFS的设计目标与特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院NTFS的设计目标与特性n数据冗余与容错数据冗余与容错nNTFS借助于分层驱动程序模型提供容错磁盘支持借助于分层驱动程序模型提供容错磁盘支持pRAID 1和和RAID 5n动态添加卷磁盘空间动态添加卷磁盘空间n在在Windows系统的动态磁盘中,不需要重新引导即可向系统的动态磁盘中,不需要重新引导即可向NTFS卷中增加磁盘空间。

卷中增加磁盘空间 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n多数据流多数据流n在在NTFS中,每个与文件相关的信息单元,包括文件名、中,每个与文件相关的信息单元,包括文件名、所有者、时间戳及数据等,都被实现为所有者、时间戳及数据等,都被实现为文件属性文件属性((NTFS对象属性)对象属性)p每个属性由一个每个属性由一个流流构成,因此构成,因此NTFS文件和目录可以文件和目录可以包含多个数据流包含多个数据流p每个每个NTFS文件有一个文件有一个缺省的数据流缺省的数据流,缺省的数据流,缺省的数据流没有名称没有名称p应用程序可以创建额外的、应用程序可以创建额外的、命名的数据流命名的数据流,并通过,并通过流的名称访问数据流,形如流的名称访问数据流,形如myfile.dat:streamNTFS的设计目标与特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n使用多数据流的应用程序例子:使用多数据流的应用程序例子:Windows Explorer pNTFS文件右击文件右击Property(属性)时,对话框中的(属性)时,对话框中的Summary(摘要)标签页允许将标题、主题、作者(摘要)标签页允许将标题、主题、作者和关键字等信息与文件关联起来。

和关键字等信息与文件关联起来pWindows Explorer将这些信息保存在该文件的将这些信息保存在该文件的Summary Information流中NTFS的设计目标与特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n基于基于Unicode的文件名的文件名nNTFS采用采用16位的位的Unicode字符来存储文件、目录和卷的字符来存储文件、目录和卷的名称pUnicode针对每个字符有惟一的表示针对每个字符有惟一的表示p路径中每个文件名可以长达路径中每个文件名可以长达255个字符,并允许包含个字符,并允许包含Unicode字符、空格和多个句点字符、空格和多个句点NTFS的设计目标与特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n通用索引机制通用索引机制nNTFS的体系结构被组织成允许在一个磁盘卷中索引文的体系结构被组织成允许在一个磁盘卷中索引文件属性,从而可以有效地定位符合某种准则的文件件属性,从而可以有效地定位符合某种准则的文件n使用通用索引机制的例子:统一的安全描述符使用通用索引机制的例子:统一的安全描述符p在一个卷上,文件和目录的安全描述符保存在单个在一个卷上,文件和目录的安全描述符保存在单个内部流中,从而可以消除重复的安全描述符;内部流中,从而可以消除重复的安全描述符;p并使用并使用NTFS定义的内部安全标识符进行索引。

定义的内部安全标识符进行索引NTFS的设计目标与特性 n动态坏簇重映射动态坏簇重映射nNTFS容错驱动程序可以动态地恢复和保存坏扇区中的容错驱动程序可以动态地恢复和保存坏扇区中的数据n通常,若应用程序试图从一个坏磁盘扇区中读数据时,通常,若应用程序试图从一个坏磁盘扇区中读数据时,读操作会失败,且该簇中的数据不可访问读操作会失败,且该簇中的数据不可访问n若磁盘被格式化为容错的若磁盘被格式化为容错的NTFS卷,卷,pWindows容错驱动程序会获取存储在该坏扇区上数容错驱动程序会获取存储在该坏扇区上数据的一份拷贝,并向据的一份拷贝,并向NTFS发送警告,通知发送警告,通知NTFS该该扇区已坏扇区已坏pNTFS会分配一个新簇,以替换坏扇区驻留的簇,并会分配一个新簇,以替换坏扇区驻留的簇,并将数据拷贝到新簇将数据拷贝到新簇pNTFS标记坏簇,不再使用该簇标记坏簇,不再使用该簇n若扇区损坏的时候卷管理器尚未被加载,若扇区损坏的时候卷管理器尚未被加载,nNTFS仍然会替换坏簇并不再使用该簇,但仍然会替换坏簇并不再使用该簇,但NTFS无无法恢复坏簇上存储的数据法恢复坏簇上存储的数据 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院NTFS的设计目标与特性n磁盘配额磁盘配额nNTFS可以针对每个用户指定磁盘配额,从而提供限制可以针对每个用户指定磁盘配额,从而提供限制使用磁盘空间的能力。

使用磁盘空间的能力nNTFS可以被配置成:可以被配置成:p若用户超出其警告限制值,则若用户超出其警告限制值,则NTFS会在系统事件日会在系统事件日志中记录下来;志中记录下来;p若用户试图使用超出其配额限制的卷存储空间,则若用户试图使用超出其配额限制的卷存储空间,则NTFS在系统事件日志中记录该事件,并使导致此次在系统事件日志中记录该事件,并使导致此次配额违例的应用程序文件配额违例的应用程序文件I/O操作失败,其错误代码操作失败,其错误代码为为“disk full” 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nNTFS使用文件和目录创建者的安全使用文件和目录创建者的安全ID来标记文件和目来标记文件和目录,并根据该录,并根据该ID来跟踪一个用户的卷使用量来跟踪一个用户的卷使用量p一个用户所拥有的文件和目录的逻辑大小被计入为一个用户所拥有的文件和目录的逻辑大小被计入为该用户定义的配额限制中,从而用户不能够通过创该用户定义的配额限制中,从而用户不能够通过创建超出其配额的、空的稀疏文件来躲避其配额限制,建超出其配额的、空的稀疏文件来躲避其配额限制,随后再为该文件填充数据随后再为该文件填充数据。

n缺省情况下,卷并没有使能配额跟踪,需要使用卷属性缺省情况下,卷并没有使能配额跟踪,需要使用卷属性对话框中的对话框中的“Quota”标签页来使能配额功能标签页来使能配额功能NTFS的设计目标与特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n卷属性对话框的示意图卷属性对话框的示意图NTFS的设计目标与特性 n压缩文件压缩文件nNTFS支持目录和文件数据的压缩功能支持目录和文件数据的压缩功能n目录被压缩意味着在该目录中随后创建的任何文件均是目录被压缩意味着在该目录中随后创建的任何文件均是被压缩的被压缩的n应用程序调用应用程序调用DeviceIoControl函数处理压缩文件:函数处理压缩文件: p使用使用FSCTL_SET_COMPRESSION文件系统控制代文件系统控制代码来压缩和解压缩文件;码来压缩和解压缩文件;p使用使用FSCTL_GET_COMPRESSION控制代码来查控制代码来查询文件或目录的压缩状态询文件或目录的压缩状态n应用程序还可以调用应用程序还可以调用GetFileAttributes函数来查询文件函数来查询文件和目录的压缩状态和目录的压缩状态p压缩文件或目录的压缩文件或目录的FILE_ATTRIBUTE_COMMPRESSED属性标志被属性标志被置位。

置位 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n稀疏文件稀疏文件n若一个文件被标记为若一个文件被标记为稀疏的稀疏的,则,则NTFS不为该文件中被不为该文件中被应用程序指定为空的部分分配卷磁盘空间应用程序指定为空的部分分配卷磁盘空间n当应用程序从稀疏文件中为空的区域中读数据的时候,当应用程序从稀疏文件中为空的区域中读数据的时候,NTFS返回全为返回全为0的缓冲区的缓冲区n应用程序调用应用程序调用DeviceIoControl函数处理稀疏文件:函数处理稀疏文件:p使用使用FSCTL_SET_SPARSE文件系统控制代码来指文件系统控制代码来指定文件的稀疏状态;定文件的稀疏状态;p使用使用FSCTL_SET_ZERO_DATA代码设置文件中为代码设置文件中为空的区域范围;空的区域范围;p使用使用FSCTL_QUERY_ALLOCATED_RANGES代代码查询文件中的稀疏部分码查询文件中的稀疏部分NTFS的设计目标与特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n稀疏文件对于实现循环缓冲区方式日志的客户稀疏文件对于实现循环缓冲区方式日志的客户/服务器程服务器程序极为有用。

序极为有用p服务器在文件中记录信息,而客户端异步读取信息服务器在文件中记录信息,而客户端异步读取信息p由于服务器写入文件中的信息在客户端读取之后不由于服务器写入文件中的信息在客户端读取之后不再需要,因此无需在文件中保存再需要,因此无需在文件中保存p使用稀疏文件,使用稀疏文件,Ø客户端可以指定其已读取部分为空,从而释放卷客户端可以指定其已读取部分为空,从而释放卷空间;空间;Ø而服务器则继续在文件中添加新的信息,而无需而服务器则继续在文件中添加新的信息,而无需担心文件会一直增长并消耗卷上的可用空间担心文件会一直增长并消耗卷上的可用空间nNTFS变更日志(变更日志(NTFS change journal)是稀疏文件的)是稀疏文件的典型应用典型应用NTFS的设计目标与特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院NTFS的设计目标与特性n分布式链接跟踪分布式链接跟踪nNTFS通过称为对象通过称为对象ID((object ID)的可选文件属性支)的可选文件属性支持分布式链接跟踪(持分布式链接跟踪(distributed link-tracking)n利用分布式链接跟踪支持,利用分布式链接跟踪支持,p若位于一个若位于一个NTFS卷上的链接源移到域内其他卷时,卷上的链接源移到域内其他卷时,链接跟踪服务可以透明地跟随此移动过程,并更新链接跟踪服务可以透明地跟随此移动过程,并更新该链接的变化。

该链接的变化p当当shell与与OLE链接的目标文件移动时,链接跟踪服链接的目标文件移动时,链接跟踪服务维护链接的完整性务维护链接的完整性ØWindows Start菜单和桌面文件使用了菜单和桌面文件使用了shell快捷快捷方式;方式;Ø对象链接和嵌入对象链接和嵌入OLE中的链接使得一个应用中的中的链接使得一个应用中的文档可以被透明地嵌入到其他应用的文档中文档可以被透明地嵌入到其他应用的文档中 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n应用程序使用应用程序使用pFSCTL_CREATE_OR_GET_OBJECT_ID:若文件:若文件尚未被分配对象尚未被分配对象ID,则为其分配对象,则为其分配对象ID;;pFSCTL_SET_OBJECT_ID:为文件分配对象:为文件分配对象ID;;pFSCTL_GET_OBJECT_ID:查询文件的对象:查询文件的对象ID;;pFSCTL_DELETE_OBJECT_ID:从文件中删除对:从文件中删除对象象IDNTFS的设计目标与特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n文件加密文件加密n加密文件系统加密文件系统EFS能够对能够对NTFS文件进行加密,再存储文件进行加密,再存储到磁盘上。

到磁盘上nEFS操作对应用程序是完全透明的,这意味着:操作对应用程序是完全透明的,这意味着:p当应用程序读文件数据时,若其拥有相应的权限,当应用程序读文件数据时,若其拥有相应的权限,则文件数据被自动解密;则文件数据被自动解密;p当应用程序更新文件时,若其拥有相应的权限,则当应用程序更新文件时,若其拥有相应的权限,则文件数据被自动加密文件数据被自动加密NTFS的设计目标与特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nEFS依赖于依赖于Windows提供的、用户模式的密码服务,由提供的、用户模式的密码服务,由内核模式组件和用户模式内核模式组件和用户模式DLL组成:组成:p内核模式组件与内核模式组件与NTFS紧密集成;紧密集成;p用户模式用户模式DLL与本地安全鉴别子系统与本地安全鉴别子系统LSASS和密码和密码模块模块DLL通信n被加密的文件只能通过一个帐号的被加密的文件只能通过一个帐号的EFS私钥进行访问,私钥进行访问,而私钥由该帐号的口令加锁而私钥由该帐号的口令加锁n应用程序可以使用应用程序可以使用EncryptFile和和DecryptFile函数来加密函数来加密和解密文件,使用和解密文件,使用FileEncryptionStatus函数获得一个文函数获得一个文件或目录的件或目录的EFS相关的属性。

相关的属性p例如,文件和目录是否已被加密等例如,文件和目录是否已被加密等NTFS的设计目标与特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n碎片整理碎片整理n若一个文件的数据占据不连续的簇时,则文件变碎若一个文件的数据占据不连续的簇时,则文件变碎n第三方磁盘碎片整理工具可以利用第三方磁盘碎片整理工具可以利用Windows提供的碎片提供的碎片整理整理API来移动文件数据,从而使文件占据连续的簇来移动文件数据,从而使文件占据连续的簇p应用程序可以利用该应用程序可以利用该API,并使用,并使用ØFSCTL_GET_VOLUME_BITMAP:获得一个:获得一个卷的空闲簇与使用簇的映射表;卷的空闲簇与使用簇的映射表;ØFSCTL_GET_RETRIEVAL_POINTERS:获得:获得一个文件的簇使用情况的映射表;一个文件的簇使用情况的映射表;ØFSCTL_MOVE_FILE:移动一个文件移动一个文件nWindows内置了磁盘碎片整理工具,使用内置了磁盘碎片整理工具,使用Disk Defragmenter工具(工具(\Windows\System32\Dfrg.msc)进)进行访问。

行访问NTFS的设计目标与特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nPOSIX支持支持n支持大小写敏感的文件和目录名、支持浏览目录等支持大小写敏感的文件和目录名、支持浏览目录等POSIX标准n只读支持只读支持nNTFS驱动程序可以挂载只读介质上的卷驱动程序可以挂载只读介质上的卷n这对于具有只读的基本文件系统映像的嵌入式系统来说,这对于具有只读的基本文件系统映像的嵌入式系统来说,是必要的是必要的NTFS的设计目标与特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院NTFS文件系统驱动程序•Windows I/O系统的组件图 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•在分层的驱动程序模型中,驱动程序通过调用Windows执行体的I/O管理器,将I/O请求传递给其他驱动程序nI/O管理器作为中间载体,允许驱动程序保持独立,使得驱管理器作为中间载体,允许驱动程序保持独立,使得驱动程序可以被加载或卸载动程序可以被加载或卸载•NTFS驱动程序与缓存管理器、内存管理器与日志文件服务进行交互NTFS文件系统驱动程序 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院NTFS文件系统驱动程序•NTFS与相关组件的示意图 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院NTFS文件系统驱动程序n日志文件服务日志文件服务LFSn是是NTFS的一部分,提供了相应的服务来维护磁盘写操的一部分,提供了相应的服务来维护磁盘写操作的记录;作的记录;n用于在系统失败时恢复用于在系统失败时恢复NTFS格式的卷。

格式的卷n缓存管理器缓存管理器nWindows执行体组件,为执行体组件,为NTFS与其他文件系统驱动程与其他文件系统驱动程序,提供了系统范围的缓存服务;序,提供了系统范围的缓存服务;n提供特定的文件系统接口,以访问缓存数据;提供特定的文件系统接口,以访问缓存数据;n使用其延迟写线程来优化磁盘使用其延迟写线程来优化磁盘I/O 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院NTFS文件系统驱动程序n内存管理器内存管理器n当应用程序试图访问还没有加载到缓存中的文件部分时,当应用程序试图访问还没有加载到缓存中的文件部分时,内存管理器调用内存管理器调用NTFS来访问磁盘驱动程序,以便从磁来访问磁盘驱动程序,以便从磁盘中获取文件的内容盘中获取文件的内容n缓存管理器的延迟写线程调用内存管理器在后台将缓存缓存管理器的延迟写线程调用内存管理器在后台将缓存的内容刷新到磁盘上的内容刷新到磁盘上 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院NTFS文件系统驱动程序•NTFS将文件实现为对象,从而文件可以被共享,并允许对象管理器保护文件n应用程序通过文件句柄来创建并访问文件。

应用程序通过文件句柄来创建并访问文件n当当I/O请求到达请求到达NTFS时,对象管理器与安全系统已验证调时,对象管理器与安全系统已验证调用进程对该文件对象拥有相应的访问权限用进程对该文件对象拥有相应的访问权限n安全系统将调用者的访问令牌与该文件对象的访问控制安全系统将调用者的访问令牌与该文件对象的访问控制列表进行比较,以确定调用者对文件的访问权限列表进行比较,以确定调用者对文件的访问权限nI/O管理器将文件句柄转换为指向文件对象的指针,管理器将文件句柄转换为指向文件对象的指针,NTFS使用文件对象中的信息来访问磁盘上的文件使用文件对象中的信息来访问磁盘上的文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院NTFS文件系统驱动程序•NTFS数据结构n将文件句柄与文件系统在磁盘上的结构链接起来将文件句柄与文件系统在磁盘上的结构链接起来ü进程打开进程打开文件句柄文件句柄üNTFS利用从文件对象开始的指针利用从文件对象开始的指针获取该文件在磁盘上的位置获取该文件在磁盘上的位置ü当当I/O系统调用系统调用NTFS时,文件句柄时,文件句柄已经被转换成指向文件对象的指针已经被转换成指向文件对象的指针。

ü文件对象指向了文件对象指向了流控制块流控制块((SCB,,stream control block),以获取),以获取调用者试图读或写的文件属性调用者试图读或写的文件属性ü流控制块代表了单独的文件属性,流控制块代表了单独的文件属性,包含了关于如何在文件中查找指定包含了关于如何在文件中查找指定属性的某些信息属性的某些信息ü同一文件的所有同一文件的所有SCB均指向了一均指向了一个称为个称为文件控制块文件控制块((FCB,,file control block)的公共数据结构的公共数据结构üFCB包含了指向该文件在磁盘的包含了指向该文件在磁盘的主文件表(主文件表(MFT,,master file table)中记录的指针中记录的指针üNTFS通过通过指向指向MFT的的指针获得文指针获得文件的访问权件的访问权 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院NTFS在磁盘上的结构•NTFS卷在磁盘上的结构n卷卷n簇簇n主文件表主文件表n文件引用号文件引用号n文件记录文件记录n文件名文件名n常驻与非常驻属性常驻与非常驻属性n数据压缩与稀疏文件数据压缩与稀疏文件n更改日志文件更改日志文件n索引索引 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院NTFS在磁盘上的结构n对象对象IDn配额跟踪配额跟踪n一致的安全性一致的安全性n重解析点重解析点 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•卷(Volumes)n物理磁盘可以组织成一个或多个卷,物理磁盘可以组织成一个或多个卷,NTFS独立地处理每一独立地处理每一个卷。

个卷n卷是由一系列文件以及该磁盘分区上尚未分配的空间构成卷是由一系列文件以及该磁盘分区上尚未分配的空间构成的n在在NTFS卷中,所有的文件系统数据都作为普通文件进行存卷中,所有的文件系统数据都作为普通文件进行存储n包括位图、数据、目录、系统引导程序等包括位图、数据、目录、系统引导程序等NTFS在磁盘上的结构-卷-卷 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•簇(Clusters)nNTFS卷上的簇大小(或簇因子)是在用户使用卷上的簇大小(或簇因子)是在用户使用format命令命令或磁盘管理工具格式化卷时设置的或磁盘管理工具格式化卷时设置的n簇因子随卷大小而变化簇因子随卷大小而变化n簇因子是物理扇区的整数倍,且总是簇因子是物理扇区的整数倍,且总是2的幂nNTFS使用簇作为基本分配单位,从而使其独立于物理扇区使用簇作为基本分配单位,从而使其独立于物理扇区的大小n这种独立性允许这种独立性允许NTFS通过使用更大的簇因子支持大磁通过使用更大的簇因子支持大磁盘,或物理扇区大小不是盘,或物理扇区大小不是512B的非标准磁盘的非标准磁盘NTFS在磁盘上的结构-簇-簇 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n逻辑簇号(逻辑簇号(LCN,,logical cluster number))nNTFS使用使用LCN在磁盘上定位簇,在磁盘上定位簇,LCN是对整个卷中的是对整个卷中的所有簇从头到尾进行编号。

所有簇从头到尾进行编号n为了将为了将LCN转换为物理磁盘地址,转换为物理磁盘地址,NTFS将将LCN乘以簇乘以簇因子,就可以计算出卷上的物理字节偏移量因子,就可以计算出卷上的物理字节偏移量n虚拟簇号(虚拟簇号(VCN,,virtual cluster number))nNTFS使用使用VCN在文件中定位数据,在文件中定位数据,VCN是对指定文件是对指定文件中的簇从头到尾进行编号,以方便引用文件中的数据中的簇从头到尾进行编号,以方便引用文件中的数据nVCN可以映射成卷上的任意可以映射成卷上的任意LCN,因此不要求是物理连,因此不要求是物理连续的NTFS在磁盘上的结构-簇-簇 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•主文件表(MFT,Master file table)nNTFS卷中存放的所有数据都包含在文件中卷中存放的所有数据都包含在文件中n包括定位和恢复文件的数据结构、引导程序数据,以及包括定位和恢复文件的数据结构、引导程序数据,以及记录整个卷分配状态的位图记录整个卷分配状态的位图((NTFS元数据)元数据)n将所有的对象存储在文件中,允许文件系统方便地定位将所有的对象存储在文件中,允许文件系统方便地定位和维护数据,并且每个文件都可以使用安全描述符进行和维护数据,并且每个文件都可以使用安全描述符进行保护。

保护n若磁盘的某个部分损坏,若磁盘的某个部分损坏,NTFS可以重新部署元数据文可以重新部署元数据文件,以防止磁盘不可访问件,以防止磁盘不可访问NTFS在磁盘上的结构-主文件表-主文件表 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n主文件表主文件表MFT是是NTFS卷结构的核心卷结构的核心nMFT被实现为文件记录的数组,每个文件记录的大小都被实现为文件记录的数组,每个文件记录的大小都被固定为被固定为1KBn从逻辑上讲,卷中每个文件在从逻辑上讲,卷中每个文件在MFT中都有一个记录,包中都有一个记录,包括括MFT本身n通常情况下,每个通常情况下,每个MFT记录与不同的文件相对应记录与不同的文件相对应p如果一个文件有很多属性或分散成很多碎片,就可如果一个文件有很多属性或分散成很多碎片,就可能需要不只一个文件记录能需要不只一个文件记录Ø在这种情况下,该文件的第一个在这种情况下,该文件的第一个MFT记录存储记录存储了其他了其他MFT记录的位置,且第一个记录被称为记录的位置,且第一个记录被称为基基文件记录文件记录((base file record)NTFS在磁盘上的结构-主文件表-主文件表 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n一个一个NTFS卷包括:卷包括:nMFTn一组元数据文件一组元数据文件p其中包含了用于实现文件系统结构的信息;其中包含了用于实现文件系统结构的信息;p每个每个NTFS元数据文件在元数据文件在MFT中有一个以中有一个以$开头的名开头的名称,例如称,例如MFT的文件名是的文件名是$Mft。

n正常的用户文件和目录正常的用户文件和目录NTFS在磁盘上的结构-主文件表-主文件表 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n当当NTFS首次访问某个卷时,必须挂载(首次访问某个卷时,必须挂载(mount)该卷,即)该卷,即从磁盘上读取元数据,并构建内部数据结构,从而可以处从磁盘上读取元数据,并构建内部数据结构,从而可以处理应用程序的文件系统访问理应用程序的文件系统访问n为了挂载卷,为了挂载卷,NTFS在引导扇区中查找在引导扇区中查找MFT的物理磁盘的物理磁盘地址n一旦一旦NTFS找到找到MFT的文件记录,就从该文件记录的数的文件记录,就从该文件记录的数据属性中获得虚拟簇号据属性中获得虚拟簇号VCN到逻辑簇号到逻辑簇号LCN之间的映射之间的映射信息,并将其保存在内存中信息,并将其保存在内存中NTFS在磁盘上的结构-主文件表-主文件表 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n映射信息告诉映射信息告诉NTFS构成构成MFT的的串串在磁盘上的位置,然在磁盘上的位置,然后后NTFS处理其他一些元数据文件的处理其他一些元数据文件的MFT记录,并打开记录,并打开这些文件。

这些文件p若属性太大而不能放入若属性太大而不能放入MFT文件记录中,则文件记录中,则NTFS会在会在MFT之外为该属性分配区域,该区域被称为之外为该属性分配区域,该区域被称为串串((run)或)或范围范围((extent)p每个串都包含了每个串都包含了VCN到到LCN的映射,以及串长度的映射,以及串长度nNTFS执行文件系统恢复操作,最后执行文件系统恢复操作,最后NTFS打开其余的元打开其余的元数据文件,此时,用户可以访问该卷数据文件,此时,用户可以访问该卷NTFS在磁盘上的结构-主文件表-主文件表 nMFT中中NTFS元数据文件记录元数据文件记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nMFT(($Mft))nMFT自身的文件记录,记录了各属性的信息自身的文件记录,记录了各属性的信息nMFT副本(副本($MftMirr))n指向位于磁盘中间的被称作指向位于磁盘中间的被称作MFT镜像的文件(文件名为镜像的文件(文件名为$MftMirr),该文件中包含了),该文件中包含了MFT的前几行数据的拷的前几行数据的拷贝n若若MFT文件的一部分由于某种原因无法读取,则副本就文件的一部分由于某种原因无法读取,则副本就用于定位元数据文件。

用于定位元数据文件NTFS在磁盘上的结构-主文件表-主文件表 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n日志文件(日志文件($LogFile))nNTFS使用日志文件来记录所有影响使用日志文件来记录所有影响NTFS卷结构的操作,卷结构的操作,包括文件的创建或改变目录的任何命令包括文件的创建或改变目录的任何命令n日志文件用于在系统失败后恢复日志文件用于在系统失败后恢复NTFS卷n根目录(根目录(\))n根目录的文件记录包含存放于根目录的文件记录包含存放于NTFS目录结构根下的文目录结构根下的文件和目录索引件和目录索引n当当NTFS首次请求打开一个文件时,开始在根目录的文首次请求打开一个文件时,开始在根目录的文件记录中搜索该文件件记录中搜索该文件n打开文件后,打开文件后,NTFS存储该文件的存储该文件的MFT文件引用,从而文件引用,从而当其再次读写该文件时可以直接访问该文件的当其再次读写该文件时可以直接访问该文件的MFT记录NTFS在磁盘上的结构-主文件表-主文件表 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n映射文件(映射文件($Bitmap))nNTFS将卷的分配状态记录在映射文件中。

将卷的分配状态记录在映射文件中n映射文件的数据属性包含一个位图映射文件的数据属性包含一个位图n其中的每一位代表了卷中的一个簇,标识该簇是空其中的每一位代表了卷中的一个簇,标识该簇是空闲的还是已经被分配给一个文件闲的还是已经被分配给一个文件n安全文件(安全文件($Secure))n存储卷范围的安全描述符数据库存储卷范围的安全描述符数据库nNTFS的文件和目录有单独的、可设置的安全描述符的文件和目录有单独的、可设置的安全描述符n为了节省空间,为了节省空间,NTFS将安全设置存储在一个公共文件将安全设置存储在一个公共文件中,这使得拥有相同安全设置的文件和目录可以指向相中,这使得拥有相同安全设置的文件和目录可以指向相同的安全描述符同的安全描述符NTFS在磁盘上的结构-主文件表-主文件表 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n引导文件(引导文件($Boot))n存储存储Windows的引导程序代码的引导程序代码n为了引导系统,引导程序代码必须位于特定的磁盘位置为了引导系统,引导程序代码必须位于特定的磁盘位置n在格式化期间,在格式化期间,format命令通过将该区域创建一个文件命令通过将该区域创建一个文件记录,来将其定义为一个文件。

记录,来将其定义为一个文件n坏簇文件(坏簇文件($BadClus))n用于记录磁盘卷中的所有损坏位置用于记录磁盘卷中的所有损坏位置NTFS在磁盘上的结构-主文件表-主文件表 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n卷文件(卷文件($Volume))n包含了卷名、用于格式化该卷的包含了卷名、用于格式化该卷的NTFS版本,以及一个版本,以及一个特殊位,当该位被设置时,表示发生了磁盘损坏,必须特殊位,当该位被设置时,表示发生了磁盘损坏,必须使用使用Chkdsk实用程序进行恢复实用程序进行恢复n大写文件(大写文件($UpCase))n包含了大小写字符之间的翻译表包含了大小写字符之间的翻译表n属性定义表(属性定义表($AttrDef))n定义卷中支持的属性类型,并指出这些属性是否可以被定义卷中支持的属性类型,并指出这些属性是否可以被索引、在系统恢复操作时是否可以被恢复等索引、在系统恢复操作时是否可以被恢复等NTFS在磁盘上的结构-主文件表-主文件表 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n扩展元数据目录(扩展元数据目录($Extend)中存储了若干元数据文件)中存储了若干元数据文件n对象标识符文件对象标识符文件(($ObjId))p存储文件对象的存储文件对象的ID。

n配额文件(配额文件($Quota))p在支持配额的卷上,存储配额限制与行为信息在支持配额的卷上,存储配额限制与行为信息n更改日志文件(更改日志文件($UsnJrnl))p记录文件和目录的变化记录文件和目录的变化n重解析点文件(重解析点文件($Reparse))p存储关于卷上的哪些文件和目录包含重解析点的信存储关于卷上的哪些文件和目录包含重解析点的信息NTFS在磁盘上的结构-主文件表-主文件表 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•文件引用号nNTFS卷上的每个文件都有一个卷上的每个文件都有一个64位的惟一标识,称为位的惟一标识,称为文件文件引用引用((file reference)n文件引用由两部分组成:文件引用由两部分组成:n文件号文件号p文件号为文件号为48位,对应于该文件的文件记录在位,对应于该文件的文件记录在MFT中中的位置减的位置减1;;p若该文件有多个文件记录,则是基文件记录的位置若该文件有多个文件记录,则是基文件记录的位置减减1n序列号序列号p序列号随每次序列号随每次MFT文件记录的重用而增加,使得文件记录的重用而增加,使得NTFS能够执行内部一致性检查。

能够执行内部一致性检查NTFS在磁盘上的结构-文件引用号-文件引用号 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n文件引用的结构文件引用的结构NTFS在磁盘上的结构-文件引用号-文件引用号 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•文件记录nNTFS以属性以属性/值对集合的方式来存储文件值对集合的方式来存储文件n其中一个属性其中一个属性/值对即是该文件包含的数据(称为未命值对即是该文件包含的数据(称为未命名数据属性)名数据属性)n组成文件的其他属性包括文件名、时间戳信息,以及组成文件的其他属性包括文件名、时间戳信息,以及其他额外的命名数据属性其他额外的命名数据属性n小文件的小文件的MFT记录记录NTFS在磁盘上的结构-文件记录-文件记录文件属性:只读、归档等;文件属性:只读、归档等;时间戳:包含文件创建、最时间戳:包含文件创建、最后修改时间等;后修改时间等;硬链接计数:有多少目录指硬链接计数:有多少目录指向该文件向该文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n每个文件属性作为文件中单独的字节流进行存储每个文件属性作为文件中单独的字节流进行存储。

n严格来说,严格来说,NTFS并不对文件进行读写,它读写属性流并不对文件进行读写,它读写属性流nNTFS提供了对属性的各种操作:创建、删除、读与写提供了对属性的各种操作:创建、删除、读与写n读写操作通常只针对文件的未命名数据属性;读写操作通常只针对文件的未命名数据属性;n可以使用命名的数据流句法来操作命名属性可以使用命名的数据流句法来操作命名属性NTFS在磁盘上的结构-文件记录-文件记录 nNTFS文件的属性包括文件的属性包括n卷信息卷信息$VOLUME_INFORMATION与与$VOLUME_NAME;;n标准信息标准信息$STANDARD_INFORMATION;;n文件名文件名$FILE_NAME;;n安全描述符安全描述符$SECURITY_DESCRIPTOR;;n数据数据$DATA;;n索引根索引根$INDEX_ROOT、索引分配、索引分配$INDEX_ALLOCATION、索引位图、索引位图$BITMAP;;n属性列表属性列表$ATTRIBUTE_LIST;;n对象对象ID $OBJECT_ID;;n重解析信息重解析信息$REPARSE_POINT;;n扩展属性扩展属性$EA与与$EA_INFORMATION;;nEFS信息信息$EFS等。

等 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n文件记录中的每个属性由其属性类型编码来标识,并具有文件记录中的每个属性由其属性类型编码来标识,并具有一个值和一个可选的名称一个值和一个可选的名称n属性值是构成属性的字节流例如,属性值是构成属性的字节流例如,p$FILE_NAME属性的值为文件名;属性的值为文件名;p$DATA属性的值为用户存储在文件中的数据属性的值为用户存储在文件中的数据n在文件记录中,在文件记录中,NTFS使用属性所对应的数值类型代码来对使用属性所对应的数值类型代码来对属性进行排序,属性类型有可能会出现多次属性进行排序,属性类型有可能会出现多次n例如,一个文件可能具有多个数据属性例如,一个文件可能具有多个数据属性NTFS在磁盘上的结构-文件记录-文件记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n大多数属性没有名称,但与索引相关的属性与大多数属性没有名称,但与索引相关的属性与$DATA属性属性通常是有名称的通常是有名称的n名称用于区分一个文件所包含的多个相同类型的属性名称用于区分一个文件所包含的多个相同类型的属性n例如,拥有一个命名数据流的文件包含两个例如,拥有一个命名数据流的文件包含两个$DATA属性:属性:n未命名的未命名的$DATA属性用于存储缺省的未命名数据流;属性用于存储缺省的未命名数据流;n已命名的已命名的$DATA属性具有一个流的名称并存储命名数据属性具有一个流的名称并存储命名数据流。

流NTFS在磁盘上的结构-文件记录-文件记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•文件名nNTFS文件系统允许的文件名最大长度为文件系统允许的文件名最大长度为255字符,文件名字符,文件名可以包含可以包含Unicode字符、空格和多个句点字符、空格和多个句点nWindows文件名字空间文件名字空间n描述了描述了Windows支持的不同文件名字空间支持的不同文件名字空间NTFS在磁盘上的结构-文件名-文件名 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n在在Windows支持的所有应用程序执行环境中,支持的所有应用程序执行环境中,POSIX子系子系统要求最大的名字空间统要求最大的名字空间nPOSIX子系统能够创建对于子系统能够创建对于Windows与与MS-DOS应用程应用程序不可见的文件名,包括句点和空格结尾的文件名序不可见的文件名,包括句点和空格结尾的文件名nWindows子系统在子系统在NTFS卷上创建的文件名对于卷上创建的文件名对于MS-DOS与与16位位Windows应用程序是不可见的应用程序是不可见的n这些文件名包括比这些文件名包括比MS-DOS 8.3格式更长的文件名、内格式更长的文件名、内含含Unicode字符的文件名、包含多个句点或以句点开始字符的文件名、包含多个句点或以句点开始的文件名,以及内嵌空格的文件名。

的文件名,以及内嵌空格的文件名n当当NTFS使用这些文件名来创建文件时,会自动为该文件生使用这些文件名来创建文件时,会自动为该文件生成另外的成另外的MS-DOS风格的文件名风格的文件名n当使用当使用dir /x命令时,命令时,Windows会显示这些短文件名会显示这些短文件名NTFS在磁盘上的结构-文件名-文件名 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nMS-DOS文件名作为对应文件名作为对应NTFS文件的功能性别名,保存文件的功能性别名,保存在与长文件名相同的目录中在与长文件名相同的目录中n一个带有一个带有MS-DOS文件名属性的文件名属性的MFT文件记录文件记录nMS-DOS文件名可用于打开、读写以及拷贝文件文件名可用于打开、读写以及拷贝文件n若用户使用长文件名或短文件名重命名文件,则新的若用户使用长文件名或短文件名重命名文件,则新的文件名将同时替代这两个已有的文件名文件名将同时替代这两个已有的文件名n若新的文件名不是有效的若新的文件名不是有效的MS-DOS文件名,则文件名,则NTFS会会为其生成一个为其生成一个MS-DOS文件名NTFS在磁盘上的结构-文件名-文件名 nNTFS使用以下算法从一个长文件名生成使用以下算法从一个长文件名生成MS-DOS文件名:文件名:n删除长文件名中任何对于删除长文件名中任何对于MS-DOS文件名来说非法的字文件名来说非法的字符,包括空格与符,包括空格与Unicode字符,删除前导和结尾的句点,字符,删除前导和结尾的句点,除最后一个句点外删除所有内嵌的句点;除最后一个句点外删除所有内嵌的句点;n截断句点之前(若存在句点的话)的字符串至截断句点之前(若存在句点的话)的字符串至6个字符,个字符,附加字符串附加字符串“~n”,截断句点之后的字符串至,截断句点之后的字符串至3个字符;个字符;n其中其中n是一个数字,从是一个数字,从1开始,用于区分截断后具有开始,用于区分截断后具有相同名称的不同文件。

相同名称的不同文件n将结果转换成大写字母表示;将结果转换成大写字母表示;nMS-DOS是大小写无关的,因此可以保证是大小写无关的,因此可以保证NTFS不会不会生成一个仅与原有文件名在大小写方面不同的新文生成一个仅与原有文件名在大小写方面不同的新文件名n若生成的文件名与目录中某个已有的文件名重复,则若生成的文件名与目录中某个已有的文件名重复,则n加加1 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nNTFS生成短文件名的例子生成短文件名的例子n若若Windows长文件名为长文件名为LongFileName,则,则NTFS生成的生成的短文件名为短文件名为LONGFI~1;;n若长文件名为若长文件名为File.Name.With.Dots,则生成的短文件名,则生成的短文件名为为FILENA~1.DOTNTFS在磁盘上的结构-文件名-文件名 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•常驻与非常驻属性n常驻属性常驻属性n非常驻属性非常驻属性n属性列表属性属性列表属性NTFS在磁盘上的结构-常驻与非常驻属性-常驻与非常驻属性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•常驻属性(resident attribute)n当一个属性的属性值直接存储在当一个属性的属性值直接存储在MFT中时,该属性称为中时,该属性称为常常驻属性驻属性。

n有些属性总是常驻的,从而有些属性总是常驻的,从而NTFS才可以定位其他非常驻属才可以定位其他非常驻属性n例如,标准信息属性、文件名属性及索引根属性等总是例如,标准信息属性、文件名属性及索引根属性等总是常驻属性常驻属性n每个属性都以一个标准头开始每个属性都以一个标准头开始n标准头包含有关该属性的信息,以及标准头包含有关该属性的信息,以及NTFS用于管理该用于管理该属性的信息属性的信息n标准头总是常驻的,记录了属性值是否常驻标准头总是常驻的,记录了属性值是否常驻n对于常驻属性,标准头还包含了属性值的偏移量与属性对于常驻属性,标准头还包含了属性值的偏移量与属性值的长度值的长度NTFS在磁盘上的结构-常驻与非常驻属性-常驻与非常驻属性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n常驻的属性标准头与属性值常驻的属性标准头与属性值n当属性值直接存储在当属性值直接存储在MFT中时,中时,NTFS访问该值所需的时访问该值所需的时间可以大大缩短间可以大大缩短nNTFS只需访问磁盘一次,即可获得数据只需访问磁盘一次,即可获得数据NTFS在磁盘上的结构-常驻与非常驻属性-常驻与非常驻属性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n小目录的属性小目录的属性n可以常驻在可以常驻在MFT中。

中n小目录的小目录的MFT文件记录文件记录n索引根属性包含了对于该目录中文件和子目录的文件索引根属性包含了对于该目录中文件和子目录的文件引用的索引引用的索引NTFS在磁盘上的结构-常驻与非常驻属性-常驻与非常驻属性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•非常驻属性(nonresident attributes)n若属性太大而不能放入若属性太大而不能放入MFT文件记录中,则文件记录中,则NTFS会在会在MFT之外为该属性分配区域,该区域被称为之外为该属性分配区域,该区域被称为串串((run)或)或范围(范围(extent)n若属性值以后增加,则若属性值以后增加,则NTFS会为追加的数据分配另外会为追加的数据分配另外的串n若属性的值存储在串中而不是在若属性的值存储在串中而不是在MFT中,则该属性称为中,则该属性称为非常驻属性非常驻属性n若属性是非常驻的,则该属性的标准头包含若属性是非常驻的,则该属性的标准头包含NTFS在磁在磁盘上定位属性值所需要的信息盘上定位属性值所需要的信息NTFS在磁盘上的结构-常驻与非常驻属性-常驻与非常驻属性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n带有两个数据串的大文件的带有两个数据串的大文件的MFT文件记录文件记录n在标准属性中,只有可以增长的属性才是非常驻的。

在标准属性中,只有可以增长的属性才是非常驻的n对于文件来说,可以增长的属性包括数据和属性列表对于文件来说,可以增长的属性包括数据和属性列表等n标准信息、文件名与索引根属性总是常驻的标准信息、文件名与索引根属性总是常驻的NTFS在磁盘上的结构-常驻与非常驻属性-常驻与非常驻属性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n大目录也可以包括非常驻属性大目录也可以包括非常驻属性n带有非常驻文件名索引的大目录的带有非常驻文件名索引的大目录的MFT文件记录文件记录n若若MFT文件记录没有足够的空间来存储大目录的文件文件记录没有足够的空间来存储大目录的文件索引索引p则部分索引被存储在索引根属性中;则部分索引被存储在索引根属性中;p而其余的索引被存储在非常驻的索引缓冲区中而其余的索引被存储在非常驻的索引缓冲区中NTFS在磁盘上的结构-常驻与非常驻属性-常驻与非常驻属性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n当文件或目录的属性不能放入当文件或目录的属性不能放入MFT文件记录,而需要独立文件记录,而需要独立的存储空间时,的存储空间时,NTFS通过通过VCN到到LCN的映射对来记录串的映射对来记录串((runs))nLCN用于为整个卷中的簇按顺序从用于为整个卷中的簇按顺序从0到到n编号;编号;nVCN则用于对特定文件所使用的簇按逻辑顺序从则用于对特定文件所使用的簇按逻辑顺序从0到到m编号。

编号n非常驻数据属性的串所使用的非常驻数据属性的串所使用的LCN与与VCN编号编号NTFS在磁盘上的结构-常驻与非常驻属性-常驻与非常驻属性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n非常驻数据属性的非常驻数据属性的VCN-LCN映射关系映射关系NTFS在磁盘上的结构-常驻与非常驻属性-常驻与非常驻属性ü数据属性的属数据属性的属性头包含了两个性头包含了两个串的串的VCN-LCN映射关系,使得映射关系,使得NTFS能够快速能够快速查找磁盘上数据查找磁盘上数据单元的位置单元的位置 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•属性列表(attribute list)属性n若一个文件因为属性太多而不能存放在若一个文件因为属性太多而不能存放在MFT文件记录中,文件记录中,则可以分配其他则可以分配其他MFT记录来存放额外的属性记录来存放额外的属性n在这种情况下,需要加入称为属性列表的属性在这种情况下,需要加入称为属性列表的属性n属性列表属性包含了文件的属性名称和类型代码,以及属性列表属性包含了文件的属性名称和类型代码,以及属性所在的属性所在的MFT记录的文件引用。

记录的文件引用n属性列表属性通常用于太大或碎片太多的文件属性列表属性通常用于太大或碎片太多的文件p在这种文件中单个在这种文件中单个MFT记录无法存放查找所有串所记录无法存放查找所有串所需的需的VCN-LCN映射关系,因而需要多个映射关系,因而需要多个MFT文件文件记录NTFS在磁盘上的结构-常驻与非常驻属性-常驻与非常驻属性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•数据压缩与稀疏文件n压缩稀疏数据压缩稀疏数据n压缩非稀疏数据压缩非稀疏数据n稀疏文件稀疏文件NTFS在磁盘上的结构-数据压缩与稀疏文件-数据压缩与稀疏文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•NTFS支持对单个文件、单个目录或单个卷的压缩n使用使用Windows的的GetVolumeInformation函数查看卷是否被函数查看卷是否被压缩;压缩;n使用使用GetCompressedFileSize函数获得文件被压缩之后的实函数获得文件被压缩之后的实际大小;际大小;n使用使用DeviceIoControl函数查看或改变文件或目录的压缩设函数查看或改变文件或目录的压缩设置。

置•压缩状态n设置一个文件的压缩状态可以立即压缩(或解压)该文件;设置一个文件的压缩状态可以立即压缩(或解压)该文件;n设置目录或卷的压缩状态只是设置了在该目录或卷中创建设置目录或卷的压缩状态只是设置了在该目录或卷中创建新的文件或子目录时缺省的压缩状态新的文件或子目录时缺省的压缩状态NTFS在磁盘上的结构-数据压缩与稀疏文件-数据压缩与稀疏文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•压缩稀疏数据n稀疏数据通常很大,但与其大小相比只包含了很少的非零稀疏数据通常很大,但与其大小相比只包含了很少的非零数据nNTFS使用使用VCN从从0到到m列举文件所包含的簇,每个列举文件所包含的簇,每个VCN与与一个标识簇在磁盘上位置的一个标识簇在磁盘上位置的LCN相对应n一个普通的、非压缩文件的串一个普通的、非压缩文件的串NTFS在磁盘上的结构-数据压缩与稀疏文件-数据压缩与稀疏文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n该非压缩文件的该非压缩文件的MFT记录记录n为了节省空间,为了节省空间,MFT记录中包含记录中包含VCN-LCN映射关系的映射关系的数据属性只记录每个串的一个映射项,而不是为每个簇数据属性只记录每个串的一个映射项,而不是为每个簇都记录映射项。

都记录映射项NTFS在磁盘上的结构-数据压缩与稀疏文件-数据压缩与稀疏文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n当用户选择一个当用户选择一个NTFS卷上的稀疏文件进行压缩时,卷上的稀疏文件进行压缩时,NTFS会删除文件中的零字符串会删除文件中的零字符串n若文件数据是稀疏的,则通常会大大缩短该文件若文件数据是稀疏的,则通常会大大缩短该文件n在随后对该文件进行写操作时,在随后对该文件进行写操作时,NTFS将只为包含非零数将只为包含非零数据的串(据的串(run)分配空间分配空间n包含稀疏数据的压缩文件的串包含稀疏数据的压缩文件的串NTFS在磁盘上的结构-数据压缩与稀疏文件-数据压缩与稀疏文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n包含稀疏数据的压缩文件的包含稀疏数据的压缩文件的MFT记录记录n压缩文件的压缩文件的MFT记录忽略了包含零字符串的记录忽略了包含零字符串的VCN,且,且没有为这些零字符串分配物理存储空间没有为这些零字符串分配物理存储空间NTFS在磁盘上的结构-数据压缩与稀疏文件-数据压缩与稀疏文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n当应用程序从压缩文件读数据时当应用程序从压缩文件读数据时nNTFS检查检查MFT记录以确定是否有记录以确定是否有VCN-LCN映射关系映射关系覆盖了将要读取数据的位置;覆盖了将要读取数据的位置;n若应用程序从若应用程序从MFT记录中记录中未分配洞未分配洞((hole)中读数据,)中读数据,则意味着文件的该部分全部是则意味着文件的该部分全部是0值,从而值,从而NTFS返回返回0值值而无需访问磁盘;而无需访问磁盘;p未分配洞是指未分配洞是指MFT记录中并没有相应的记录中并没有相应的VCN-LCN映射关系。

映射关系n若应用程序需要将非零数据写入洞(若应用程序需要将非零数据写入洞(hole)中,则)中,则NTFS会直接分配磁盘空间,并写入数据会直接分配磁盘空间,并写入数据NTFS在磁盘上的结构-数据压缩与稀疏文件-数据压缩与稀疏文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•压缩非稀疏数据n在在NTFS中,用户可以压缩单个文件,也可以压缩目录中的中,用户可以压缩单个文件,也可以压缩目录中的所有文件所有文件n当压缩一个文件时,当压缩一个文件时,NTFS会将该文件的未处理数据划分为会将该文件的未处理数据划分为16个簇长的压缩单元个簇长的压缩单元n对于文件中的每个压缩单元,对于文件中的每个压缩单元,NTFS确定压缩该单元是否会确定压缩该单元是否会至少节省至少节省1个簇的存储空间个簇的存储空间n若压缩该单元不会节省至少若压缩该单元不会节省至少1个簇的存储空间,则个簇的存储空间,则NTFS不会压缩该单元,而是会分配一个不会压缩该单元,而是会分配一个16簇的串并将该单元簇的串并将该单元的数据写入磁盘;的数据写入磁盘;n若该单元可以被压缩到若该单元可以被压缩到15个簇或更少,则个簇或更少,则NTFS对该单对该单元进行压缩,且只分配所需的簇数并将压缩后的数据写元进行压缩,且只分配所需的簇数并将压缩后的数据写入磁盘。

入磁盘NTFS在磁盘上的结构-数据压缩与稀疏文件-数据压缩与稀疏文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n压缩文件的数据串压缩文件的数据串n文件压缩后节省了文件压缩后节省了26个簇的磁盘空间,或者说节省了个簇的磁盘空间,或者说节省了40%的磁盘空间%的磁盘空间NTFS在磁盘上的结构-数据压缩与稀疏文件-数据压缩与稀疏文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n当向压缩文件中写数据时,当向压缩文件中写数据时,NTFS确保每个串都是从确保每个串都是从16簇簇的边界开始的的边界开始的n每个串每个串((run)的起始)的起始VCN都是都是16的倍数,且串的长度的倍数,且串的长度不会超过不会超过16个簇nNTFS在访问压缩文件时,一次至少读或写一个压缩单元在访问压缩文件时,一次至少读或写一个压缩单元n当当NTFS写压缩数据时,会试图将压缩单元存储在物理上写压缩数据时,会试图将压缩单元存储在物理上连续的位置,从而能够仅用一次连续的位置,从而能够仅用一次I/O操作即可读取该单元操作即可读取该单元NTFS在磁盘上的结构-数据压缩与稀疏文件-数据压缩与稀疏文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n选择选择16个簇大小作为个簇大小作为NTFS压缩单元可以减少内部碎片:压缩单元可以减少内部碎片:n压缩单元越大,存储数据所需的总磁盘空间越小。

压缩单元越大,存储数据所需的总磁盘空间越小n在每次缓存未命中时,必须解压整个压缩单元的数据,在每次缓存未命中时,必须解压整个压缩单元的数据,因而,压缩单元越小,随机访问文件的读操作速度越快因而,压缩单元越小,随机访问文件的读操作速度越快n16簇的压缩单元大小在产生更小的压缩文件与降低随机访簇的压缩单元大小在产生更小的压缩文件与降低随机访问文件的应用程序读操作速度之间取得了平衡问文件的应用程序读操作速度之间取得了平衡NTFS在磁盘上的结构-数据压缩与稀疏文件-数据压缩与稀疏文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n压缩文件的压缩文件的MFT记录记录nNTFS从该文件的从该文件的MFT文件记录中读取这些信息,从而知文件记录中读取这些信息,从而知道该文件中的数据是否经过压缩道该文件中的数据是否经过压缩n任何小于任何小于16簇长度的串均包含压缩数据,簇长度的串均包含压缩数据,NTFS必须在必须在首次将这些数据读入缓存时进行解压;首次将这些数据读入缓存时进行解压;n而长度为而长度为16簇的串不包含压缩数据,因而无需解压簇的串不包含压缩数据,因而无需解压NTFS在磁盘上的结构-数据压缩与稀疏文件-数据压缩与稀疏文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n若串中的数据被压缩了若串中的数据被压缩了n则则NTFS将该数据解压到一个临时的缓冲区中,然后将将该数据解压到一个临时的缓冲区中,然后将其拷贝到调用者的缓冲区。

其拷贝到调用者的缓冲区nNTFS也会将解压后的数据加载到缓存中,以便能够在也会将解压后的数据加载到缓存中,以便能够在随后的读操作中尽可能快地读取该数据随后的读操作中尽可能快地读取该数据nNTFS将对文件的所有更新写入缓存中,以便延迟写入器将对文件的所有更新写入缓存中,以便延迟写入器((lazy writer)能够对修改过的数据进行压缩,并异步写入)能够对修改过的数据进行压缩,并异步写入磁盘n这种策略确保对压缩文件执行写操作,相对于非压缩文件这种策略确保对压缩文件执行写操作,相对于非压缩文件来说,不会产生显著的延迟来说,不会产生显著的延迟NTFS在磁盘上的结构-数据压缩与稀疏文件-数据压缩与稀疏文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nNTFS尽可能地保持一个压缩文件的磁盘分配区域是连续的尽可能地保持一个压缩文件的磁盘分配区域是连续的n若两个或更多的串是连续的,则若两个或更多的串是连续的,则NTFS会像对其他文件会像对其他文件数据一样执行磁盘预读数据一样执行磁盘预读n由于读取和解压连续的文件数据是在应用程序请求数据由于读取和解压连续的文件数据是在应用程序请求数据之前异步执行的,因此随后的读操作可以直接从缓存中之前异步执行的,因此随后的读操作可以直接从缓存中读取数据,从而极大提高读操作的性能。

读取数据,从而极大提高读操作的性能NTFS在磁盘上的结构-数据压缩与稀疏文件-数据压缩与稀疏文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•稀疏文件n稀疏文件是一种稀疏文件是一种NTFS文件类型,本质上是压缩文件文件类型,本质上是压缩文件nNTFS不对稀疏文件的非稀疏数据执行压缩操作不对稀疏文件的非稀疏数据执行压缩操作nNTFS管理稀疏文件的管理稀疏文件的MFT记录的串数据的方法,与管理记录的串数据的方法,与管理包含稀疏与非稀疏数据的压缩文件的方法是相同的包含稀疏与非稀疏数据的压缩文件的方法是相同的NTFS在磁盘上的结构-数据压缩与稀疏文件-数据压缩与稀疏文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•更改日志文件n更改日志文件更改日志文件\$Extend\$UsnJrnl是一个稀疏文件,将更改是一个稀疏文件,将更改项存储在项存储在$J数据流中数据流中n更改项包括以下与文件或目录更改的有关信息:更改项包括以下与文件或目录更改的有关信息:n更改的时间;更改的时间;n更改的类型(删除、重命名、大小扩展等);更改的类型(删除、重命名、大小扩展等);n文件或目录属性;文件或目录属性;n文件或目录名;文件或目录名;n文件或目录的文件引用号;文件或目录的文件引用号;n文件父目录的文件引用号。

文件父目录的文件引用号NTFS在磁盘上的结构-更改日志文件-更改日志文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n更改日志是稀疏的,因而永远不会溢出更改日志是稀疏的,因而永远不会溢出n当该日志的磁盘大小超过为该文件定义的最大值时,当该日志的磁盘大小超过为该文件定义的最大值时,NTFS只是简单地将只是简单地将变更信息窗口变更信息窗口之前的文件数据清零,之前的文件数据清零,而变更信息窗口的大小等于最大日志大小而变更信息窗口的大小等于最大日志大小n更改日志(更改日志($UsnJrnl)的空间分配)的空间分配NTFS在磁盘上的结构-更改日志文件-更改日志文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n为了防止在应用程序不断地导致超越该日志的大小时,而为了防止在应用程序不断地导致超越该日志的大小时,而使日志文件频繁地改变大小,使日志文件频繁地改变大小,NTFS只有当日志的大小是最只有当日志的大小是最大配置值加上两倍的应用程序定义值时,才会缩减该日志大配置值加上两倍的应用程序定义值时,才会缩减该日志NTFS在磁盘上的结构-更改日志文件-更改日志文件 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•索引n在在NTFS中,文件目录只是一组文件名的索引,即一组文中,文件目录只是一组文件名的索引,即一组文件名及其文件引用以特殊的方式组织起来以便快速访问。

件名及其文件引用以特殊的方式组织起来以便快速访问nNTFS对目录中文件的文件名属性进行索引以创建目录对目录中文件的文件名属性进行索引以创建目录n卷的根目录的卷的根目录的MFT文件记录文件记录NTFS在磁盘上的结构-索引-索引 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n索引根属性索引根属性n从概念上讲,目录的从概念上讲,目录的MFT项在其索引根项中包含该目录项在其索引根项中包含该目录中文件的有序列表中文件的有序列表n对于大目录,对于大目录,p文件名实际上存储在文件名实际上存储在4KB固定大小的索引缓冲区中,固定大小的索引缓冲区中,索引缓冲区实现了一个索引缓冲区实现了一个B+树结构p索引根属性包含了索引根属性包含了B+树(即根子目录)的第一级,树(即根子目录)的第一级,并指向包含下一级的索引缓冲区并指向包含下一级的索引缓冲区NTFS在磁盘上的结构-索引-索引 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n除文件名外,索引中的每一项还包含该文件在除文件名外,索引中的每一项还包含该文件在MFT中所中所对应的文件引用,以及该文件的时间戳和文件大小信息对应的文件引用,以及该文件的时间戳和文件大小信息。

pNTFS从该文件的从该文件的MFT记录中复制时间戳与文件大记录中复制时间戳与文件大小信息,将更新信息写入该位置小信息,将更新信息写入该位置p该技术能够显著优化浏览目录的速度,使得文件系该技术能够显著优化浏览目录的速度,使得文件系统能够显示目录中每个文件的时间戳与文件大小,统能够显示目录中每个文件的时间戳与文件大小,而无需打开文件而无需打开文件NTFS在磁盘上的结构-索引-索引 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n索引分配属性索引分配属性n将索引缓冲区中串的将索引缓冲区中串的VCN映射到用于指明索引缓冲区在映射到用于指明索引缓冲区在磁盘上位置的磁盘上位置的LCNn位图属性位图属性n记录索引缓冲区中哪些记录索引缓冲区中哪些VCN已经被使用,而哪些已经被使用,而哪些VCN还是空闲的还是空闲的NTFS在磁盘上的结构-索引-索引 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•对象IDnNTFS将分配给文件或目录的对象将分配给文件或目录的对象ID存储在该文件或目录存储在该文件或目录的的MFT记录的记录的$OBJECT_ID属性中nNTFS还在还在\$Extend\$ObjId元数据文件的元数据文件的$O索引中维护了索引中维护了对象对象ID与其文件引用号之间的对应关系。

与其文件引用号之间的对应关系n该索引根据对象该索引根据对象ID排序其中的各项,排序其中的各项,p从而使得从而使得NTFS能够容易地根据文件的对象能够容易地根据文件的对象ID来找来找到文件p应用程序可以利用文件或目录的对象应用程序可以利用文件或目录的对象ID来打开文件来打开文件或目录NTFS在磁盘上的结构-对象-对象IDID 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n$ObjId元数据文件与元数据文件与MFT记录中记录中$OBJECT_ID之间的对之间的对应关系应关系NTFS在磁盘上的结构-对象-对象IDID 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•配额跟踪nNTFS在元数据文件在元数据文件\$Extend\$Quota中存储配额信息,该中存储配额信息,该文件中包含了索引文件中包含了索引$O与与$Qn在在$O索引中,索引中,NTFS创建一个索引项用于将创建一个索引项用于将SID映射到映射到用户用户ID,并根据用户,并根据用户ID对索引进行排序对索引进行排序p当管理员定义一个用户的配额信息时,当管理员定义一个用户的配额信息时,NTFS为用户为用户分配一个与用户内部安全标识符分配一个与用户内部安全标识符SID相对应的惟一的相对应的惟一的用户用户ID。

n在在$Q索引中,索引中,NTFS创建一个配额控制项,该项包含了创建一个配额控制项,该项包含了该用户的配额限制值,以及该用户在卷上已经使用的磁该用户的配额限制值,以及该用户在卷上已经使用的磁盘空间数量盘空间数量NTFS在磁盘上的结构-配额跟踪-配额跟踪 n当应用程序创建一个文件或目录时,当应用程序创建一个文件或目录时,NTFS获取调用该应用获取调用该应用程序的用户程序的用户SID,并在,并在$O索引中搜索与该索引中搜索与该SID相关联的用户相关联的用户IDnNTFS在新创建文件或目录在新创建文件或目录$STANDARD_INFORMATION属性中记录用户属性中记录用户ID,从而将分配给该文件或目录的磁盘空,从而将分配给该文件或目录的磁盘空间计入该用户的磁盘配额中间计入该用户的磁盘配额中nNTFS在在$Q索引中查找配额项,并确定新分配的磁盘空间索引中查找配额项,并确定新分配的磁盘空间是否会导致该用户超过其配额告警或限制阈值是否会导致该用户超过其配额告警或限制阈值n若超出其阈值,则若超出其阈值,则NTFS会采取适当的步骤,如向系统会采取适当的步骤,如向系统事件日志中记录该事件或禁止用户创建该文件或目录等。

事件日志中记录该事件或禁止用户创建该文件或目录等n当文件或目录的大小改变时,当文件或目录的大小改变时,NTFS会更新与会更新与$STANDARD_INFORMATION属性中用户属性中用户ID相关的配额相关的配额控制项 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n$Quota索引的组织结构索引的组织结构NTFS在磁盘上的结构-配额跟踪-配额跟踪 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•一致的安全性nNTFS支持安全性,使得管理员能够指定哪些用户可以访问支持安全性,使得管理员能够指定哪些用户可以访问特定的文件或目录特定的文件或目录n在大多数情况下,管理员会对整个目录树使用相同的安全在大多数情况下,管理员会对整个目录树使用相同的安全设置n因此,因此,NTFS使用集中的元数据文件使用集中的元数据文件$Secure,为卷上的,为卷上的每个安全描述符只存储一个实例,来优化磁盘利用率每个安全描述符只存储一个实例,来优化磁盘利用率NTFS在磁盘上的结构-一致的安全性-一致的安全性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n$Secure文件包含文件包含$SDH与与$SII两个索引属性,以及一个称两个索引属性,以及一个称为为$SDS的数据流属性。

的数据流属性nNTFS为卷上每个惟一的安全描述符分配一个内部的为卷上每个惟一的安全描述符分配一个内部的NTFS安全安全ID,并使用一个简单的散列算法计算该,并使用一个简单的散列算法计算该安全安全描述符的散列值描述符的散列值n$SDH索引中的索引项将安全描述符散列值映射到该安索引中的索引项将安全描述符散列值映射到该安全描述符在全描述符在$SDS数据属性中的存储位置数据属性中的存储位置n$SII索引项则将索引项则将NTFS安全安全ID映射到该安全描述符在映射到该安全描述符在$SDS数据属性中的存储位置数据属性中的存储位置NTFS在磁盘上的结构-一致的安全性-一致的安全性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n当用户将安全描述符应用于文件或目录时,当用户将安全描述符应用于文件或目录时,NTFS计算该计算该描述符的散列值并在描述符的散列值并在$SDH索引中进行查找索引中进行查找nNTFS根据安全描述符的散列值对根据安全描述符的散列值对$SDH索引中的索引索引中的索引项进行排序,并将这些索引项存储在项进行排序,并将这些索引项存储在B+树中n若若NTFS在在$SDH索引中找到了该安全描述符的匹配项,索引中找到了该安全描述符的匹配项,则根据该项的则根据该项的$SDS偏移量从偏移量从$SDS属性中读取安全描述属性中读取安全描述符。

符p若散列值匹配,但安全描述符不匹配,则若散列值匹配,但安全描述符不匹配,则NTFS会会在在$SDH中继续查找匹配项中继续查找匹配项p当当NTFS找到一个精确的匹配项时,应用安全描述找到一个精确的匹配项时,应用安全描述符的文件或目录可以引用符的文件或目录可以引用$SDS属性中现有的安全描属性中现有的安全描述符NTFS在磁盘上的结构-一致的安全性-一致的安全性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院pNTFS从从$SII索引中读取该安全描述符的索引中读取该安全描述符的NTFS安全安全ID,并将其存储在文件或目录的,并将其存储在文件或目录的$STANDARD_INFORMATION属性中,从而可以属性中,从而可以引用该安全描述符引用该安全描述符n若若NTFS在在$SDH索引中没有发现匹配的安全描述符,索引中没有发现匹配的安全描述符,p则该安全描述符对于卷来说是惟一的,则该安全描述符对于卷来说是惟一的,NTFS会为该会为该安全描述符分配一个新的内部安全安全描述符分配一个新的内部安全IDpNTFS会将该安全描述符加入到会将该安全描述符加入到$SDS属性中,并在属性中,并在$SDH与与$SII索引中加入相应的项,以引用该描述符索引中加入相应的项,以引用该描述符在在$SDS数据属性中的偏移量。

数据属性中的偏移量NTFS在磁盘上的结构-一致的安全性-一致的安全性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n当应用程序试图打开文件或目录时,当应用程序试图打开文件或目录时,NTFS使用使用$SII索引查索引查找该文件或目录的安全描述符找该文件或目录的安全描述符nNTFS从从MFT中该文件所对应的中该文件所对应的MFT记录的记录的$STANDARD_INFORMATION属性中读取该文件或目属性中读取该文件或目录的内部安全录的内部安全IDn使用使用$Secure元文件的元文件的$SII索引在索引在$SDS属性中定位该内属性中定位该内部安全部安全ID所对应的安全描述符所对应的安全描述符nNTFS读取该安全描述符,并完成安全检查读取该安全描述符,并完成安全检查NTFS在磁盘上的结构-一致的安全性-一致的安全性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n$Secure索引的组织结构索引的组织结构NTFS在磁盘上的结构-一致的安全性-一致的安全性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nNTFS会将最近访问的会将最近访问的32个安全描述符及其对应的个安全描述符及其对应的$SII索引索引项保存在缓存中,因而,只有当一个项保存在缓存中,因而,只有当一个$SII索引项未被缓存索引项未被缓存时,时,NTFS才需要访问才需要访问$Secure元文件。

元文件nNTFS不会删除不会删除$Secure文件中的任何项,甚至在卷上已经文件中的任何项,甚至在卷上已经不会再有文件或目录引用该项时不会再有文件或目录引用该项时nNTFS使用通用索引技术,使得拥有相同安全设置的文件或使用通用索引技术,使得拥有相同安全设置的文件或目录可以共享安全描述符目录可以共享安全描述符n$SII索引使得索引使得NTFS在执行安全检查时可以在在执行安全检查时可以在$Secure文文件中快速查找安全描述符;件中快速查找安全描述符;n$SDH索引使得索引使得NTFS可以快速确定一个将被用于文件或可以快速确定一个将被用于文件或目录的安全描述符是否已经存储在目录的安全描述符是否已经存储在$Secure文件中并可文件中并可以被共享以被共享NTFS在磁盘上的结构-一致的安全性-一致的安全性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•重解析点n重解析点是一个文件或目录,包含重解析点是一个文件或目录,包含n重解析数据(重解析数据(reparse data))p重解析数据是最大可达重解析数据是最大可达16KB的、由用户定义的与文的、由用户定义的与文件或目录相关的数据块,如其状态或位置等。

件或目录相关的数据块,如其状态或位置等n重解析标记(重解析标记(reparse tag))p每一种重解析点类型都有惟一的、每一种重解析点类型都有惟一的、32位的重解析标位的重解析标记n重解析点存储在文件或目录的重解析点存储在文件或目录的$REPARSE_POINT属性中NTFS在磁盘上的结构-重解析点-重解析点 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n重解析数据重解析数据n创建重解析数据的应用程序、文件系统过滤型驱动程序创建重解析数据的应用程序、文件系统过滤型驱动程序或或I/O管理器可以从重解析点读取重解析数据管理器可以从重解析点读取重解析数据n当当NTFS在文件或目录查找过程中遇到重解析点时,在文件或目录查找过程中遇到重解析点时,NTFS返回重解析状态代码,通知挂载在卷上的文件系返回重解析状态代码,通知挂载在卷上的文件系统过滤型驱动程序与统过滤型驱动程序与I/O管理器检查重解析数据管理器检查重解析数据NTFS在磁盘上的结构-重解析点-重解析点 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n重解析标记重解析标记n重解析标记允许负责解释重解析数据的组件,可以在不重解析标记允许负责解释重解析数据的组件,可以在不检查重解析数据的情况下识别出重解析点。

检查重解析数据的情况下识别出重解析点n重解析标记的所有者,或者是文件系统过滤型驱动程序,重解析标记的所有者,或者是文件系统过滤型驱动程序,或者是或者是I/O管理器,在识别重解析数据时,可以选择以管理器,在识别重解析数据时,可以选择以下选项之一:下选项之一:p可以处理在文件可以处理在文件I/O操作中指定的跨越重解析点的路操作中指定的跨越重解析点的路径名,并使径名,并使I/O操作指定新的路径名操作指定新的路径名p可以从文件中删除重解析点,以某种方式修改文件,可以从文件中删除重解析点,以某种方式修改文件,然后重新发布文件然后重新发布文件I/O操作NTFS在磁盘上的结构-重解析点-重解析点 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n当应用程序创建或删除重解析点时,当应用程序创建或删除重解析点时,NTFS会更新元数据文会更新元数据文件件\$Extend\$Reparse,,n其中存储了用于标识内含重解析点的文件或目录的文件其中存储了用于标识内含重解析点的文件或目录的文件记录号n集中存储这些记录使得集中存储这些记录使得NTFS能够为应用程序提供接口,以能够为应用程序提供接口,以列举卷上所有的重解析点或指定类型的重解析点。

列举卷上所有的重解析点或指定类型的重解析点NTFS在磁盘上的结构-重解析点-重解析点 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n应用程序使用应用程序使用DeviceIoControl函数操纵重解析点:函数操纵重解析点:n使用使用FSCTL_SET_REPARSE_POINT文件系统控制代文件系统控制代码来创建重解析点;码来创建重解析点;n使用使用FSCTL_GET_REPARSE_POINT代码查看重解析代码查看重解析点的内容点的内容n应用程序可以使用应用程序可以使用GetFileAttributes函数来查看重解析点函数来查看重解析点n重解析点的文件属性中,重解析点的文件属性中,FILE_ATTRIBUTE_REPARSE_POINT标志被置位标志被置位NTFS在磁盘上的结构-重解析点-重解析点 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•NTFS可恢复性确保n在掉电或系统失败时,文件系统操作(即事务)不会处于在掉电或系统失败时,文件系统操作(即事务)不会处于未完成状态,且磁盘卷的结构会完好无损,从而不需要磁未完成状态,且磁盘卷的结构会完好无损,从而不需要磁盘修复工具进行修复。

盘修复工具进行修复 •NTFS使用事务处理机制来实现可恢复性nNTFS只对文件系统数据进行恢复以保证用户不会因为文件只对文件系统数据进行恢复以保证用户不会因为文件系统的损坏而丢失整个卷系统的损坏而丢失整个卷nNTFS不支持在文件系统级别上对用户数据进行恢复不支持在文件系统级别上对用户数据进行恢复n应用程序通常会根据自己所存储的数据类型选择数据恢应用程序通常会根据自己所存储的数据类型选择数据恢复机制NTFS可恢复性支持 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院NTFS可恢复性支持•NTFS可恢复性支持n文件系统设计的演变文件系统设计的演变n日志记录日志记录n恢复恢复nNTFS的坏簇恢复的坏簇恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•文件系统的发展经历了n谨慎写(谨慎写(careful write)文件系统)文件系统n例如例如DEC的的VAX/VMS文件系统等专用操作系统的文件文件系统等专用操作系统的文件系统n延迟写(延迟写(lazy write)文件系统)文件系统n例如例如OS/2 HPFS与大多数传统的与大多数传统的UNIX文件系统。

文件系统n可恢复(可恢复(recoverable)文件系统)文件系统n例如例如NTFS等NTFS可恢复性支持-文件系统设计的演变-文件系统设计的演变 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•谨慎写文件系统n当操作系统崩溃或掉电时,正在进行的当操作系统崩溃或掉电时,正在进行的I/O操作会立即中断操作会立即中断n取决于正在进行操作的类型与进展程度,这种突然中断会取决于正在进行操作的类型与进展程度,这种突然中断会造成文件系统的不一致,即文件系统的损坏造成文件系统的不一致,即文件系统的损坏n最严重的文件系统损坏会使整个卷不可访问最严重的文件系统损坏会使整个卷不可访问n谨慎写文件系统谨慎写文件系统对写操作进行排序对写操作进行排序n从而,即使在最坏的情况下,系统崩溃也只会产生可预从而,即使在最坏的情况下,系统崩溃也只会产生可预测的、非关键性的不一致,文件系统可以在空闲时进行测的、非关键性的不一致,文件系统可以在空闲时进行修复NTFS可恢复性支持-文件系统设计的演变-文件系统设计的演变 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n当文件系统接收到更新磁盘的请求时,必须在更新完成之当文件系统接收到更新磁盘的请求时,必须在更新完成之前执行若干子操作。

前执行若干子操作n在谨慎写文件系统中,子操作通常顺序执行在谨慎写文件系统中,子操作通常顺序执行n例如,当为文件分配磁盘空间时例如,当为文件分配磁盘空间时p文件系统首先在其位图中设置特定位,然后才会为文件系统首先在其位图中设置特定位,然后才会为文件分配磁盘空间文件分配磁盘空间p若在位设置后立即发生掉电,谨慎写文件系统将不若在位设置后立即发生掉电,谨慎写文件系统将不能访问磁盘中能访问磁盘中由刚刚设置的若干位表示的空间,但由刚刚设置的若干位表示的空间,但现有的数据不会损坏现有的数据不会损坏NTFS可恢复性支持-文件系统设计的演变-文件系统设计的演变 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n序列化写操作意味着序列化写操作意味着I/O请求是按其被接收的顺序处理的请求是按其被接收的顺序处理的n若一个进程首先分配磁盘空间,稍后不久另一个进程创若一个进程首先分配磁盘空间,稍后不久另一个进程创建文件,则谨慎写文件系统会在其创建文件之前,完成建文件,则谨慎写文件系统会在其创建文件之前,完成磁盘分配工作;磁盘分配工作;n这是因为两个这是因为两个I/O请求的子操作若交叉进行,则可能会请求的子操作若交叉进行,则可能会导致不一致的状态。

导致不一致的状态NTFS可恢复性支持-文件系统设计的演变-文件系统设计的演变 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n谨慎写文件系统的主要优点谨慎写文件系统的主要优点n在系统失败的情况下,卷仍然是一致与可用的,而无需在系统失败的情况下,卷仍然是一致与可用的,而无需立即运行卷修复程序立即运行卷修复程序n为了纠正在系统失败时产生的可预测的、非毁灭性的磁为了纠正在系统失败时产生的可预测的、非毁灭性的磁盘不一致,需要运行卷修复程序盘不一致,需要运行卷修复程序p卷修复程序可以在方便时运行,通常是在系统重启卷修复程序可以在方便时运行,通常是在系统重启时运行n谨慎写文件系统以牺牲速度来换取其所提供的安全性谨慎写文件系统以牺牲速度来换取其所提供的安全性((safety)NTFS可恢复性支持-文件系统设计的演变-文件系统设计的演变 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•延迟写文件系统n延迟写文件系统使用延迟写文件系统使用回写回写((write back)缓存策略来改善系)缓存策略来改善系统的性能统的性能n将对文件的修改写入缓存,并以一种优化的方式将缓存将对文件的修改写入缓存,并以一种优化的方式将缓存的内容刷新到磁盘,通常是在后台进行。

的内容刷新到磁盘,通常是在后台进行NTFS可恢复性支持-文件系统设计的演变-文件系统设计的演变 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n延迟写缓存技术对性能的改善有几种方式:延迟写缓存技术对性能的改善有几种方式:n磁盘写的次数减少了磁盘写的次数减少了p由于不需要由于不需要序列化的、直接的磁盘写操作,缓冲区序列化的、直接的磁盘写操作,缓冲区的内容可以在写回磁盘之前多次修改;的内容可以在写回磁盘之前多次修改;n由于文件系统将控制返回给调用者而无需等待磁盘写操由于文件系统将控制返回给调用者而无需等待磁盘写操作结束,因此应用程序请求的速度显著提高;作结束,因此应用程序请求的速度显著提高;n延迟写策略忽略文件卷中中间状态的不一致延迟写策略忽略文件卷中中间状态的不一致p两个或多个两个或多个I/O请求的子操作交叉进行时可能会产生请求的子操作交叉进行时可能会产生这种不一致;这种不一致;p可以容易地实现多线程模型,以允许多个可以容易地实现多线程模型,以允许多个I/O操作并操作并发执行NTFS可恢复性支持-文件系统设计的演变-文件系统设计的演变 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n延迟写技术的缺点延迟写技术的缺点n使得卷在一段时间内是不一致的,而文件系统有可能无使得卷在一段时间内是不一致的,而文件系统有可能无法纠正这种不一致。

法纠正这种不一致n因此,延迟写文件系统必须始终跟踪卷的状态因此,延迟写文件系统必须始终跟踪卷的状态NTFS可恢复性支持-文件系统设计的演变-文件系统设计的演变 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•可恢复文件系统n可恢复文件系统试图同时具有谨慎写文件系统的安全性可恢复文件系统试图同时具有谨慎写文件系统的安全性((safety)和延迟写文件系统的性能和延迟写文件系统的性能n可恢复文件系统使用可恢复文件系统使用日志记录(日志记录(logging)技术)技术来确保卷的来确保卷的一致性一致性n日志记录技术最早是为事务处理开发的日志记录技术最早是为事务处理开发的n若操作系统崩溃,可恢复文件系统会执行一个恢复过程若操作系统崩溃,可恢复文件系统会执行一个恢复过程来恢复卷的一致性;来恢复卷的一致性;n在恢复过程中,文件系统会访问存储在日志文件中的信在恢复过程中,文件系统会访问存储在日志文件中的信息n在可恢复文件系统中,对于改变卷结构的每个事务,都需在可恢复文件系统中,对于改变卷结构的每个事务,都需要在日志文件中记录该事务的每个子操作要在日志文件中记录该事务的每个子操作NTFS可恢复性支持-文件系统设计的演变-文件系统设计的演变 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nNTFS可恢复文件系统为提高其可靠性,实现了以下策略:可恢复文件系统为提高其可靠性,实现了以下策略:nNTFS可恢复性保证卷结构不会损坏,因此在系统失败可恢复性保证卷结构不会损坏,因此在系统失败后所有文件均可访问。

后所有文件均可访问n尽管尽管NTFS不能保证在系统崩溃时保护用户数据(缓存不能保证在系统崩溃时保护用户数据(缓存更改会丢失),但应用程序可以使用更改会丢失),但应用程序可以使用NTFS的的通写通写与与缓缓存刷新存刷新能力,来确保以适当的时间间隔将文件的修改记能力,来确保以适当的时间间隔将文件的修改记录到磁盘上录到磁盘上p缓存通写缓存通写Ø强制写操作被立即记录到磁盘上;强制写操作被立即记录到磁盘上;p缓存刷新缓存刷新Ø强制将缓存的内容写到磁盘上强制将缓存的内容写到磁盘上NTFS可恢复性支持-文件系统设计的演变-文件系统设计的演变 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nNTFS不必执行额外的磁盘不必执行额外的磁盘I/O操作来刷新对文件系统数操作来刷新对文件系统数据结构的修改据结构的修改p文件系统数据结构的更改在单个写操作中被记录在文件系统数据结构的更改在单个写操作中被记录在日志文件中;日志文件中;p若系统失败且缓存内容丢失,则可以通过日志文件若系统失败且缓存内容丢失,则可以通过日志文件来恢复对文件系统的更改来恢复对文件系统的更改pNTFS保证用户数据在通写操作或缓存刷新之后是一致保证用户数据在通写操作或缓存刷新之后是一致且立即可用的,即使后来系统失败也是如此。

且立即可用的,即使后来系统失败也是如此NTFS可恢复性支持-文件系统设计的演变-文件系统设计的演变 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•NTFS通过日志记录(logging)实现文件系统可恢复性n在在NTFS日志记录中,任何对重要的文件系统数据结构进行日志记录中,任何对重要的文件系统数据结构进行修改的事务,其子操作均在被作用于磁盘前写入日志文件修改的事务,其子操作均在被作用于磁盘前写入日志文件n当系统崩溃后恢复时,未完成的事务将被当系统崩溃后恢复时,未完成的事务将被重做重做((redo)或)或撤销撤销((undo)•在NTFS中,事务包括写磁盘和删除文件,并由若干子操作组成NTFS可恢复性支持-日志记录-日志记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•日志文件服务(LFS)n日志文件服务是一组驻留在日志文件服务是一组驻留在NTFS驱动程序中的内核模式驱动程序中的内核模式例程,例程,NTFS使用使用LFS来访问日志文件来访问日志文件nNTFS作为调用者向作为调用者向LFS传递一个指向已打开文件对象的指传递一个指向已打开文件对象的指针,以指定将要访问的日志文件。

针,以指定将要访问的日志文件LFSn或者初始化一个新的日志文件;或者初始化一个新的日志文件;n或者调用或者调用Windows缓存管理器通过缓存访问现有的日志缓存管理器通过缓存访问现有的日志文件NTFS可恢复性支持-日志记录-日志记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n日志文件服务的示意图日志文件服务的示意图NTFS可恢复性支持-日志记录-日志记录üNTFS驱动程序调驱动程序调用用LFS,用来在日志,用来在日志文件中记录对于卷文件中记录对于卷结构的修改结构的修改üNTFS驱动程驱动程序修改系统缓存序修改系统缓存中的卷结构中的卷结构ü缓存管理器缓存管理器提示提示LFS将日将日志文件刷新志文件刷新到磁盘到磁盘üLFS回调缓存回调缓存管理器,由缓存管理器,由缓存管理器将日志文管理器将日志文件刷新到磁盘件刷新到磁盘 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nLFS将日志文件分成两个区域:将日志文件分成两个区域:n重启动区域重启动区域((restart area))pNTFS调用调用LFS来读写重启动区域来读写重启动区域pNTFS使用重启动区域存储上下文信息。

使用重启动区域存储上下文信息Ø例如,例如,NTFS在系统失败后恢复过程中在日志文在系统失败后恢复过程中在日志文件中开始读数据的位置件中开始读数据的位置pLFS维护重启动区域的副本,以防该区域被损坏或维护重启动区域的副本,以防该区域被损坏或无法访问无法访问NTFS可恢复性支持-日志记录-日志记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n无限的日志记录区域(无限的日志记录区域(infinite logging area))p包含了包含了NTFS在系统失败时写入的用于恢复卷的事务在系统失败时写入的用于恢复卷的事务记录pLFS通过循环重用日志文件,使之看起来像是无限通过循环重用日志文件,使之看起来像是无限可增长的可增长的pLFS使用逻辑序列号使用逻辑序列号LSN来标识写入日志文件的记来标识写入日志文件的记录ØNTFS使用使用64位的位的LSN,从而,从而LSN可以被认为是可以被认为是无限的NTFS可恢复性支持-日志记录-日志记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n日志文件区域的示意图日志文件区域的示意图NTFS可恢复性支持-日志记录-日志记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nNTFS并不直接从日志文件读写事务,而是调用并不直接从日志文件读写事务,而是调用LFS提供的提供的服务,包括服务,包括n打开日志文件;打开日志文件;n写日志记录;写日志记录;n向前或向前或向后顺序读日志记录;向后顺序读日志记录;n刷新至指定刷新至指定LSN的日志记录;的日志记录;n将日志文件的起始将日志文件的起始LSN设置为更高的值。

设置为更高的值NTFS可恢复性支持-日志记录-日志记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n在系统恢复期间,在系统恢复期间,NTFS调用调用LFS执行以下操作:执行以下操作:n向前读所有日志记录,以向前读所有日志记录,以重做重做记录在日志文件中、但在记录在日志文件中、但在系统失败时没有被刷新到磁盘的所有事务;系统失败时没有被刷新到磁盘的所有事务;n回滚回滚任何在系统崩溃时没有被完整记录下来的事务;任何在系统崩溃时没有被完整记录下来的事务;n在在NTFS不再需要旧的事务记录时,将日志文件的起始不再需要旧的事务记录时,将日志文件的起始记录设置为具有更高记录设置为具有更高LSN的日志记录的日志记录NTFS可恢复性支持-日志记录-日志记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n若采用以下步骤,则系统保证卷可以被恢复:若采用以下步骤,则系统保证卷可以被恢复:nNTFS首先调用首先调用LFS在(缓存的)日志文件中记录将要在(缓存的)日志文件中记录将要修改卷结构的任何事务;修改卷结构的任何事务;nNTFS修改缓存中的卷信息;修改缓存中的卷信息;n缓存管理器提示缓存管理器提示LFS将日志文件刷新到磁盘上;将日志文件刷新到磁盘上;pLFS通过回调缓存管理器来实现刷新,并通知缓存通过回调缓存管理器来实现刷新,并通知缓存管理器刷新内存中的哪些页面。

管理器刷新内存中的哪些页面n缓存管理器将日志文件刷新到磁盘后,将对卷的更改刷缓存管理器将日志文件刷新到磁盘后,将对卷的更改刷新到磁盘新到磁盘n这些步骤确保这些步骤确保n若文件系统修改最终没有成功,则相应的事务可以从日若文件系统修改最终没有成功,则相应的事务可以从日志文件中获得,或者被重做,或者被取消志文件中获得,或者被重做,或者被取消NTFS可恢复性支持-日志记录-日志记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n系统崩溃后重启时,文件系统恢复在卷首次被访问时自动系统崩溃后重启时,文件系统恢复在卷首次被访问时自动开始开始nNTFS检查在系统崩溃前记录在日志文件中的事务是否检查在系统崩溃前记录在日志文件中的事务是否已经被应用于卷,若没有则重做这些事务已经被应用于卷,若没有则重做这些事务nNTFS还保证在系统崩溃前没有被完整记录下来的事务还保证在系统崩溃前没有被完整记录下来的事务将被撤销将被撤销NTFS可恢复性支持-日志记录-日志记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•日志记录类型nLFS可以将各种类型的记录写入其日志文件可以将各种类型的记录写入其日志文件。

n主要有两种类型的记录:主要有两种类型的记录:n更新记录更新记录((update record))n检查点记录(检查点记录(checkpoint record))NTFS可恢复性支持-日志记录-日志记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n更新记录更新记录n更新记录是最常用的更新记录是最常用的NTFS记录类型记录类型n每个更新记录包括两种信息:每个更新记录包括两种信息:p重做信息(重做信息(redo information))Ø若一个事务已被完整记录下来(已提交),但在若一个事务已被完整记录下来(已提交),但在被从缓存刷新到磁盘之前发生系统失败,该信息被从缓存刷新到磁盘之前发生系统失败,该信息描述如何重新执行该事务的一个子操作;描述如何重新执行该事务的一个子操作;p撤销信息(撤销信息(undo information))Ø若在系统失败时,一个事务只被部分记录下来若在系统失败时,一个事务只被部分记录下来(未提交),该信息描述如何回滚该事务的一个(未提交),该信息描述如何回滚该事务的一个子操作NTFS可恢复性支持-日志记录-日志记录 n日志文件中的更新记录日志文件中的更新记录p每个记录代表了事务的一个子操作,该事务创建了每个记录代表了事务的一个子操作,该事务创建了一个新文件。

一个新文件p每个更新记录中的每个更新记录中的Redo信息通知信息通知NTFS如何将子操如何将子操作应用于卷作应用于卷p而而Undo信息则通知信息则通知NTFS如何回滚(撤销)该子操如何回滚(撤销)该子操作 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n提交事务(提交事务(committing))p在完成事务的日志记录后,在完成事务的日志记录后,NTFS在卷上执行各子操在卷上执行各子操作(在缓存中)作(在缓存中)p当当NTFS对缓存进行更新后,将代表整个事务已完成对缓存进行更新后,将代表整个事务已完成的记录写入日志文件,这个子操作称为的记录写入日志文件,这个子操作称为提交事务提交事务p一旦事务已提交,则一旦事务已提交,则NTFS保证该事务会在卷上表现保证该事务会在卷上表现出来,即使操作系统随后失败出来,即使操作系统随后失败NTFS可恢复性支持-日志记录-日志记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n当系统失败后恢复时当系统失败后恢复时pNTFS读整个日志文件,并重做所有已提交的事务;读整个日志文件,并重做所有已提交的事务;Ø尽管在系统失败前尽管在系统失败前NTFS已完成已提交事务,但已完成已提交事务,但并不知道缓存管理器是否已及时将对卷的更新操并不知道缓存管理器是否已及时将对卷的更新操作刷新到磁盘上;作刷新到磁盘上;Ø再次执行已提交的事务可以确保磁盘是最新的。

再次执行已提交的事务可以确保磁盘是最新的p然后,然后,NTFS确定日志文件中所有在系统失败时还未确定日志文件中所有在系统失败时还未提交的事务,并回滚(撤销)所记录的每一个子操提交的事务,并回滚(撤销)所记录的每一个子操作NTFS可恢复性支持-日志记录-日志记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nNTFS为以下事务写更新记录:为以下事务写更新记录:p创建文件;创建文件;p删除文件;删除文件;p扩展文件;扩展文件;p截断文件;截断文件;p设置文件信息;设置文件信息;p重命名文件;重命名文件;p改变文件的安全性改变文件的安全性NTFS可恢复性支持-日志记录-日志记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n在更新记录中的在更新记录中的redo与与undo信息必须谨慎使用信息必须谨慎使用pNTFS可能重做已经完成的事务;可能重做已经完成的事务;p或者相反,撤销从未执行的事务或已经撤销的事务或者相反,撤销从未执行的事务或已经撤销的事务n更新记录的格式必须确保执行冗余的重做或撤销操作是更新记录的格式必须确保执行冗余的重做或撤销操作是幂等幂等的,即具有中性效应。

的,即具有中性效应p多个重复的请求返回相同的结果多个重复的请求返回相同的结果NTFS可恢复性支持-日志记录-日志记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n检查点记录检查点记录nNTFS会定期地将检查点记录写入日志文件会定期地将检查点记录写入日志文件n在系统崩溃时,检查点记录可以使在系统崩溃时,检查点记录可以使NTFS确定恢复一个确定恢复一个卷需执行哪些处理过程卷需执行哪些处理过程nNTFS在写入检查点记录后,会在重启动区域中存储该在写入检查点记录后,会在重启动区域中存储该检查点记录的检查点记录的LSN,以便在开始文件系统恢复时能够快,以便在开始文件系统恢复时能够快速找到最近被写入的检查点记录速找到最近被写入的检查点记录NTFS可恢复性支持-日志记录-日志记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n日志文件中的检查点记录日志文件中的检查点记录NTFS可恢复性支持-日志记录-日志记录 •日志文件被写满的情况n日志文件大小有限,且检查点记录需频繁写入,因此日志日志文件大小有限,且检查点记录需频繁写入,因此日志文件有可能被写满文件有可能被写满。

nLFS跟踪以下参数来确定日志文件是否被写满:跟踪以下参数来确定日志文件是否被写满:n日志文件中的可用空间数量;日志文件中的可用空间数量;n写入日志记录与撤销该次写操作所需的空间数量;写入日志记录与撤销该次写操作所需的空间数量;n回滚所有活动的事务(即未提交的事务)所需的空间数回滚所有活动的事务(即未提交的事务)所需的空间数量n若日志文件没有足够的空间存储后两项若日志文件没有足够的空间存储后两项n则则LFS会返回会返回“日志文件已满日志文件已满”错误,从而错误,从而NTFS产生产生一个异常一个异常nNTFS异常处理程序回滚当前的事务,并将其放入队列异常处理程序回滚当前的事务,并将其放入队列中以便随后重新执行中以便随后重新执行 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n为了释放日志文件中的空间为了释放日志文件中的空间nNTFS立即阻塞进一步的文件事务立即阻塞进一步的文件事务pNTFS会阻塞文件创建与删除操作,然后请求对所有会阻塞文件创建与删除操作,然后请求对所有系统文件的独占访问与对所有用户文件的共享访问系统文件的独占访问与对所有用户文件的共享访问p逐渐地,活动的事务或者成功完成,或者接收到逐渐地,活动的事务或者成功完成,或者接收到“日志文件已满日志文件已满”异常,异常,NTFS回滚接收到异常的事务回滚接收到异常的事务并将其放入队列。

并将其放入队列NTFS可恢复性支持-日志记录-日志记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nNTFS阻塞文件事务活动之后,阻塞文件事务活动之后,p会调用缓存管理器将未写入的数据刷新到磁盘上,会调用缓存管理器将未写入的数据刷新到磁盘上,其中包括未写入的日志文件数据其中包括未写入的日志文件数据p在刷新安全完成之后,在刷新安全完成之后,NTFS不再需要日志文件中的不再需要日志文件中的数据,它会将日志文件的起始位置复位到当前位置,数据,它会将日志文件的起始位置复位到当前位置,设置日志文件为空设置日志文件为空p然后,然后,NTFS重启队列中的事务重启队列中的事务n除在除在I/O处理过程中会有短暂停顿,处理过程中会有短暂停顿,“日志文件已满日志文件已满”错误错误对当前执行程序没有任何影响对当前执行程序没有任何影响NTFS可恢复性支持-日志记录-日志记录 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•系统被引导后,当应用程序首次访问NTFS卷时,NTFS自动执行磁盘恢复•恢复依赖于NTFS在内存中维护的两张表:n事务表(事务表(transaction table))n记录已启动但尚未提交的事务,以便在恢复过程中从磁记录已启动但尚未提交的事务,以便在恢复过程中从磁盘删除这些活动事务的子操作。

盘删除这些活动事务的子操作n脏页表(脏页表(dirty page table))n记录缓存中包含已对文件系统结构进行了修改但尚未写记录缓存中包含已对文件系统结构进行了修改但尚未写回磁盘的页面,以便在恢复过程中将这些数据刷新到磁回磁盘的页面,以便在恢复过程中将这些数据刷新到磁盘NTFS可恢复性支持-恢复-恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•NTFS每隔5秒钟向日志文件写入一条检查点记录n在写入检查点记录之前在写入检查点记录之前nNTFS调用调用LFS将事务表与脏页表的当前拷贝存储到日将事务表与脏页表的当前拷贝存储到日志文件中;志文件中;n然后,然后,NTFS在检查点记录中记录包含这两张表内容的日志在检查点记录中记录包含这两张表内容的日志记录的记录的LSN•当系统失败后恢复时nNTFS调用调用LFS查找包含最近的检查点记录的日志记录,从查找包含最近的检查点记录的日志记录,从而可以查找包含事务表与脏页表最近拷贝的日志记录;而可以查找包含事务表与脏页表最近拷贝的日志记录;n然后,然后,NTFS将事务表与脏页表拷贝到内存将事务表与脏页表拷贝到内存NTFS可恢复性支持-恢复-恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•检查点之后的更新记录n日志文件中,在最新的检查点记录之后,通常还包含更多日志文件中,在最新的检查点记录之后,通常还包含更多的更新记录。

的更新记录n更新记录描述了在最新的检查点记录被写入日志文件后更新记录描述了在最新的检查点记录被写入日志文件后所发生的对卷的更改所发生的对卷的更改nNTFS必须更新事务表与脏页表以包含这些更新操作必须更新事务表与脏页表以包含这些更新操作n在更新表之后,在更新表之后,NTFS利用这些表与日志文件的内容来更新利用这些表与日志文件的内容来更新卷NTFS可恢复性支持-恢复-恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•为了实现卷的恢复,NTFS扫描日志文件3次,并在第一次扫描时将日志文件加载到内存以最小化磁盘I/O•每次扫描均有特定的目的:n分析;分析;n重做事务;重做事务;n撤销事务撤销事务NTFS可恢复性支持-恢复-恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•分析扫描(analysis pass)n分析扫描的示意图分析扫描的示意图nNTFS在日志文件中从最新检查点操作的开始处向前扫描在日志文件中从最新检查点操作的开始处向前扫描以发现更新记录,并使用更新记录更新被拷贝到内存的事以发现更新记录,并使用更新记录更新被拷贝到内存的事务表与脏页表务表与脏页表。

NTFS可恢复性支持-恢复-恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n在检查点操作开始后出现在日志文件中的大多数更新记录,在检查点操作开始后出现在日志文件中的大多数更新记录,n或者表示对事务表的更新;或者表示对事务表的更新;n或者表示对脏页表的更新或者表示对脏页表的更新n例如:例如:p若更新记录是若更新记录是““事务提交事务提交””记录,则该记录所代表记录,则该记录所代表的事务必须从事务表中删除的事务必须从事务表中删除p若更新记录用于修改文件系统数据结构的若更新记录用于修改文件系统数据结构的““页更新页更新””记录,则必须更新脏页表以体现更新操作记录,则必须更新脏页表以体现更新操作NTFS可恢复性支持-恢复-恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n一旦表中包含了最新的信息,一旦表中包含了最新的信息,NTFS会扫描这两张表以确定会扫描这两张表以确定最早的更新记录的最早的更新记录的LSNn该更新记录包含了最早的还该更新记录包含了最早的还未写到磁盘上的操作未写到磁盘上的操作nNTFS在这两张表中发现的最早更新记录的在这两张表中发现的最早更新记录的LSN确定了确定了重做扫描的起始位置。

重做扫描的起始位置n然而,若最新的检查点记录比最早更新记录更早,则重做然而,若最新的检查点记录比最早更新记录更早,则重做扫描从检查点记录开始执行扫描从检查点记录开始执行NTFS可恢复性支持-恢复-恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•重做扫描(redo pass)n重做扫描的示意图重做扫描的示意图nNTFS在日志文件中从最早的更新记录的在日志文件中从最早的更新记录的LSN开始扫描,开始扫描,n该更新记录是在分析扫描过程中确定的该更新记录是在分析扫描过程中确定的NTFS可恢复性支持-恢复-恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nNTFS查找查找“页更新记录页更新记录”n该记录包含了在系统失败前已已经对卷进行修改但可能该记录包含了在系统失败前已已经对卷进行修改但可能尚未刷新到磁盘的的信息尚未刷新到磁盘的的信息nNTFS在缓存中重做这些操作在缓存中重做这些操作n当当NTFS扫描到日志文件末尾时,已经利用这些必要的卷修扫描到日志文件末尾时,已经利用这些必要的卷修改信息更新了缓存改信息更新了缓存n缓存管理器的延迟写入器可以开始在后台将缓存内容写入缓存管理器的延迟写入器可以开始在后台将缓存内容写入磁盘。

磁盘NTFS可恢复性支持-恢复-恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•撤销扫描(undo pass)n在重做扫描结束之后,在重做扫描结束之后,NTFS开始撤销扫描开始撤销扫描n在撤销扫描中,在撤销扫描中,NTFS回滚系统失败时尚未提交的事务回滚系统失败时尚未提交的事务NTFS可恢复性支持-恢复-恢复 n撤销扫描示意图撤销扫描示意图n事务事务1在掉电之前被提交;在掉电之前被提交;n事务事务2没有提交,没有提交,NTFS必须撤销事务必须撤销事务2n假定事务假定事务2创建文件,此操作包含了三个子操作,每个创建文件,此操作包含了三个子操作,每个子操作有自己的更新记录,而事务的更新记录由反向指子操作有自己的更新记录,而事务的更新记录由反向指针链接在一起针链接在一起n事务表指明了事务表指明了LSN 4049是事务是事务2的最后一个更新记录的最后一个更新记录 n撤销事务的示意图撤销事务的示意图nNTFS回滚事务回滚事务2n在定位在定位LSN 4049后,后,NTFS找到撤销信息并执行该信息,找到撤销信息并执行该信息,清除其分配位图中的清除其分配位图中的3至至9位nNTFS根据反向指针找到根据反向指针找到LSN 4048,该,该LSN指示指示NTFS从适当的文件名索引中删除新的文件名。

从适当的文件名索引中删除新的文件名n最后,最后,NTFS按照最后一个反向指针找到按照最后一个反向指针找到LSN 4046,并,并根据根据LSN 4046的更新记录撤销为该文件保留的的更新记录撤销为该文件保留的MFT文文件记录,至此,事务件记录,至此,事务2被回滚 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n由于撤销事务会影响卷的文件系统格式,因此由于撤销事务会影响卷的文件系统格式,因此NTFS必须在必须在日志文件中记录撤销操作日志文件中记录撤销操作n若在恢复期间再次掉电,则若在恢复期间再次掉电,则NTFS必须重做其撤销操作必须重做其撤销操作n当恢复过程的撤销扫描结束之后,卷已经恢复到一致的状当恢复过程的撤销扫描结束之后,卷已经恢复到一致的状态nNTFS将缓存更新刷新到磁盘上,以确保卷是最新的将缓存更新刷新到磁盘上,以确保卷是最新的n然后,然后,NTFS写一个写一个“空的空的”LFS重启动区域以指明重启动区域以指明卷是一卷是一致的致的,若系统立即失败,则卷不需要恢复此时,恢复过,若系统立即失败,则卷不需要恢复此时,恢复过程结束NTFS可恢复性支持-恢复-恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•NTFS保证恢复过程会使卷回到原先的某个一致的状态,但不能保证刚好是系统崩溃之前的状态。

n从性能角度考虑,从性能角度考虑,NTFS使用使用“延迟提交(延迟提交(lazy commit))”算法,这意味着日志文件并不是在写算法,这意味着日志文件并不是在写“事务已事务已提交提交”记录时刷新到磁盘,记录时刷新到磁盘,n或者在缓存管理器将日志文件刷新到磁盘时,或者或者在缓存管理器将日志文件刷新到磁盘时,或者LFS向日志文件中写检查点记录时,大量的向日志文件中写检查点记录时,大量的“事务已提交事务已提交”记录以批处理方式一起写入磁盘记录以批处理方式一起写入磁盘n在系统崩溃时,若干个并行的事务可能是活动的,并且其在系统崩溃时,若干个并行的事务可能是活动的,并且其中的一些事务的中的一些事务的“事务已提交事务已提交”记录已经写入磁盘,而另记录已经写入磁盘,而另一些却没有一些却没有NTFS可恢复性支持-恢复-恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•恢复过程产生的卷是一致的,n恢复卷中包含所有恢复卷中包含所有“事务已提交事务已提交”记录已被写入磁盘的卷记录已被写入磁盘的卷更新操作;更新操作;n恢复卷中不包含任何恢复卷中不包含任何“事务已提交事务已提交”记录尚未被写入磁盘记录尚未被写入磁盘的卷更新操作。

的卷更新操作NTFS可恢复性支持-恢复-恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•Windows的卷管理器可以恢复容错卷上坏扇区中的数据•但是如果硬盘未使用SCSI协议或没有备用扇区(spare sector),n则卷管理器不能执行则卷管理器不能执行扇区备用扇区备用((sector sparing)来替代坏)来替代坏扇区l当文件系统从扇区读时,卷管理器恢复该扇区中的数据,并警告文件系统只有一份数据拷贝NTFS可恢复性支持--NTFSNTFS的坏簇恢复的坏簇恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•NTFS拥有与卷管理器的扇区备用相对应的功能nNTFS动态替换包含坏扇区的簇,并记录这些坏簇,以避动态替换包含坏扇区的簇,并记录这些坏簇,以避免再次使用免再次使用n当卷管理器不能执行扇区备用功能时,由当卷管理器不能执行扇区备用功能时,由NTFS执行执行n当卷管理器返回坏扇区告警时,或硬盘驱动器返回坏扇当卷管理器返回坏扇区告警时,或硬盘驱动器返回坏扇区错误时,区错误时,NTFS分配新簇以替代包含坏扇区的簇分配新簇以替代包含坏扇区的簇nNTFS将卷管理器恢复的数据拷贝到新簇来重建数据冗将卷管理器恢复的数据拷贝到新簇来重建数据冗余性。

余性NTFS可恢复性支持--NTFSNTFS的坏簇恢复的坏簇恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n包含坏簇的用户文件的包含坏簇的用户文件的MFT记录记录n该文件的一个数据串中有一个坏簇该文件的一个数据串中有一个坏簇NTFS可恢复性支持--NTFSNTFS的坏簇恢复的坏簇恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n当当NTFS接收到坏扇区错误时,接收到坏扇区错误时,nNTFS将包含坏扇区的簇分配给坏簇文件,以防止坏簇将包含坏扇区的簇分配给坏簇文件,以防止坏簇被分配给其他文件被分配给其他文件nNTFS为该文件分配新簇,并修改该文件的为该文件分配新簇,并修改该文件的VCN-LCN映映射关系以指向新簇射关系以指向新簇NTFS可恢复性支持--NTFSNTFS的坏簇恢复的坏簇恢复 n坏簇重映射过程坏簇重映射过程n簇簇1357包含了坏扇区,被新簇包含了坏扇区,被新簇1049替代 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•当坏扇区错误发生时,NTFS与卷管理器联合提供最佳解决方案n若坏扇区位于冗余卷上,则卷管理器恢复数据,且在可能若坏扇区位于冗余卷上,则卷管理器恢复数据,且在可能的情况下替代该扇区。

的情况下替代该扇区n若卷管理器不能替代该扇区,则向若卷管理器不能替代该扇区,则向NTFS返回告警,由返回告警,由NTFS替代包含坏扇区的簇替代包含坏扇区的簇NTFS可恢复性支持--NTFSNTFS的坏簇恢复的坏簇恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•若卷没有被配置成冗余卷,则坏扇区中的数据不能被恢复n当卷被格式化为当卷被格式化为FAT格式,且卷管理器不能恢复数据时,格式,且卷管理器不能恢复数据时,从坏扇区读取数据会产生不确定的结果从坏扇区读取数据会产生不确定的结果n若有文件系统控制结构位于坏扇区上,则整个文件或文若有文件系统控制结构位于坏扇区上,则整个文件或文件组(也有可能是整个磁盘)会丢失件组(也有可能是整个磁盘)会丢失n在最好的情况下,受影响文件的部分数据会丢失,通常在最好的情况下,受影响文件的部分数据会丢失,通常是坏扇区之后的所有数据丢失是坏扇区之后的所有数据丢失n另外,另外,FAT文件系统也可能会将坏扇区重新分配给该文文件系统也可能会将坏扇区重新分配给该文件或卷上的其他文件,从而导致问题再次发生件或卷上的其他文件,从而导致问题再次发生NTFS可恢复性支持--NTFSNTFS的坏簇恢复的坏簇恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nNTFS在没有卷管理器帮助的情况下,不能恢复坏扇区的数在没有卷管理器帮助的情况下,不能恢复坏扇区的数据,但据,但NTFS可以容忍坏扇区造成的危害。

可以容忍坏扇区造成的危害n若若NTFS在读操作期间发现坏扇区,则会重映射坏扇区在读操作期间发现坏扇区,则会重映射坏扇区所在的簇所在的簇p若卷没有被配置为冗余卷,则若卷没有被配置为冗余卷,则NTFS会向调用程序返会向调用程序返回回“数据读数据读”错误Ø尽管该簇中的数据丢失,但文件或文件系统的其尽管该簇中的数据丢失,但文件或文件系统的其余数据仍保持完好无损,调用程序可以对数据丢余数据仍保持完好无损,调用程序可以对数据丢失做出适当的响应,且坏扇区不会被重新分配失做出适当的响应,且坏扇区不会被重新分配n若若NTFS在写操作期间发现坏扇区,则在写操作期间发现坏扇区,则NTFS在写操作之在写操作之前重新映射包含坏扇区的簇,因而既不会丢失数据,也前重新映射包含坏扇区的簇,因而既不会丢失数据,也不会产生错误不会产生错误NTFS可恢复性支持--NTFSNTFS的坏簇恢复的坏簇恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•若存储文件系统数据的扇区损坏,NTFS遵从相同的恢复过程n若坏扇区位于冗余卷,则若坏扇区位于冗余卷,则NTFS使用卷管理器恢复的数据,使用卷管理器恢复的数据,动态替换包含坏扇区的簇。

动态替换包含坏扇区的簇n若卷不是冗余的,则数据不能被恢复,且若卷不是冗余的,则数据不能被恢复,且NTFS在卷文件中在卷文件中设置位,以指明该卷上出现的损坏设置位,以指明该卷上出现的损坏p当系统下次重启时,当系统下次重启时,NTFS的的Chkdsk工具会检查该位,工具会检查该位,若该位被设置,则重建若该位被设置,则重建NTFS元数据以修复文件系统损元数据以修复文件系统损坏NTFS可恢复性支持--NTFSNTFS的坏簇恢复的坏簇恢复 •NTFS数据恢复情况的概述n在以下情况下,卷管理器不能执行扇区备用:在以下情况下,卷管理器不能执行扇区备用:n未使用未使用SCSI协议的硬盘没有用于提供扇区备用的标准协议的硬盘没有用于提供扇区备用的标准接口;接口;n对于某些没有为扇区备用提供硬件支持的硬盘,及提对于某些没有为扇区备用提供硬件支持的硬盘,及提供了扇区备用的供了扇区备用的SCSI硬盘,若有很多扇区损坏导致备硬盘,若有很多扇区损坏导致备用扇区耗尽用扇区耗尽n容错卷是指以下卷类型:镜像卷或容错卷是指以下卷类型:镜像卷或RAID 5卷 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•若出现坏扇区的卷是容错卷,且硬盘支持扇区备用以及备用扇区没有耗尽,n则无论使用则无论使用NTFS还是还是FAT文件系统,都不会出现问题。

文件系统,都不会出现问题n卷管理器在无需用户或文件系统干预的情况下替代坏扇区卷管理器在无需用户或文件系统干预的情况下替代坏扇区•若出现坏扇区的硬盘不支持扇区备用,n则对于则对于NTFS来说,文件系统负责替代(重映射)坏扇区或来说,文件系统负责替代(重映射)坏扇区或包含坏扇区的簇包含坏扇区的簇nNTFS簇重映射的优点是文件中的坏点可以被修复而不簇重映射的优点是文件中的坏点可以被修复而不损害文件或文件系统,且坏簇不会被重新分配给该文件损害文件或文件系统,且坏簇不会被重新分配给该文件或其他文件或其他文件nFAT文件系统不提供扇区或簇重映射文件系统不提供扇区或簇重映射NTFS可恢复性支持--NTFSNTFS的坏簇恢复的坏簇恢复 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院加密文件系统安全性•加密文件系统安全性n概述概述n加密过程加密过程n解密过程解密过程n加密文件的备份加密文件的备份 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•加密文件系统(EFS,Encrypting File System)安全性依赖于密码学支持•当文件首次被加密时,EFS为用户帐户分配用于文件加密的私有/公开密钥对,以便在文件加密过程中使用。

加密文件系统安全性-概述-概述 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•用户可以通过以下方式加密文件nWindows Exploer中,右键文件,选择中,右键文件,选择“属性属性”,在,在“属性属性”对话框中选择对话框中选择“高级高级”,在,在“高级属性高级属性”对话框中选择对话框中选择“加密内容以便保护数据加密内容以便保护数据”n用户还可以使用命令行工具用户还可以使用命令行工具cipher来加密文件来加密文件加密文件系统安全性-概述-概述 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•Windows自动加密被指定为加密目录中的文件•当文件被加密时nEFS为该文件生成随机数,称为该文件的为该文件生成随机数,称为该文件的文件加密密钥文件加密密钥((FEK,,file encryption key)nEFS将将FEK作为加密密钥,作为加密密钥,n在在Windows 2000系统上使用系统上使用DES算法的更强变体算法的更强变体DESX来加密文件的内容;来加密文件的内容;n在在Windows XP与与Windows Server 2003上使用上使用DESX、、3DES或或AES算法来加密文件的内容。

算法来加密文件的内容加密文件系统安全性-概述-概述 •EFS使用公开密钥密码算法来保证FEK的安全nEFS将文件与其将文件与其FEK存储在一起,并采用存储在一起,并采用RSA公开密钥密公开密钥密码算法、使用用户的码算法、使用用户的EFS公开密钥来加密公开密钥来加密FEKnWindows在用户配置目录中存储其在用户配置目录中存储其私有密钥私有密钥,即,即\Document and Settings\user\Application Data\Microsoft\Crypto\RSA子目录下子目录下n为保护私有密钥,为保护私有密钥,Windows使用使用用户主密钥用户主密钥来加密来加密RSA目录下的所有文件目录下的所有文件p用户主密钥是随机对称密钥,用户主密钥是随机对称密钥,64字节长,由强随机字节长,由强随机数生成器产生,并被保存在数生成器产生,并被保存在Application Data\Microsoft\Protect目录下的用户配置文件中,目录下的用户配置文件中,使用使用3DES加密算法及基于用户口令的密钥进行加密加密算法及基于用户口令的密钥进行加密p当用户改变其口令时,主密钥自动被解密,并使用当用户改变其口令时,主密钥自动被解密,并使用新口令重新加密。

新口令重新加密 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•EFS系统包括以下组件nEFS模块模块n本地安全鉴别子系统(本地安全鉴别子系统(LSASS,,\Windows\System32\Lsass.exe))nCryptoAPI函数函数加密文件系统安全性-概述-概述 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nEFS模块模块n在在Windows 2000中中pEFS是作为设备驱动程序实现的,运行于内核模式,是作为设备驱动程序实现的,运行于内核模式,并与并与NTFS文件系统驱动程序紧密相关;文件系统驱动程序紧密相关;n在在Windows XP与与Windows Server 2003上上pEFS被包含在被包含在NTFS驱动程序中驱动程序中加密文件系统安全性-概述-概述 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n当当NTFS访问加密文件时访问加密文件时p执行执行EFS函数ØEFS函数在函数在EFS内核模式代码初始化时向内核模式代码初始化时向NTFS注册pEFS函数使用函数使用FEK加密及解密文件数据加密及解密文件数据Ø尽管尽管EFS将将FEK与文件数据存储在一起,但与文件数据存储在一起,但FEK是由用户的公钥加密的,是由用户的公钥加密的,Ø为了加密或解密文件数据,为了加密或解密文件数据,EFS必须使用驻留在必须使用驻留在用户模式的密码服务来解密文件的用户模式的密码服务来解密文件的FEK。

加密文件系统安全性-概述-概述 n本地安全鉴别子系统本地安全鉴别子系统LSASSnLSASS执行执行EFS密钥管理密钥管理n当当EFS驱动程序需要解密驱动程序需要解密FEK时,时,EFS驱动程序会通过驱动程序会通过本地过程调用本地过程调用LPC向向LSASS发送请求;发送请求;pKsecDD((\Windows\System32\Drivers\Ksecdd.sys))设备驱动程序为需要向设备驱动程序为需要向LSASS发送发送LPC消息的驱动消息的驱动程序提供导出函数;程序提供导出函数;nLSASS的本地安全鉴别服务器(的本地安全鉴别服务器(Lsasrv,,\Windows\System32\Lsasrv.dll)组件监听并将解密)组件监听并将解密FEK请求发送给请求发送给Lsasrv中与中与EFS相关的解密函数;相关的解密函数;pLsasrv使用使用Microsoft CryptoAPI函数解密函数解密FEKnLsasrv解密解密FEK后,将其通过后,将其通过LPC应答报文发送给应答报文发送给EFS驱动程序驱动程序nEFS接收到解密的接收到解密的FEK后,使用后,使用DESX为为NTFS解密解密文件数据。

文件数据 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nCryptoAPI函数函数nCryptoAPI包含了密码服务提供者(包含了密码服务提供者(CSP,,cryptographic service provider))DLL,向应用程序提供,向应用程序提供各种密码服务各种密码服务pCSP DLL管理用户私钥与公钥的生成,使得管理用户私钥与公钥的生成,使得Lsasrv无需关心保护密钥甚至加密算法的细节无需关心保护密钥甚至加密算法的细节pEFS使用由使用由Microsoft增强密码提供者增强密码提供者((\Windows\System32\Rsaenh.dll)提供的)提供的RSA加密加密算法加密文件系统安全性-概述-概述 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•EFS系统结构加密文件系统安全性-概述-概述 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•在Windows中,加密文件有两种方式n使用命令行工具使用命令行工具cipher;;n设置设置“加密内容以便保护数据加密内容以便保护数据”属性•两种加密方式依赖于Windows的API函数EncryptFilen该函数是该函数是Advapi32.dll的导出函数,的导出函数,Advapi32加载加载Feclient.dll((File Encryption Client DLL)以获取)以获取API函数。

函数n这些这些API函数用于通过函数用于通过LPC调用调用Lsasrv中的中的EFS接口加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•当Lsasrv接收到来自Feclient的加密文件消息时,Lsasrv在卷的System Volume Information目录下创建日志文件,并在该文件中记录加密过程n该日志文件通常文件名为该日志文件通常文件名为Efs0.log;;n若其他文件正在加密,则为当前的加密过程创建一个惟一若其他文件正在加密,则为当前的加密过程创建一个惟一的日志文件名,通常是使用递增的数字来代替的日志文件名,通常是使用递增的数字来代替0加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•CryptoAPI函数依赖于用户注册配置文件中存储的信息n通常,由于通常,由于Winlogon在用户注册时,会加载用户的配置文在用户注册时,会加载用户的配置文件n若配置文件没有加载,则若配置文件没有加载,则Lsasrv使用使用Userenv.dll(用户环(用户环境境DLL)中的)中的LoadUserProfile API函数将配置文件加载到函数将配置文件加载到用户的注册表中。

用户的注册表中•然后,Lsasrv使用Microsoft基础密码提供者1.0 CSP的RSA加密设施为该文件生成FEK加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•构建密钥环nLsasrv拥有拥有FEK,可以构建,可以构建EFS信息并与文件一起存储信息并与文件一起存储nEFS信息包括:信息包括:n首部首部n数据解密域数据解密域((DDF,,Data Decryption Field))n数据恢复域(数据恢复域(DRF,,Data Recovery Field))加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n首部首部nLsasrv使用微软基础加密提供者使用微软基础加密提供者CSP 1.1中的中的MD5散列散列工具计算工具计算DDF与与DRF的校验和,并将校验和存储在的校验和,并将校验和存储在EFS信息首部信息首部nEFS在解密过程中使用该校验和以保证文件在解密过程中使用该校验和以保证文件EFS信息的信息的内容没有被破坏和篡改内容没有被破坏和篡改加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n数据解密域数据解密域nLsasrv在被加密文件中只存储一个信息块,该信息块包在被加密文件中只存储一个信息块,该信息块包含了为每个共享该文件的用户分配的表项,称为含了为每个共享该文件的用户分配的表项,称为密钥项密钥项((key entries)。

nEFS密钥项存储在文件的密钥项存储在文件的EFS信息的数据解密域中信息的数据解密域中n多个密钥项的集合称为多个密钥项的集合称为密钥环密钥环((key ring)加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n密钥项包括密钥项包括p用户公钥信息用户公钥信息Ø包括用户的安全包括用户的安全ID((SID)、存储密钥的容器名)、存储密钥的容器名称、密码提供者名称,以及私钥称、密码提供者名称,以及私钥/公钥对的证书散公钥对的证书散列值Ø解密过程仅使用了其中的私钥解密过程仅使用了其中的私钥/公钥对的证书散公钥对的证书散列值加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院p加密的加密的FEKØLsasrv读取执行加密任务用户的注册表键读取执行加密任务用户的注册表键HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\EFS\CurrentKeys\CertificateHash,以获得用户的公开密钥签名以获得用户的公开密钥签名。

ØLsasrv使用该用户签名访问用户的公开密钥使用该用户签名访问用户的公开密钥ØLsasrv使用使用CryptoAPI函数,利用函数,利用RSA算法与用算法与用户的公开密钥加密户的公开密钥加密FEK 加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n数据恢复域数据恢复域n存储恢复密钥项相关的信息存储恢复密钥项相关的信息nDRF项的格式与项的格式与DDF项相同nDRF的作用的作用p当管理权威机构必须访问用户数据时,指定的帐户,当管理权威机构必须访问用户数据时,指定的帐户,或恢复代理(或恢复代理(Recovery Agents)可以解密用户文件可以解密用户文件Ø恢复代理由本地计算机或域的加密数据恢复代理恢复代理由本地计算机或域的加密数据恢复代理安全策略来定义,安全策略可以使用组安全管理安全策略来定义,安全策略可以使用组安全管理工具获得工具获得p例如,假定公司员工忘记了登录口令,管理员可以例如,假定公司员工忘记了登录口令,管理员可以复位该用户的口令,但如果没有恢复代理,任何人复位该用户的口令,但如果没有恢复代理,任何人都不能恢复该用户的加密数据。

都不能恢复该用户的加密数据加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nEFS信息与密钥项的格式信息与密钥项的格式加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•加密文件数据nEFS加密过程流程图加密过程流程图加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nEFS加密过程加密过程nLsasrv在为用户希望加密的文件构造必要的信息以后,在为用户希望加密的文件构造必要的信息以后,然后开始加密文件然后开始加密文件nLsasrv在正在加密文件的目录中为该文件创建备份文件在正在加密文件的目录中为该文件创建备份文件Efs0.tmppLsasrv将特定的安全描述符应用于备份文件,从而将特定的安全描述符应用于备份文件,从而只有系统账号才能访问该文件的内容只有系统账号才能访问该文件的内容nLsasrv随后初始化在加密过程的第一阶段创建的日志文随后初始化在加密过程的第一阶段创建的日志文件n最后,最后,Lsasrv在日志文件中记录在日志文件中记录“备份文件已创建备份文件已创建” 。

加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nLsasrv通过通过NTFS向向EFS内核模式代码发送命令,向原始内核模式代码发送命令,向原始文件增加刚创建的文件增加刚创建的EFS信息pNTFS接收该命令,由于接收该命令,由于NTFS不能理解不能理解EFS命令,命令,NTFS调用调用EFS驱动程序驱动程序nEFS内核模式代码接收内核模式代码接收Lsasrv发送来的发送来的EFS信息,并使信息,并使用用NTFS导出函数将该信息应用于文件导出函数将该信息应用于文件pEFS使用使用NTFS导出函数为导出函数为NTFS文件增加文件增加$EFS属性,属性,然后返回然后返回Lsasrv执行nLsasrv将正在加密文件的内容拷贝到备份文件,当备份将正在加密文件的内容拷贝到备份文件,当备份拷贝完成,拷贝完成,Lsasrv在日志文件中记录在日志文件中记录“备份文件已更新备份文件已更新”nLsasrv向向NTFS发送命令,通知发送命令,通知NTFS加密原始文件内容加密原始文件内容加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n当当NTFS接收到接收到EFS加密文件的命令时,加密文件的命令时,NTFS删除原始删除原始文件的内容,并将备份数据拷贝到文件中。

文件的内容,并将备份数据拷贝到文件中nNTFS刷新文件系统缓存中的区域数据,提示缓存管理刷新文件系统缓存中的区域数据,提示缓存管理器将文件数据写到磁盘器将文件数据写到磁盘p由于文件被标记为加密,因此在文件写操作的过程由于文件被标记为加密,因此在文件写操作的过程中,在中,在NTFS将数据写入磁盘之前,调用将数据写入磁盘之前,调用EFS加密数加密数据pEFS使用使用NTFS传送给自己的未加密的传送给自己的未加密的FEK执行执行DESX、、AES或或3DES加密文件,每次一个扇区加密文件,每次一个扇区((512B)加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nEFS加密文件之后,加密文件之后,Lsasrv在日志文件中记录在日志文件中记录“加密成加密成功功”,并删除文件的备份拷贝并删除文件的备份拷贝nLsasrv删除日志文件,并将控制权返回给请求文件加密删除日志文件,并将控制权返回给请求文件加密的应用程序的应用程序加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•加密过程总结n如果必要,加载用户配置文件;如果必要,加载用户配置文件;n在在System Volume Information目录中创建名为目录中创建名为Efsx.log的日的日志文件,志文件,n其中其中x代表惟一标识,如代表惟一标识,如Efs0.log。

n在随后的步骤中,会在日志文件中写入记录,从而在加在随后的步骤中,会在日志文件中写入记录,从而在加密过程中,若系统失败,可以使用日志文件来恢复文件密过程中,若系统失败,可以使用日志文件来恢复文件n微软基础密码提供者微软基础密码提供者CSP为文件生成为文件生成128位随机的位随机的FEKn生成或获取用户的生成或获取用户的EFS公开公开/私有密钥对,注册表私有密钥对,注册表HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\EFS\CurrentKeys\CertificateHash中标中标识用户的密钥对识用户的密钥对加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n为文件创建为文件创建DDF密钥环n其中包括该用户的表项,该表项包含了使用用户其中包括该用户的表项,该表项包含了使用用户EFS公公钥加密的钥加密的FEKn为文件创建为文件创建DRF密钥环n其中包含了系统中每个恢复代理对应的表项,每个表项其中包含了系统中每个恢复代理对应的表项,每个表项中包含了使用相应代理的中包含了使用相应代理的EFS公钥加密的公钥加密的FEK。

n在被加密文件所在的目录中创建文件名形如在被加密文件所在的目录中创建文件名形如Efs0.tmp的备的备份文件n将将DDF与与DRF密钥环添加到首部,作为该文件的密钥环添加到首部,作为该文件的$EFS属性n备份文件被标记为已加密,并将原始文件拷贝到备份文件备份文件被标记为已加密,并将原始文件拷贝到备份文件加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n破坏原始文件的内容,并将备份文件拷贝回原始文件破坏原始文件的内容,并将备份文件拷贝回原始文件n该拷贝操作使得原始文件中的数据被加密,因为该文件该拷贝操作使得原始文件中的数据被加密,因为该文件已被标识为已加密已被标识为已加密n删除备份文件删除备份文件n删除日志文件删除日志文件n卸载用户配置文件(若在步骤卸载用户配置文件(若在步骤1中已加载)中已加载)加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•在加密过程中,如果系统崩溃,则n或者原始文件仍然原封未动;或者原始文件仍然原封未动;n或者备份文件保护一致的拷贝或者备份文件保护一致的拷贝。

•当Lsasrv在系统崩溃后初始化时,查找系统中每个NTFS卷上System Volume Information子目录下的日志文件n若若Lsasrv发现一个或多个日志文件,则会检查这些文件的发现一个或多个日志文件,则会检查这些文件的内容,并确定如何执行恢复操作内容,并确定如何执行恢复操作n若原始文件在系统崩溃时没有被修改,则若原始文件在系统崩溃时没有被修改,则Lsasrv删除日删除日志文件及相应的备份文件;志文件及相应的备份文件;n否则,否则,Lsasrv将备份文件拷贝到部分加密的原始文件,将备份文件拷贝到部分加密的原始文件,然后删除日志文件与备份文件然后删除日志文件与备份文件加密文件系统安全性-加密过程-加密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•当用户打开加密文件时,解密过程开始•NTFS在打开文件时检查文件属性,然后执行EFS驱动程序的回调函数•EFS驱动程序调用NTFS导出函数,以读取与加密文件关联的$EFS属性nNTFS驱动程序确保打开文件的用户拥有对文件被加密数据驱动程序确保打开文件的用户拥有对文件被加密数据的访问权限,的访问权限,n即,在即,在DDF或或DRF密钥环中的加密密钥环中的加密FEK与该用户相关联与该用户相关联的私有的私有/公开密钥对相对应。

公开密钥对相对应加密文件系统安全性-解密过程-解密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•当EFS执行验证时,EFS获得文件的已解密的FEK,以便在随后的数据操作过程中使用nEFS不能解密不能解密FEK,而需要依赖,而需要依赖Lsasrv执行执行FEK解密nEFS通过通过Ksecdd.sys驱动程序向驱动程序向Lsasrv发送发送LPC消息,请求消息,请求Lsasrv解密解密$EFS属性数据中的、与打开文件用户相对应的属性数据中的、与打开文件用户相对应的FEKn当当Lsasrv收到收到LPC消息时,执行消息时,执行Userenv.dll(用户环境(用户环境DLL)中的)中的LoadUserProfile API函数,以便在用户配置函数,以便在用户配置文件没有加载时,将其加载到注册表中文件没有加载时,将其加载到注册表中加密文件系统安全性-解密过程-解密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nLsasrv遍历遍历EFS数据中的每个密钥域,并使用用户的私数据中的每个密钥域,并使用用户的私有密钥尝试解密每个有密钥尝试解密每个FEK。

p若若Lsasrv不能解密任何不能解密任何DDF或或DRF密钥域的密钥域的FEK,,则用户不能获取文件的则用户不能获取文件的FEK,相应地,,相应地,EFS拒绝应拒绝应用程序访问该文件用程序访问该文件p若若Lsasrv识别出证书散列值对应于用户拥有的一个识别出证书散列值对应于用户拥有的一个密钥,则会调用密钥,则会调用CryptoAPI函数,使用该用户的私有函数,使用该用户的私有密钥解密密钥解密FEK加密文件系统安全性-解密过程-解密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•解密文件数据n应用程序打开被加密文件后,可以对文件进行读写应用程序打开被加密文件后,可以对文件进行读写n在在NTFS从磁盘中读数据,并将数据放入文件系统缓存从磁盘中读数据,并将数据放入文件系统缓存之前,会调用之前,会调用EFS驱动程序解密文件数据驱动程序解密文件数据n当应用程序向文件中写数据时,直到应用程序或缓存管理当应用程序向文件中写数据时,直到应用程序或缓存管理器使用器使用NTFS将数据刷新到磁盘上时,文件系统缓存中的数将数据刷新到磁盘上时,文件系统缓存中的数据仍保持未加密的状态据仍保持未加密的状态。

n当被加密文件的数据从缓存写回磁盘时,当被加密文件的数据从缓存写回磁盘时,NTFS调用调用EFS驱动程序加密数据驱动程序加密数据加密文件系统安全性-解密过程-解密过程 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•限制n除了可以使用加密工具访问文件外,其他方式均不能获得除了可以使用加密工具访问文件外,其他方式均不能获得文件数据的明文,包括备份工具文件数据的明文,包括备份工具•EFS向备份实用程序提供了工具,使得备份实用程序可以在文件的加密状态下备份与恢复文件加密文件系统安全性-加密文件的备份-加密文件的备份 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•备份实用程序使用EFS的API函数OpenEncryptedFileRaw、ReadEncryptedFileRaw、WriteEncryptedFileRaw与CloseCncryptedFileRaw访问文件被加密的内容n这些函数由这些函数由Advapi32.dll动态链接库提供,并使用动态链接库提供,并使用LPC来调来调用用Lsasrv中相应的函数中相应的函数加密文件系统安全性-加密文件的备份-加密文件的备份 n例如,在备份操作过程中,在备份实用工具打开文件以进例如,在备份操作过程中,在备份实用工具打开文件以进行原始数据访问后,会调用行原始数据访问后,会调用ReadEncryptedFileRaw函数来函数来获取文件数据。

获取文件数据nLsasrv函数函数EfsReadFileRaw向向NTFS驱动程序发送控制驱动程序发送控制命令,以便首先读取文件的命令,以便首先读取文件的EFS属性,然后读取该文件属性,然后读取该文件被加密的内容被加密的内容pEfsReadFileRaw函数可能会执行多个读操作以读取函数可能会执行多个读操作以读取一个大的文件一个大的文件p当当EfsReadFileRaw函数读取大文件的每个部分时,函数读取大文件的每个部分时,Lsasrv会向会向Advapi32.dll发送发送RPC消息,该消息,该RPC消息消息会导致执行备份程序在调用会导致执行备份程序在调用ReadEncryptedFileRaw函数时指定的回调函数函数时指定的回调函数pEfsReadFileRaw函数将读到的加密数据传送给该回函数将读到的加密数据传送给该回调函数,而由回调函数将数据写入备份介质调函数,而由回调函数将数据写入备份介质 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n备份实用程序使用相同的方式恢复被加密的文件备份实用程序使用相同的方式恢复被加密的文件p备份实用程序调用备份实用程序调用WriteEncryptedFileRaw API函数,函数,当当Lsasrv的的EfsWriteFileRaw函数恢复文件内容时,函数恢复文件内容时,该函数调用备份实用程序中的回调函数以便从备份该函数调用备份实用程序中的回调函数以便从备份介质中获取加密的数据。

介质中获取加密的数据加密文件系统安全性-加密文件的备份-加密文件的备份 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院Windows缓存管理•Windows缓存管理n关键特性关键特性n缓存的虚拟内存管理缓存的虚拟内存管理n缓存的数据结构缓存的数据结构 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•关键特性n支持所有的文件系统类型,因此无需每一个文件系统单独支持所有的文件系统类型,因此无需每一个文件系统单独实现自己的缓存管理代码;实现自己的缓存管理代码;n使用内存管理器来控制驻留在物理内存中的文件部分;使用内存管理器来控制驻留在物理内存中的文件部分;n使用虚拟块来缓存数据,这使得在不涉及文件系统驱动程使用虚拟块来缓存数据,这使得在不涉及文件系统驱动程序的情况下智能预读和高速访问缓存成为可能;序的情况下智能预读和高速访问缓存成为可能;n支持应用程序在打开文件时传递提示(支持应用程序在打开文件时传递提示(hint)(如顺序)(如顺序/随随机访问);机访问);n支持可恢复的文件系统,以便在系统失败后恢复数据支持可恢复的文件系统,以便在系统失败后恢复数据Windows缓存管理-关键特性-关键特性 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•Windows的缓存管理器基于虚拟地址空间来缓存数据n管理虚拟地址空间中的一个区域而不是物理内存区域。

管理虚拟地址空间中的一个区域而不是物理内存区域•缓存管理器将该区域划分为256KB大小的槽,称为视图(views)Windows缓存管理-缓存的虚拟内存管理-缓存的虚拟内存管理 •系统缓存地址空间示意图n当文件第一次执行当文件第一次执行I/O操作(读或写)操作(读或写)时,缓存管理器将时,缓存管理器将所请求文件中包含所请求文件中包含数据的数据的256KB对齐对齐的区域,映射为一的区域,映射为一个个256KB的视图,的视图,并放入系统缓存地并放入系统缓存地址空间中的一个址空间中的一个256KB的空闲槽中的空闲槽中 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•缓存管理器按照轮转(round-robin)的方式将文件的视图映射到缓存地址空间中的槽中n例子:将不同大小的文件映射到系统缓存例子:将不同大小的文件映射到系统缓存Windows缓存管理-缓存的虚拟内存管理-缓存的虚拟内存管理 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•缓存管理器只映射活动的(active)视图n只有在针对文件进行读或写操作时,视图才被标记为只有在针对文件进行读或写操作时,视图才被标记为活动活动的的。

n进程不是以进程不是以FILE_FLAG_RANDOM_ACCESS标志调用标志调用CreateFile函数来打开一个文件,函数来打开一个文件,n则缓存管理器在为该文件映射新视图时,会解除不活动则缓存管理器在为该文件映射新视图时,会解除不活动的视图映射关系的视图映射关系Windows缓存管理-缓存的虚拟内存管理-缓存的虚拟内存管理 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•若缓存管理器需要映射一个文件视图但缓存内没有空余的槽时,n会取消最早被映射的不活动视图的映射关系,并重用该槽会取消最早被映射的不活动视图的映射关系,并重用该槽•若没有视图可用,n则会返回一个则会返回一个I/O错误,说明没有足够的系统资源完成该操错误,说明没有足够的系统资源完成该操作Windows缓存管理-缓存的虚拟内存管理-缓存的虚拟内存管理 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•缓存管理器使用以下数据结构来跟踪被缓存的文件:n系统缓存的每个系统缓存的每个256KB的槽由一个的槽由一个虚拟地址控制块虚拟地址控制块VACB描述n每个打开的缓存文件有一个每个打开的缓存文件有一个私有的缓存映射结构私有的缓存映射结构。

n私有缓存映射结构包含了用于控制文件预读的信息;私有缓存映射结构包含了用于控制文件预读的信息;n每个被缓存的文件有一个每个被缓存的文件有一个共享的缓存映射结构共享的缓存映射结构n共享缓存映射结构指向系统缓存中包含该文件映射视图共享缓存映射结构指向系统缓存中包含该文件映射视图的槽Windows缓存管理-缓存的数据结构-缓存的数据结构 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•系统范围的缓存数据结构n缓存管理器使用虚拟地址控制块缓存管理器使用虚拟地址控制块VACB在系统缓存中跟踪在系统缓存中跟踪视图的状态视图的状态n在系统初始化时,缓存管理器分配一个非换页的内存区在系统初始化时,缓存管理器分配一个非换页的内存区域,以存储所有用来描述系统缓存的域,以存储所有用来描述系统缓存的VACBnCcVacbs变量保存了变量保存了VACB数组数组的地址,每个的地址,每个VACB代表代表系统缓存中的一个系统缓存中的一个256KB视图 Windows缓存管理-缓存的数据结构-缓存的数据结构 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n系统系统VACB数组数组Windows缓存管理-缓存的数据结构-缓存的数据结构 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nVACB结构结构n数据在系统缓存中的虚拟地址;数据在系统缓存中的虚拟地址;n指向共享缓存映射的指针,指出指向共享缓存映射的指针,指出是哪个文件被缓存;是哪个文件被缓存;n文件偏移,标识视图起始处在文文件偏移,标识视图起始处在文件中的偏移(通常以件中的偏移(通常以256KB为单位)为单位);;n活动计数,包含了该视图被引用活动计数,包含了该视图被引用的数目,即当前有多少读或写操作的数目,即当前有多少读或写操作在访问该视图。

在访问该视图 p对于针对文件系统元数据的对于针对文件系统元数据的访问,活动计数标识有多少访问,活动计数标识有多少文件系统驱动程序使该视图文件系统驱动程序使该视图中的页面被锁定在内存中中的页面被锁定在内存中Windows缓存管理-缓存的数据结构-缓存的数据结构 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院•单文件的缓存数据结构n私有缓存映射结构(私有缓存映射结构(private cache map structure))n每一个被打开的文件句柄都有一个对应的文件对象,若每一个被打开的文件句柄都有一个对应的文件对象,若文件被缓存,则文件对象指向一个私有缓存映射结构文件被缓存,则文件对象指向一个私有缓存映射结构n该结构包含了最后两次读操作的位置,以便使得缓存管该结构包含了最后两次读操作的位置,以便使得缓存管理器能够执行理器能够执行智能预读智能预读n针对同一个文件的已打开实例的所有私有缓存映射结构针对同一个文件的已打开实例的所有私有缓存映射结构都被链接在一起都被链接在一起Windows缓存管理-缓存的数据结构-缓存的数据结构 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n共享缓存映射结构(共享缓存映射结构(shared cache map structure))n每个被缓存的文件都有一个共享缓存映射结构;每个被缓存的文件都有一个共享缓存映射结构;n该结构描述了被缓存文件的状态,包括该结构描述了被缓存文件的状态,包括n文件大小和有效的数据长度;文件大小和有效的数据长度;n指向区域对象的指针;指向区域对象的指针;n与该文件相关的私有缓存映射链表,与该文件相关的私有缓存映射链表,n在系统缓存中用于描述当前文件映射视图的所有在系统缓存中用于描述当前文件映射视图的所有VACB。

Windows缓存管理-缓存的数据结构-缓存的数据结构 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n单文件缓存数据结构之间的关系单文件缓存数据结构之间的关系Windows缓存管理-缓存的数据结构-缓存的数据结构 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院nVACB索引数组(索引数组(VACB index array))n当请求从一个指定的文件进行读时,缓存管理器必须回当请求从一个指定的文件进行读时,缓存管理器必须回答两个问题:答两个问题:p文件是否在缓存中?文件是否在缓存中?p若文件在缓存中,哪个若文件在缓存中,哪个VACB指向被请求的位置?指向被请求的位置?n为了追踪指定文件的哪些视图已被映射到系统缓存中,为了追踪指定文件的哪些视图已被映射到系统缓存中,缓存管理器维护了一个指向缓存管理器维护了一个指向VACB的指针数组,称为的指针数组,称为VACB索引数组索引数组nVACB索引数组的第一个表项指向文件的第一个索引数组的第一个表项指向文件的第一个256KB,第二个表项指向文件的第二个,第二个表项指向文件的第二个256KB,以此类推以此类推Windows缓存管理-缓存的数据结构-缓存的数据结构 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n三个文件被映射到系统缓存的四个不同区域三个文件被映射到系统缓存的四个不同区域Windows缓存管理-缓存的数据结构-缓存的数据结构 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n当进程访问一个文件的指定位置时,缓存管理器在该文当进程访问一个文件的指定位置时,缓存管理器在该文件的件的VACB索引数组中查找相应的表项,以确定所请求索引数组中查找相应的表项,以确定所请求的数据是否已经被映射到缓存中。

的数据是否已经被映射到缓存中p若数组表项非空,则该文件的被引用区域已经在缓若数组表项非空,则该文件的被引用区域已经在缓存中,并且,该存中,并且,该VACB指向文件视图被映射到系统缓指向文件视图被映射到系统缓存中的位置;存中的位置;p若该表项为空,则缓存管理器必须在系统缓存中找若该表项为空,则缓存管理器必须在系统缓存中找到一个空闲槽来映射所请求的视图到一个空闲槽来映射所请求的视图Windows缓存管理-缓存的数据结构-缓存的数据结构 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n出于空间优化的考虑,共享缓存映射包含了一个出于空间优化的考虑,共享缓存映射包含了一个VACB索引数组,其中含有索引数组,其中含有4个表项p由于每个由于每个VACB描述描述256KB,该索引数组最多可以,该索引数组最多可以描述描述1MB的文件p若文件超过若文件超过1MB,则在非换页内存池中分配一个单,则在非换页内存池中分配一个单独的独的VACB索引数组,其大小等于文件的大小除以索引数组,其大小等于文件的大小除以256KBØ将共享缓存映射指向该数组结构将共享缓存映射指向该数组结构Windows缓存管理-缓存的数据结构-缓存的数据结构 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n为进一步进行优化,若文件大小超过为进一步进行优化,若文件大小超过32MB,,p则从非换页内存池中分配的则从非换页内存池中分配的VACB索引数组组成索引数组组成稀稀疏的多级索引数组疏的多级索引数组((sparse multilevel index array),),此时,每个索引数组含有此时,每个索引数组含有128项。

项Ø可以根据以下公式计算文件的索引数组所需的级可以根据以下公式计算文件的索引数组所需的级数:数:(表示文件大小所需的二进制位数表示文件大小所需的二进制位数 – 18) / 7将公式的结果向上取整将公式的结果向上取整Windows缓存管理-缓存的数据结构-缓存的数据结构 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n一个多级一个多级VACB索引数组的例子索引数组的例子Windows缓存管理-缓存的数据结构-缓存的数据结构 南京理工大学计算机科学与技术学院南京理工大学计算机科学与技术学院n例子例子p若若32GB的稀疏文件中只有的稀疏文件中只有256KB被映射到了缓存的被映射到了缓存的虚拟地址空间,只需分配一个虚拟地址空间,只需分配一个VACB及及3级索引数组级索引数组Ø数组只有一个分支被映射;数组只有一个分支被映射;Ø而一个而一个32GB((235字节)的文件只需一个字节)的文件只需一个3级数组Windows缓存管理-缓存的数据结构-缓存的数据结构 。

下载提示
相似文档
正为您匹配相似的精品文档