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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解析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的磁盘分配情况

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值