NTFS解析

本文详细介绍了从MBR到NTFS文件系统的解析过程,包括分区表结构、NTFS引导扇区的具体字段含义及其如何帮助确定文件系统的关键参数。
据说NTFS是很复杂的文件系统, 想要解析一下, 看了很多资料, 但是也不是官方的. 为了备忘记了一下.第一部分:从MBR到NTFS 基于古老的bios的PC, 硬盘的第一个扇区是MBR. 基于新的EFI的有所不同, 还没有仔细研究. I386结构也就是下x86支持四个基本分区, 在MBR的offset 0x1bE, 0x1cE, 0x1DE, 0x1EE. 每个分区的数据结构如下: struct partition_dos { unsigned char boot_ind; /* 0x80 - active */ unsigned char head; /* starting head */ unsigned char sector; /* starting sector */ unsigned char cyl; /* starting cylinder */ unsigned char sys_ind; /* What partition type */ unsigned char end_head; /* end head */ unsigned char end_sector; /* end sector */ unsigned char end_cyl; /* end cylinder */ uint32_t dwRelativeSector; /* starting sector counting from 0 */ uint32_t dwNumberSectors; /* nr of sectors in partition */ }; 从这个数据结构就可以得到每个分区的起始和结束扇区数. 到了扇区的位置, 就可以得到某个分区的数据. 分区里的数据根据不同的文件系统有不同的组织方式. 一个sector描述了文件系统的属性. 一种文件系统和另一种文件系统的初始区别就在boot sector. 一个分区的boot sector描述了这个分区使用什么样的文件系统. 所有的boot sector都是512字节,有一些字节的定义是类似的, 有些是不同的.对于NTFS的定义如下: struct ntfs_boot_sector { uint8_t ignored[3]; /* 0x00 Boot strap short or near jump */ int8_t system_id[8]; /* 0x03 Name : NTFS */ uint16_t sector_size; /* 0x0B bytes per logical sector */ uint8_t sectors_per_cluster; /* 0x0D sectors/cluster */ uint16_t reserved; /* 0x0E reserved sectors = 0 */ uint8_t fats; /* 0x10 number of FATs = 0 */ uint8_t dir_entries[2]; /* 0x11 root directory entries = 0 */ uint8_t sectors[2]; /* 0x13 number of sectors = 0 */ uint8_t media; /* 0x15 media code (unused) */ uint16_t fat_length; /* 0x16 sectors/FAT = 0 */ uint16_t secs_track; /* 0x18 sectors per track */ uint16_t heads; /* 0x1A number of heads */ uint32_t hidden; /* 0x1C hidden sectors (unused) */ uint32_t total_sect; /* 0x20 number of sectors = 0 */ uint8_t physical_drive; /* 0x24 physical drive number */ uint8_t unused; /* 0x25 */ uint16_t reserved2; /* 0x26 usually 0x80 */ uint64_t sectors_nbr; /* 0x28 total sectors nbr */ uint64_t mft_lcn; /* 0x30 Cluster location of mft data.*/ uint64_t mftmirr_lcn; /* 0x38 Cluster location of copy of mft.*/ int8_t clusters_per_mft_record; /* 0x40 */ uint8_t reserved0[3]; /* zero */ int8_t clusters_per_index_record; /* 0x44 clusters per index block */ uint8_t reserved1[3]; /* zero */ uint64_t volume_serial_number; /* 0x48 Irrelevant (serial number). */ uint32_t checksum; /* 0x50 Boot sector checksum. */ uint8_t bootstrap[426]; /* 0x54 Irrelevant (boot up code). */ uint16_t marker; /* 0x1FE */ } __attribute__ ((__packed__)); 从这些512字节可以得到一些关键的信息. 例如每个sector的字节数, 每个cluster的sector数. 一共多少sector, mft的位置sector. 有了这些信息就可以去解析MFT了. 参考代码: TestDisk----GNU Project Udelete ----Code Project www.ntfs.com http://blog.hexun.com/glaciersl/1548787/viewarticle.html
解析NTFS底层结构 一、NTFS系统结构 NTFS是Windows NT引入的新型文件系统,如果您是一位熟悉FAT磁盘格式的专业人士,您可能会觉得NTFS系统的思想蹩脚而晦涩,如果您对FAT格式一无所知,那么恭喜您,您会更快的了解这种更有效率的磁盘格式。 NTFS的结构复杂,内容繁多,笔者仅对NTFS卷上的底层结构做分析,并提供卷上数据删除的特征状态供大家参考。 现在,我们首先来建立了解NTFS需要的基本概念。 1.0基本结构及基本概念 在NTFS中,文件以簇的形式分配。最小的单位为扇区,N个扇区为一簇。其中,N的值可以通过BPB(引导扇区)读出(以下会详细介绍)。 1.0.1卷与簇 卷大小(分区大小) 每簇的扇区 缺省的簇大小 小于等于512MB 1 512字节 513MB~1024MB(1GB) 2 1024字节(1KB) 1025MB~2048MB(2GB) 4 2048字节(2KB) 大于等于2049MB 8 4KB 表1 卷与簇的关系 从上面可以看出,也就是说不管驱动器多大NTFS簇的大小不会超过4KB。 1.0.2 NTFS的基本数据结构 NTFS的数据大体上可分为4个部分 (1) Partition boot sector(引导扇区,又称BPB),此部分为所有磁盘格式都共有,占用一个扇区,但是具体的内容当然各不相同(见表3)。 (2) Master File Table(主文件列表,MFT),它是对卷上所有文件的记录,每一个文件对应一个记录项,理论上占用该卷12%的空间。 (3) System files(系统文件),NTFS系统一共有16个系统文件,和8个保留文件。 (4) File area(数据区),留给用户的空间。 Partition boot sector 引导扇区 Master File Table 主文件列表 System files 系统文件 File area 用户文件区(数据区) 表2 NTFS的磁盘分配情况
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值