2015年10月4日星期日

浅尝硬盘分区表 - PacosonSWJTU

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
浅尝硬盘分区表 - PacosonSWJTU  阅读原文»

【0】README

0.1) text description from orange's implemention of a os;
0.2) there are a number of analysis and attention proves to be essence of this page, I think;
0.3)Conclusion about hd partition table

  • C1)存在一个硬盘的情况下:

    • C1.1) 1~4这4个数字 为 主引导扇区 中的分区表项所用(主引导扇区分区表可以储存最多1个扩展分区 和 不大于4个 的主分区,总数量==4), 从5 开始依次表示逻辑分区;(主引导扇区是硬盘的第一个扇区,而其他引导扇区是各个分区的第一个扇区)
    • C1.2)主设备号告诉os 应该用哪个驱动程序来处理,次设备号告诉driver 这是具体哪个设备(分区);
  • C2)存在两块硬盘的情况:

    • C2.1)主盘是hd0,次设备号是0,它的主引导扇区分区表对应的四个分区分别是 hd1、hd2、hd3、hd4;
    • C2.2)每个扩展分区中最多有16 个逻辑分区,逻辑分区的次设备号以hd1a 为基准递增的;
    • C2.3)这种编号的好处是, 给定一个次设备号可以很容易计算出它是主分区还是扩展分区,或者是哪个扩展分区的哪个逻辑分区;
  • C3)百度总结:

    • C3.1) 一个硬盘主分区至少有1个,最多4个,扩展分区可以没有,最多1个。且主分区+扩展分区总共不能超过4个。逻辑分区可以有若干个;
    • C3.2) MBR(主引导记录)的分区表(主分区表)只能存放4个分区,如果要分更多的分区的话就要一个扩展分区表(EBR),扩展分区表放在一个系统ID为0x05的主分区上,这个主分区就是扩展分区,扩展分区能可以分若干个分区,每个分区都是个逻辑分区;


      【1】intro to hard disk partioning tab

  • 1.1) 硬盘分区表其实就是一个数据结构,数组的每个成员是一个 16字节的结构体;这个结构体数组位于引导扇区的1BEh处,共有四个成员――因为IBM 当时觉得一台PC最多会装四个os;
  • 1.2) 现在我们的计算机中 每块硬盘经常划分为不止四个分区, 这是因为 每个主分区可以进一步分成多个逻辑分区;
    这里写图片描述

  • 1.3) 对硬盘进行分区操作,如何创建虚拟硬盘,参见http://blog.csdn.net/PacosonSWJTU/article/details/48846887
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

如上图所示,我们把一个80M 的硬盘映像分成了一个主分区和一个扩展分区,然后扩展分区又分成了 五个逻辑分区;我们的orange's os 安装在 第一个逻辑分区上(标有 '*' 号);


【2】我们实际看一下分区表是什么样子,用二进制查看器看一下引导扇区:

这里写图片描述

  • Alert):

    • A1)要知道,分区表就是个结构体数组, 共有四个成员,每个成员16个字节,那分区表结构体数组共占64字节,也即是除外引导扇区标志 0xAA55 后 的 最后64字节了;
    • A2)这个分区表结构体数组 存在于 引导扇区中除开 0xAA55 后的最后64个字节;
      这里写图片描述
      这里写图片描述

      第一个分区:00 ,01 ,01 ,00 ,83 ,0F ,3F ,13 ,3F 00 00 00 ,81 4E 00 00
      第二个分区:00 ,00 ,01 ,14 ,05 ,0F ,3F ,A1 ,C0 4E 00 00 ,20 2F 02 00

    这里写图片描述


    【3】利用引导扇区中记录的扩展分区的起始字节(0x4EC0 * 512 = 0x9D8000),我们来查看扩展分区的信息:

    Attention):扩展分区的起始字节,也即是扩展分区的第一个逻辑分区的起始字节;
    这里写图片描述

    第一个分区:80 ,01 ,01 ,14 ,99 ,0F ,3F ,3B ,3F 00 00 00 ,41 9D 00 00
    第二个分区:00 ,00 ,01 ,3C ,05 ,0F ,3F ,59 ,80 9D 00 00 ,20 76 00 00
    这里写图片描述

3.1)对上表的分析-Analysis:

  • A1)当前扩展分区的第一个分区的起始扇区LBA 是0x3F,这个是相对于扩展分区基地址的LBA,它的真正LBA 是 4EC0h + 3Fh = 4EFFh;
  • A2)当前扩展分区的第二个分区的分区类型是 0x05,可知它又是一个扩展分区,起始扇区LBA 为 4EC0h + 9D80h = EC40h,字节偏移为 EC40h * 512 = 1D88000h,我们转到该起始字节;

