2022年文件系统简要整理 .pdf
《2022年文件系统简要整理 .pdf》由会员分享,可在线阅读,更多相关《2022年文件系统简要整理 .pdf(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一物理磁盘结构:1.磁道:当磁盘的盘面旋转时。磁头保持在一个位置上。当盘面旋转一圈时。划过的一个圆就为磁道。一条磁道的储存量:一磁道= 63 个扇区。(通常情况)。2.扇区:磁道上被逻辑划分弧段相等的就为扇区,它的编号从1 开始,一扇区大小为512个字节。3.柱面:由一组重叠的盘面组成,每个盘面上都划分为相等的磁道,并从0 开始编号。具有相同编号组成的一个圆柱为柱面,柱面数=于一个盘面上的磁道数,对于每个盘面都有自己的磁头所以有CHS :(Clinder(柱面 ) Head (磁头)Sector(扇区) ),这就是一个寻址方式。物理磁盘结构图以下引用的函数均在WIN32 下二分区表1.主引导扇
2、区 (MBR)分区表的基本信息放在主引导扇区,主引导扇区的地址CHS=柱面0 , 磁头 0, 扇区 1.其大小为一扇区大小512 个字节。这里我把这512 个字节总结为下得一个结构体:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - #pragma pack(1) typedef struct InFoDisk UCHAR BootID; /80h 表示可启动分区,否则为0;对主分区有用;UCHAR SartHead ; /分区
3、的起始磁头号;USHORT SartSectorTrack ;/分区的起始扇区和磁道号UCHAR FileSystemID; /05H 或 0FH 为扩展分区, 06H 或 0EH 为 FAT16,0BH 或 0CH 为 FAT32 ,07 为 NTFS;UCHAR EndHead; /分区结束磁头号;USHORT EndSectorTrack; / 分区结束扇区和磁道号ULONG HeadSecor; /分区前的扇区;ULONG AllSector; /分区的总扇区;InFoDisk,*PInFoDisk; /* 位于磁盘的0 磁头 0 拄面 1 扇区;*/ #pragma pack(1)
4、typedef struct _System_Boot_Sector UCHAR BootCode0 x1be; /引导代码;InFoDisk InFoC; /C 分区的基本信息;InFoDisk InFoD; /D 分区的基本信息InFoDisk InFoE; /E 分区的基本信息一般不用为0;InFoDisk InFoF; /E 分区的基本信息一般不用为0;USHORT LoGo; /AA55; System_Boot_Sector,*PSystem_Boot_Sector; 从结构体可以看出偏移0 x1be 个字节就得到分区表的基本信息,在WINDOWS编程下这么找到:DWORD cbR
5、ead; System_Boot_Sector BootSectorData; HANDLE hFile=CreateFile(.PhysicalDrive0, GENERIC_WRITE|GENERIC_READ,FILE_SHARE_WRITE|1, 0, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0); ReadFile(hFile, & BootSectorData,0 x200 , &cbRead, NULL);/读的主引导扇区的数据。WriteFile(hFile, & BootSectorData,0 x200 , &cbRead, NU
6、LL);/向主引导扇区写数据。注意文件的指针;从 System_Boot_Sector.InFoDisk. HeadSecor ( 与第一分区 )可以知道主引导扇区到文件系统的引导扇区中间是相距System_Boot_Sector.InFoDisk. HeadSecor 个扇区。一般情况下大小为一磁道大小63 个扇区;由这里可见这63 个扇区除第一扇区被用来记录引导代码和基本分区表信息外,其他不用。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - - - -
7、- - - - - 一般可将我们的主引导扇区备份一份写到其中了某个扇区中以做后用,这里读写得注意文件指针的移动;使用BOOL SetFilePointerEx( HANDLE hFile ,/ 打开文件获得的句柄LARGE _INTEGERliDistanceToMove ,/ 移动多少个字节PLARGE _INTEGERlpNewFilePointer, / 做返回值用DWORD dwMoveMethod / starting point FILE_BEGIN ,FILE_CURRENT ,FILE_END ;); (一) 。从下面开始怎样找到一个文件的内容:1.文件系统引导扇区(file
8、system boot sector) (先说 FAT32)文件系统引导扇区是对整个分区做详细的描述,位置确定:这里假设为C 盘(也是系统的第一个分区) 。这里可以从System_Boot_Sector.InFoDisk. HeadSecor中得到只需要将当前文件指针做合适的移动,另一方法:HANDLE hFile=CreateFile(.c:, GENERIC_WRITE|GENERIC_READ, FILE_SHARE_WRITE|1, 0, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0); 根据这个打开的句柄用ReadFile 读出 512 个字
9、节。这512 字节我总结为以下结构:#pragma pack(1) typedef struct File_System_Fat32_Boot_Sector UCHAR HaedInFo0 x3; /3 个字节的跳转代码;UCHAR FileSystemASCII0 x8; /文件系统标志(ASCII 码) ; USHORT SizeSecor; /每扇区的字节数(硬盘一般为512) ;这里一个小技巧可以检查每扇区的道底有多少字节数;用 ReadFile(hFile, & BootSectorData,0 x200 , &cbRead, NULL);/读扇区的数据。cbRead 为返回值: 因
10、为读硬盘基本单位是扇区数。所以 cbRead 的大小就每扇区的字节的多少;UCHAR ClusterSecor; /每簇扇区数;USHORT ReservationsSecor; /保留扇区; /其 FA T 表紧跟在此之后;UCHAR FatTab; /fat 表的个数一般为 2;USHORT Dir; /根目录最多可容纳的目录项FAT32 不用为0,FAT12,16名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - 一般为 5
11、12;USHORT AllSecor; /整个分区的扇区总数小于 32MB 放在此;UCHAR Description;/ 介质描述符一般为0 xF8; USHORT FatTabSize; /FAT32 不用;每FAT 表的大小扇区数USHORT TrackSectorSize; / 每磁道扇区数;USHORT Head; /磁头数;ULONG HeadSecor; /分区前的扇区数;ULONG AllSector; /文件系统的总扇区;ULONG FA TSize; /FAT 表的扇区大小值;USHORT FatLoGo; /确定 FAT 表的工作方式bit7 设置为1 表示只有一份FAT
12、表是活动的USHORT Version; /版本号;ULONG BootDirStartCluster;/ 根目录起始簇号一般为 2;USHORT FSINFO; /FSINFO 所在扇区号;1 号;USHORT BackupSector; / 备份扇区号;(6 号扇区)UCHAR Reservations0 xC; UCHAR BIOSint; UCHAR Omitted0 x1b2; USHORT LoGo; /AA55; File_System_Fat32_Boot_Sector ,*PFile_System_Fat32_Boot_Sector;。重要的域ClusterSecor; /
13、为 簇 扇 区 数 , ReservationsSecor; / 保 留 扇 区 ; AllSector; / 文 件 系 统 的 总 扇 区BootDirStartCluster;/ 根目录起始簇号一般为 2;这里的 FSINFO 扇区(512 个字节)FAT32 文件增加的其主要记录偏移 (0 x1E8)4 字节空闲簇数接着为下一个可用簇(4 字节)。有时这里记录的不准只做参考。从文件系统引导扇区偏移6 个扇区就是本分区的文件系统引导扇区的备份区。(此分区的文件系统引导扇区遭到破坏。可从这里恢复)FAT 表与根目录:名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
14、- - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 11 页 - - - - - - - - - 1. FAT 表接下来就来到非常重要的域ReservationsSecor 和 BootDirStartCluster 根据 ReservationsSecor 域确定 FAT 表。 FAT32 下一般 2 个 FAT 表。第 2 个是对第一个的备份 (因为 FAT 表非常重要破坏之后可以从其2 中恢复过来)。 FAT32 记录什么重要的数据呢?其 FAT 表主要记录文件系统分配的簇。被文件怎么使用的记录图于下:单位以 4 字节为单位。我们可以把FAT
15、 表里面贮存的数据看作是一个ULONG 类型的数组大小由 (FATSize*512 )/4 得到, (刚初始化除了0 号和 1 号被写入数据,其他都为0)然而数组的下标值侧对应每一个簇(由文件系统分配好的簇号从 0 开始编号) 。 0 号簇和 1 号簇被系统做特需用途。设 FAT 表的数组为:ULONG FA TArray (FATSize*512 )/4;现在以一个文件为例:假设文件的大小要占3 个簇,从6 号簇开放数据:那 么相应 的 对应 有:FATArray5= 0X0FFFFFFF;FATArray0 x6=0 x7;FA TArray0 x7=0 x8; FATArray0 x8=
16、0X0FFFFFFF; 从数组中可以知道文件占6,7, 8 号簇。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 11 页 - - - - - - - - - 很显然记录的是下一个簇号。文件结束的记录很重要也就是说。文件结束的记录在应对的FAT表中的记录被0 x0FFFFFFF; 可见FATArray5 是另一个文件结束的标志;。还有就文件不一定是连续簇存放数据的,也可以从它的数组记录的值就可以知道,另外当某个簇存在坏扇区侧整个簇对FAT表相应的位置被记录为0 x0FFF
17、FFFF7;假设 0XF34 簇坏了即有FATArray0XF34=0 x0FFFFFFF7; 2.根目录其实 0 号和 1 号簇只是逻辑上的实际上是没有真的分配扇区的。所以找到 FAT 表的位置+FAT 表的大小 *2;就得到 2 号簇的位置; 由 BootDirStartCluster 域可以得知根目录的簇号,一般情况下为2 号簇,也就是FAT 表结束就是根目录的起始位置,在WIN32 下根目录被看做是一个文件来存储。所以大小并不固定,FAT 表会做相应的记录,所谓的根目录就 (比如: 我们点击WINDOWS下的 C 盘这时打开一个目录这个目录就为根目录)下面我开始说根目录的结构(在根目录
18、中(C 目录下有文件,有子目录。有的文件名或子目录名大于11 个字节也有小于11 个字节。所以这里就有(短文件名(11)之分) ); 1.短文件名 (下面是结构 ) #pragma pack(1) typedef struct Short_Directory_entry UCHAR Filename0 xb; / 文件名文件第一个ASCII 码,如果为0X00 表示未被使用。0 xE5 使用过,被删除UCHAR FileAttrib; 0 x01表示只读, 0 x02 隐藏, 0 x04 系统文件, 0 x08 卷标,长文件名目录项,0 x10 表示目录, 0 x20 表示存档。UCHAR O
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年文件系统简要整理 2022 文件系统 简要 整理
限制150内