MBR分区表研究

开学之前研究了一下MBR的分区表,总结一下。

下面是我用 sudo fdisk -l 得到的硬盘信息。

Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xcd79e58a

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      206847      102400    7  HPFS/NTFS/exFAT
/dev/sda2          206848   109068287    54430720    7  HPFS/NTFS/exFAT
/dev/sda3       109072382   625141759   258034689    f  W95 Ext'd (LBA)
/dev/sda5       109072384   213927935    52427776    7  HPFS/NTFS/exFAT
/dev/sda6       213929984   553836543   169953280    7  HPFS/NTFS/exFAT
/dev/sda7       553838592   617836543    31998976   83  Linux
/dev/sda8       617838592   625141759     3651584   82  Linux swap / Solaris

磁头,扇区,柱面数都知道了,这很好。

接着查看MBR的分区表, 从1beH到1feH是64个字节的分区表。

分区表含义请见: http://thestarman.pcministry.com/asm/mbr/PartTables.htm

          0011 2233 4455 6677 8899 aabb ccdd eeff
000001b0: cd10 ac3c 0075 f4c3 8ae5 79cd 0000 8020
000001c0: 2100 07df 130c 0008 0000 0020 0300 00df
000001d0: 140c 07fe ffff 0028 0300 0018 7d06 00fe
000001e0: ffff 0ffe ffff fe4f 8006 0298 c21e 0000
000001f0: 0000 0000 0000 0000 0000 0000 0000 55aa

下面对这两个得到的结果进行分析。 

第一个分区MBR显示

8020 2100 07df 130c 0008 0000 0020 0300

80H表示此分区是活动分区;

由202100H确定起始CHS: Head是 20H = 32, Sector是 100001b = 33, Cylinder是0。 起始扇区的LBA是 (0*255+32)*63+33-1 = 2048; (由CHS转换为LBA的公式:http://en.wikipedia.org/wiki/Logical_block_addressing

07H是分区类型描述符, 是NTFS; (Partition Type: http://en.wikipedia.org/wiki/Partition_type)

由df130c确定结束CHS, Head是 dfH = 223, Sector是 010011b = 19, Cylinder是 0cH = 12, 结束扇区的LBA是 (12*255+223)*63+19-1 = 206847;

起始扇区也可以由 00000800H = 2048 得到;

第一个分区的大小是 00032000H = 204800 个扇区, 验算一下: 2048+204800-1 = 206847。

再对比fdisk得到的结果:

我没有查到fdisk的Start和End的具体含义, 但是对比一下结果我猜就是起始扇区的LBA和结束扇区的LBA, Blocks是1KB的block的数量, 为102400, Id就是分区类型描述符, 也是7, System一栏有NTFS。

看一下分区大小的不同算法:

204800 * 512B = 100MB

102400 * 1024B = 100MB

两次得到的结果一样。

第二个分区MBR显示 

00df 140c 07fe ffff 0028 0300 0018 7d06

00H表示此分区不是活动分区;

由 df140cH 确定起始CHS: Head是 dfH = 223, Sector是 010100b = 20, Cylinder是 0cH = 12。 起始扇区的LBA是 (12*255+223)*63+20-1 = 206848;

07H是分区类型描述符, 是NTFS;

由 feffffH 确定不了结束CHS, 转向后面8个字节寻求帮助;

起始扇区也可以由 00032800H = 206848 得到;

第一个分区的大小是 067d1800H = 108861440 个扇区, 所以结束CHS的LBA是 206848 + 108861440 - 1 = 109068287。

再对比fdisk得到的结果:

Start和End都吻合, Blocks是 54430720, Id是7, System一栏有NTFS。

验算分区大小:

108861440 * 512B = 51.9GB

54430720 * 1024B = 51.9GB

两次得到的结果一样。

第三个分区MBR显示

00fe ffff 0ffe ffff fe4f 8006 0298 c21e

这也是一个不活动分区。

由 feffffH 确定不了起始CHS, 转向后面8个字节寻求帮助;

0fH是分区类型描述符, 是扩展分区;

由 feffffH 也确定不了结束CHS, 转向后面8个字节寻求帮助;

起始扇区LBA是 06804ffeH = 109072382, 大小是 1ec29802H = 516069378, 所以结束扇区的LBA是 109072382 + 516069378 - 1 = 625141759。

对比和fdisk的结果,

Start和End都吻合, Blocks是 258034689, Id是f, System一栏有W95 Ext'd (LBA)。

验算分区大小:

516069378 * 512B = 246.08GB

258034689 * 1024B = 246.08GB

两次得到的结果一样。

 

posted on 2012-08-28 20:30  buzzerrookie  阅读(1977)  评论(0编辑  收藏  举报

导航