3.2)利用上述扩展分区的第一个逻辑分区的分区表数据结构 记录的嵌套扩展分区的起始字节(EC40h * 512 = 1D88000h),我们来查看嵌套扩展分区的信息:
(因为,扩展分区中的第一个逻辑分区的分区表记录着 另一个扩展分区的起始扇区,所以我们把这种扩展分区 叫做 嵌套扩展分区)
这里写图片描述

第一个分区:00 ,01 ,01 ,3C ,83 ,0F ,3F ,59 ,3F 00 00 00 ,E1 75 00 00
第二个分区:00 ,00 ,01 ,5A ,05 ,0F ,3F ,83 ,A0 13 01 00 ,60 A5 00 00

这里写图片描述

3.3)对上表的分析-Analysis:

  • A1)从分区类型值可以看出(0x05),在这个分区中, 又包含了一个普通分区和一个扩展分区,你可能一下子明白了,多个逻辑分区是由嵌套来实现的;
  • A2)一个扩展分区包含一个普通分区的同时, 又可以嵌套一个扩展分区;
  • A3)当前扩展分区的第一个分区的起始扇区LBA 是0x3F,这个是相对于扩展分区基地址的LBA,它的真正LBA 是 EC40h + 3Fh = EC7Fh;
  • A4)当前扩展分区的第二个分区的分区类型是 0x05,可知它又是一个扩展分区,起始扇区LBA 为 4EC0h + 0x113A0h = 16260h,字节偏移为 16260h * 51与2 = 2C4C000h,我们转到该起始字节;

Attention)为什么 第一个分区的 起始扇区LBA 最后要加上 EC40h, 而第二个分区的 起始扇区LBA 最后要加上 4EC0h 呢?

  • A1)这里需要留意一点, 前一个表项(当前扩展分区的第一个分区)中的 起始扇区LBA 是相对于当前扩展分区的,而后一个表项(当前扩展分区的第二个分区)中的起始扇区――也就是下一个扩展分区的起始扇区――是相对于硬盘主引导扇区所指明的扩展分区的起始扇区的;
  • A2)很显然,当前扩展分区的第一个分区(前一个表项)的起始扇区LBA是相对于 当前扩展分区,而当前扩展分区的基扇区号为 EC40,当然其要 加上 EC40了;
  • A3)还有,当前扩展分区的第二个分区(后一个表项)的起始扇区LBA是相对于 硬盘主引导扇区所指明的扩展分区的起始扇区而不是 当前扩展分区基扇区号,而引导扇区记录的扩展分区起始扇区为 4EC0,当然其要 加上 4EC0了(表a所示);
  • A4)还有一个重要问题就是,为什么第二个分区表示的是扩展分区,因为我们通过它的分区类型 为 0x05,看出来的;
  • A5)就这样,扩展分区的分区表信息就像一个链表一样,我们可以一步一步地遍历所有分区;

本文链接:浅尝硬盘分区表,转载请注明。

上周热点回顾(9.28-10.4) - 博客园团队  阅读原文»

热点随笔:

· 【移动前端开发实践】从无到有(统计、请求、MVC、模块化)H5开发须知叶小钗
· 从头开始做一个OA项目(一) 引言Rocky Ren
· 逆游的鱼stoneniqiu
· 跟我一起写操作系统(一)——10分钟写个操作系统lucasysfeng
· 从头开始做一个OA项目(二) 搭建架构Rocky Ren
· 离职有感(CVTE,创业公司,求职...)yanshanLove
· Webpack+React+ES6开发模式入门指南大额_skylar
· .NET开源进行时:消除误解、努力前行(本文首发于《程序员》2015第10A期的原始版本)张善友
· .NET基础拾遗(5)多线程开发基础Edison Chou
· 架构之路(四):测试驱动自由飞
· 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度Rector
· 【php爬虫】百万级别知乎用户数据爬取与分析Aintnot

热点新闻:

· 为什么不能实现永久性流量不清零?只是60天?
· 北京工商局立案调查小米公司虚假宣传
· 马云:人家都说我丑 我只是长得比较独特罢了
· 谷歌迎来17周岁生日:早期公司照片曝光
· 江苏一28岁农民要见马云:比“农村淘宝”思路好
· NASA宣布在火星上发现液态水存在 具有不同凡响意义
· 这个男人抢注到了Google.com,虽然只拥有了它一分钟
· 颠覆血检的31岁女首富:我会一遍遍重建公司直到成功
· 雷军称小米4c比iPhone 6s轻|网友:还不是因为塑料
· 把iPhone 6s和6s Plus浸泡在水中48小时之后……
· 华为为什么能成为全球最有价值的IT品牌?
· 预测:NASA今晚最有可能揭晓的火星谜团


本文链接:上周热点回顾(9.28-10.4),转载请注明。

阅读更多内容

没有评论:

发表评论