浅尝硬盘分区表

【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)就这样,扩展分区的分区表信息就像一个链表一样,我们可以一步一步地遍历所有分区;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openjdk-7支持版本_长期支持对OpenJDK意味着什么?

openjdk-7支持版本Bruno Borges最近在推特上发布了一个有关OpenJDK的长期支持(LTS)的问题,这表明对它的真正含义仍有一些困惑。 在此博客文章中,我将解释不同部分如何组合在一起。 那么……谁说或在哪里说“ #OpenJDK 11”是LTS&…

android 安装卸载应用提醒_Android监听程序的安装和卸载

在android系统中,安装和卸载都会发送广播,当应用安装完成后系统会发android.intent.action.PACKAGE_ADDED广播。可以通过intent.getDataString()获得所安装的包名。当卸载程序时系统发android.intent.action.PACKAGE_REMOVED广播。同样intent.getDataStr…

常用函数式接口的学习

文章目录定义常用的函数式接口Supplier演示代码Consumeraccept 方法演示代码andThen 方法演示代码Predicatetest 方法and 方法演示代码or 方法negate 方法Functionapply 方法演示代码andThen 方法演示代码定义 有且仅有一个抽象方法的接口称之为“函数式接口”,但是…

如何创建虚拟硬盘 + os 读取硬盘参数代码

【0】README 0.1) 本文旨在演示如何利用 bximage 创建虚拟硬盘;0.2) 利用 os 读取硬盘参数, source code from orange’s implemention of a os , for complete code , please visit https://github.com/pacosonTang/Orange-s-OS…

内联脚本被视为是有害的_数据类被认为有害

内联脚本被视为是有害的这篇博客文章解释了从我参与的项目之一中删除Lombok项目的动机。 它反映了我的个人观点,并不妨碍特定的技术。 大约三年前,我认识了Project Lombok ,这是一个添加Java代码的库。 我从一开始就喜欢它,因为它…

win10可用空间变成未分配_教你两种方法有效利用Win10未分配的空间 - 易我科技...

Haley 于2020/08/24更新 磁盘分区管理摘要文中介绍了两种方法充分利用Windows10未分配空间,分别为1)格式化Win10未分配空间来创建新的分区,2)在分区上添加未分配空间。我的Win 10计算机上有一个大小99GB的未分配空间 :「我在Windows计算机上安装了两个硬…

selenium编写脚本_Selenium脚本编写技巧和窍门

selenium编写脚本如果您刚刚开始学习Selenium,则以下技巧和窍门将成为您的救星。 这些技巧和窍门具有您可能会忘记的所有基本知识,将帮助您记住所有这些。 您只需浏览一次,几秒钟后您便会了解所有内容。 让我们一一看一下所有的技巧和窍门。 …

div和div之间画横线_HTML如何在两个div标签中间画一条竖线

近日在画一个界面的时候,遇到一个需求:在界面当中画一条竖线,且这条竖线在高度上需要自动占满整个父div(即这条竖线的高度和两个div中较高的一个等高)。往常我们画一条横线直接用标签即可,当画一条竖线的时候发现找不到标签。在网…

静态类型/静态分派/动态分派/单分派/多分派

文章目录静态类型/实际类型方法解析静态分派动态单分派参考静态类型/实际类型 Human woman new Woman(); // Human就是静态类型,其实就是变量编译时类型,Woman就是实际类型 Man man new Man(); // 静态类型和实际类型都是Man方法解析 Class 文件的编…

jvm回收垃圾_没有垃圾回收的JVM

jvm回收垃圾JVM社区不断增加新的GC,最近又添加了一个新的GC,它被称为Epsilon ,是非常特殊的一个。 Epsilon仅分配内存,但不会回收任何内存。 看起来好像不执行任何垃圾回收的GC用途是什么。 这种类型的垃圾收集器有特殊用途&…

C打印函数printf的一种实现原理简要分析

【0】README 0.1)本文旨在对 printf 的 某一种 实现 原理进行分析,做了解之用;0.2) vsprintf 和 printf.c 的源码,参见 https://github.com/pacosonTang/dataStructure-algorithmAnalysis/tree/master/p309 【1】pr…

wireshark提取流量包中的文件_[技术]Wireshark抓取的数据包提取文件

0x00 简介本期主要会教大家如何从流量中还原出来文件。下面我将会用多种办法来讲解。使用系统:Kali Linux0x01 tcpxtract工具网络流量提取文件(方法1)Kali Linux默认没有安装该工具,需要自己安装安装命令:sudo apt install tcpxtract使用方法…

java设计模式适配器模式_Java中的适配器设计模式

java设计模式适配器模式适配器设计模式是一种结构设计模式 ,可以帮助我们连接到通过不同接口公开相似功能的旧版或第三方代码。 适配器的现实世界是我们用来将USB电缆连接到以太网端口的类比。 在设计一个面向对象的应用程序时,当我们的客户期望一个特…

技术路线的选择重要但不具有决定性

微软在技术上连续大动作,如果放在几年前,我相信微软粉丝们一定是欢声雷动,不过这次情况有点不太一样,在网上看到有人在抱怨微软技术更新速度太快而且四面出击,还有人扬言要改弦更张,投奔Linux或者Java阵营。…

nproc是什么意思_top/htop内容的含义

uptimeuptime命令显示了load avg,它其实是读取的/proc/uptime文件:/proc/uptime 文件cat /proc/uptime9592411.58 9566042.33第一个是系统启动了多久(单位s),第二个意思是系统启动以来,cpu idle花费的时间(单位s)。多核机器上&…

进程间通信(IPC)+进程加锁解锁

【0】README 0.1) source code and text description are from orange’s implemention of a os;0.2) for complete code , please visit https://github.com/pacosonTang/Orange-s-OS/tree/master/ipc_8 【1】看看,我们的进程代…

QA与测试到底有什么区别?

文章目录引言QA与测试的区别?QA、QC、QM的关系与区别?QA工作内容与职责引言 近期微信公众号后台有同学留言问: QA与测试的区别? QA、QC、QM的区别?以及QA的工作内容与职责。 针对这些问题我查阅了一些资料然后结合自…

java 进程运行时间_将Java类作为子进程运行

java 进程运行时间我本周需要将Java类(而不是jar)作为子进程运行。 更确切地说,我想从测试内部产生一个新进程,而不是直接在测试内部(进程内)运行它。 我不认为这是幻想或复杂的事情。 但是,这不…

划分vlan实验心得体会_思科:相同vlan,不同交换机之间的通信

实验拓扑如下:VPC 26 IP 23.1.1.3 24 VLAN20VPC 25 IP 12.1.1.2 24 VLAN10VPC1 IP 12.1.1.1 24 VLAN10VPC2 IP 23.1.1.2 24 VLAN20IOL交换机命名为SW1 先配置SW1的vlan10 和20检查SW1的vlan信息配置SW1的vlan10 和20检查SW2的vlan信息下一步将SW1和SW2连接的接口改为…

如何通过W3school学习JS/如何使用W3school的JS参考手册

文章目录学习JS对象DOM 对象HTML 对象JS 的常规类型教程学习 jQuery学习平台: W3school类似的学习平台: 菜鸟教程学习JS对象 DOM 对象 HTML 对象 JS 的常规类型 教程 学习 jQuery