精华内容
下载资源
问答
  • MBR分区表

    2016-01-05 10:32:14
    mbr,gpt是分区表,不是分区格式,跟nfts两回事。  一块硬盘接驳主机之后,它的首要任务建立分区列表,分区列表有MBR和GPT两种,其中MBR分区列表支持最大2TB硬盘,GPT分区列表支持最大128PB(1PB=1024TB)。  MBR...

    mbr,gpt是分区表,不是分区格式,跟nfts两回事。

     一块硬盘接驳主机之后,它的首要任务建立分区列表,分区列表有MBR和GPT两种,其中MBR分区列表支持最大2TB硬盘,GPT分区列表支持最大128PB(1PB=1024TB)。

       MBR(Master Boot Record):即硬盘的主引导记录分区列表,在主引导扇区,位于硬盘的cylinder 0, head 0, sector 1 (Sector是从1开始的)。

     GPT(GUID Partition Table):即全局唯一标识分区列表,是一个物理硬盘的分区结构。它用来替代BIOS中的主引导记录分区表(MBR)。

    传统BIOS主要支持MBR引导,UEFI则是取代传统BIOS,它加入了对新硬件的支持,其中就有2TB以上硬盘。

      UEFI(Unified Extensible Firmware Interface):全称“统一的可扩展固件接口”, 是一种详细描述全新类型接口的标准。这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上,从而使开机程序化繁为简,节省时间。



    MBR分区表只能识别磁盘前面的2.2TB左右的空间,对于后面的多余空间只能浪费掉了,而对于单盘4TB的磁盘,只能利用一半的容量。因此,才有了GPT(全局唯一标识分区表)

    除此以外,MBR分区表只能支持4个主分区或者3主分区+1扩展分区(包含随意数目的逻辑分区),而GPT在Windows下面可以支持多达128个主分区。



    MBR分区表:

    在传统硬盘分区模式中,引导扇区是每个分区(Partition)的第一扇区,而主引导扇区是硬盘的第一扇区。它由三个部分组成,主引导记录MBR、硬盘分区表DPT和硬盘有效标志。在总共512字节的主引导扇区里MBR占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为55AA。

    一个扇区的硬盘主引导记录MBR由4个部分组成。

    •主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序。

    •出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。

    •分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。

    •结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA,如果该标志错误系统就不能启动。

    GPT分区表:

    GPT的分区信息是在分区中,而不象MBR一样在主引导扇区,为保护GPT不受MBR类磁盘管理软件的危害,GPT在主引导扇区建立了一个保护分区(Protective MBR)的MBR分区表(此分区并不必要),这种分区的类型标识为0xEE,这个保护分区的大小在Windows下为128MB,Mac OS X下为200MB,在Window磁盘管理器里名为GPT保护分区,可让MBR类磁盘管理软件把GPT看成一个未知格式的分区,而不是错误地当成一个未分区的磁盘。

    另外,为了保护分区表,GPT的分区信息在每个分区的头部和尾部各保存了一份,以便分区表丢失以后进行恢复。

    对于基于x86/64的Windows想要从GPT磁盘启动,主板的芯片组必须支持UEFI(这是强制性的,但是如果仅把GPT用作数据盘则无此限制),例如Win8/Win8.1原生支持从UEFI引导的GPT分区表上启动,大多数预装Win8系统的电脑也逐渐采用了GPT分区表。至于如何判断主板芯片组是否支持UEFI,一般可以查阅主板说明书或者厂商的网址,也可以通过查看BIOS设置里面是否有UEFI字样。




    主引导记录中包含了硬盘的一系列参数和一段引导程序。引导程序主要是用来在系统硬件自检完后引导具有激活标志的分区上的操作系统。它执行到最后的是一条JMP指令跳到操作系统的引导程序去。这里往往是引导型病毒的注入点,也是各种多系统引导程序的注入点。但是由于引导程序本身完成的功能比较简单,所以我们可以完全地判断该引导程序的合法性(看JMP指令的合法性),因而也易于修复



    mbr就位于硬盘0磁头0磁道1扇区中的前446个字节,接下来就是硬盘分区表.类似PPD等分区表软件可以来保存分区表,那么,mbr文件也会被保存进去的.



    电脑硬盘在分区的时候  分为两个区 一个叫做主分区,一个叫做扩展分区  主分区就是我们平时用的系统盘,也就是C盘  而D E F盘呢 则是叫做扩展分区上的逻辑分区  所以建立分区的时候 必定是先建立主分区,然后扩展,然后再建立逻辑分区  删除的时候也是先删除逻辑分区才能删除扩展分区  补充回答:不一定非要安装在C盘,但是C盘是最好的选择,如果你要安装双系统的话,就可以从其他盘启动了 又两个启动选项
    

    展开全文
  • MBR分区表分析

    千次阅读 2016-03-03 19:49:21
    先写一下MBR分区表的分析,等有空再写一下构建方法(也就是分区软件的原理)以及GPT分区表的分析与构建,我就不写MBR的定义什么的百科上都有的东西了,来读这篇文章,MBR分区表是什么都不清楚的就出门左转吧。...


    每次总想写点东西,但又懒得打字。先写一下MBR分区表的分析,等有空再写一下构建方法(也就是分区软件的原理)以及GPT分区表的分析与构建,我就不写MBR的定义什么的百科上都有的东西了,来读这篇文章,MBR分区表是什么都不清楚的就出门左转吧。。。MBR分区表分为两种,一种有扩展分区,一种没有。


    没有扩展分区的比较简单,最多就支持4个分区,硬盘的第零扇区(也可以叫第一扇区,你开心就好),该扇区的名称也叫MBR(主引导记录),通常每个扇区512字节,这个扇区前446(0x1BE)字节是用来引导系统的代码,在Windows下主要是用来加载系统分区中的Leader程序,然后跳转到Leader去执行,这不是重点。重点是后面这512 - 446 = 66 字节,最后两个字节是0x55、0xAA固件用来判断MBR是否有效的标识。剩下447-510这64个字节就是分区表了,MBR分区表定义每项16个字节,64个字节也就是最多4项,每项的定义如下:

    typedef struct tagMBR_PTITEM
    {
    /*00*/	UCHAR	byState;				//分区状态, 0 = 未激活, 0x80 = 激活 
    /*01*/	UCHAR	byBeginHead;			//分区起始磁头号
    /*02*/	USHORT	wBeginSC;				//分区起始扇区和柱面号, 底字节的低6位为扇区号, 高2位为柱面号的第 9,10 位, 高字节为柱面号的低 8 位
    /*04*/	UCHAR	byFSID;					//分区类型, 如 0x0B = FAT32, 0x83 = Linux 等, 00 表示此项未用
    /*05*/	UCHAR	byEndHead;				//分区结束磁头号
    /*06*/	USHORT	wEndSC;					//分区结束扇区和柱面号
    /*08*/	ULONG	dwBeginSector;			//在线性寻址方式下的分区相对扇区地址
    /*012*/	ULONG	dwSectors;				//分区大小 (总扇区数)
    /*16*/
    } MBR_PTITEM,FAR * LPMBR_PTITEM;		//磁盘的分区信息

    所以想要分区只有一个主分区表的最简单,直接读出硬盘的第零扇区,然后从446往后格式化64个字节就行了,如果byFSID为0就不要再往后分析了,当某一项FsID为0的时候操作系统就认为该项未使用,即使偏移和大小都设置了


    第二种就是带扩展分区的,这种包含第一种,它是由一个主分区表已经若干子分区表构成。分析步骤是,首先按照第一种分析第零扇区的主分区表,当读到某一项分区的FsID为0x0F或者0x05时则认为这项表示一个扩展分区表,它的起始位置表示这个扩展分区表的位置,在该位置上的结构跟第0扇区一样,只是没有了代码区域,也就是前446字节不使用,后面就是扩展分区表(为了方便区分我们叫他EBR1),MBR协议规定每个扩展分区表只使用前两项,第一项表示一个扩展分区,第二项要么不使用,要么指向下一个扩展分区表的起始位置,对这丫就是一链表,只不过不是在内存里,而是在硬盘上。但是注意,该处记录的扇区偏移是相对当前位置的这个扩展分区表的位置,这个设定很坑,后面的设定更坑。接着我们分析第一项得到了一个分区位置,然后我们分析第二项,假设第二项被使用了,我们得到分区类型是0x0F或0X05,我们去读取记录的偏移加上当前偏移的位置,会得到下一个分区表(为了方便区分我们叫他EBR2),第一项同样是一个分区,该项记录的分区偏移是基于EBR2,第二项同样如果使用表示下一个扩展分区表的起始位置,注意,最坑人的地方在这,这个偏移是基于EBR1的偏移并不是EBR2,后面所有的扩展分区项都是基于EBR1的偏移。

    展开全文
  • MBR分区表与GPT分区表的关系 与支持最大卷为2 TB(Terabytes)并且每个磁盘最多有4个主分区(或3个主分区,1个扩展分区和无限制的逻辑驱动器)的MBR磁盘分区的样式相比,GPT磁盘分区样式支持最大卷为18 EB...

     

     

     

    rb用于win平台
    gpt主要用于mac(苹果),
    MBR分区表与GPT分区表的关系
    与支持最大卷为2 TB(Terabytes)并且每个磁盘最多有4个主分区(或3个主分区,1个扩展分区和无限制的逻辑驱动器)的MBR磁盘分区的样式相比,GPT磁盘分区样式支持最大卷为18 EB(Exabytes)并且每磁盘的分区数没有上限,只受到操作系统限制(由于分区表本身需要占用一定空间,最初规划硬盘分区时,留给分区表的空间决定了最多可以有多少个分区,IA-64版Windows限制最多有128个分区,这也是EFI标准规定的分区表的最小尺寸)。与MBR分区的磁盘不同,至关重要的平台操作数据位于分区,而不是位于非分区或隐藏扇区。另外,GPT分区磁盘有备份分区表来提高分区数据结构的完整性/* from: http://my.oschina.net/lintur/blog/31954 */

    摘要: Windows 2008磁盘管理器中,在磁盘标签处右击鼠标,随磁盘属性的不同会出现“转换到动态磁盘”,“转换到基本磁盘”“转换成GPT磁盘”,“转换成MBR磁盘”等选项,在此做简单介绍。部分资料参照网络上的资源。

    注:①希捷硬盘可以使用DiscWizard软件,目前是V13版本,可以从这里下载该软件。http://www.seagate.com/staticfiles/support/discwizard/DiscWizardSetup-14355.en.exe

    ②日立硬盘可以使用Hitachi GPT Disk Manager软件,可以从这里下载该软件。http://www.paragon-software.com/cs/hitachi/

    ③华硕主板可以使用Disk Unlocker软件,可以到华硕官网下载。


    基本磁盘与动态磁盘
    磁盘的使用方式可以分为两类:一类是“基本磁盘”。基本磁盘非常常见,我们平时使用的磁盘类型基本上都是“基本磁盘”。“基本磁盘”受26个英文字母的限制,也就是说磁盘的盘符只能是26个英文字母中的一个。因为A、B已经被软驱占用,实际上磁盘可用的盘符只有C~Z 24个。另外,在“基本磁盘”上只能建立四个主分区(注意是主分区,而不是扩展分区);另一种磁盘类型是“动态磁盘”。“动态磁盘”不受26个英文字母的限制,它是用“卷”来命名的。“动态磁盘”的最大优点是可以将磁盘容量扩展到非邻近的磁盘空间。
    动态硬盘,是指在磁盘管理器中将本地硬盘升级得来的。动态磁盘与基本磁盘相比,最大的不同就是不再采用以前的分区方式,而是叫做卷集(Volume),卷集分为简单卷、跨区卷、带区卷、镜像卷、RAID-5 卷。基本磁盘和动态磁盘相比,有以下区别:
    1、卷集或分区数量。动态磁盘在一个硬盘上可创建的卷集个数没有限制。而基本磁盘在一个硬盘上只能分最多四个主分区。
    2、磁盘空间管理。动态磁盘可以把不同磁盘的分区创建成一个卷集,并且这些分区可以是非邻接的,这样的大小就是几个磁盘分区的总大小。基本磁盘则不能跨硬盘分区并且要求分区必须是连续的空间,每个分区的容量最大只能是单个硬盘的最大容量,存取速度和单个硬盘相比也没有提升。
    3、磁盘容量大小管理。动态磁盘允许我们在不重新启动机器的情况下调整动态磁盘大小,而且不会丢失和损坏已有的数据。而基本磁盘的分区一旦创建,就无法更改容量大小,除非借助于第三方磁盘工具软件,比如PQ Magic。
    4、磁盘配置信息管理和容错。动态磁盘将磁盘配置信息放在磁盘中,如果是RAID容错系统会被复制到 其他动态磁盘上,这样可以利用RAID-1的容错功能,如果某个硬盘损坏,系统将自动调用另一个硬盘的数据,保持数据的完整性。而基本磁盘将配置信息存放在引导区,没有容错功能。
    基本磁盘转换为动态磁盘可以直接进行,但是该过程是不可逆的。要想转回基本磁盘,只有把所有数据全部拷出,然后删除硬盘所有分区后才能转回去。

    GPT磁盘与MBR磁盘
    GPT(Globally Unique Identifier Partition Table Format)一种由基于 Itanium 计算机中的可扩展固件接口 (EFI) 使用的磁盘分区架构。与主启动记录 (MBR) 分区方法相比,GPT 具有更多的优点,因为它允许每个磁盘有多达 128 个分区,支持高达 18 千兆兆字节的卷大小,允许将主磁盘分区表和备份磁盘分区表用于冗余,还支持唯一的磁盘和分区 ID (GUID)。
    与支持最大卷为 2 TB (terabytes) 并且与每个磁盘最多有 4 个主分区(或 3 个主分区,1 个扩展分区和无限制的逻辑驱动器)的主启动记录 (MBR) 磁盘分区的样式相比,GUID 分区表 (GPT) 磁盘分区样式支持最大卷为 18 EB (exabytes) 并且每磁盘最多有 128 个分区。与 MBR 分区的磁盘不同,至关重要的平台操作数据位于分区,而不是位于非分区或隐藏扇区。另外,GPT 分区磁盘有多余的主要及备份分区表来提高分区数据结构的完整性。
    在运行带有 Service Pack 1 (SP1) 的 Windows Server 2003 的基于 x86 的计算机和基于 x64 的计算机上,操作系统必须驻留在 MBR 磁盘上。其他的硬盘可以是 MBR 或 GPT。
    在基于 Itanium 的计算机上,操作系统加载程序和启动分区必须驻留在 GPT 磁盘上。其他的硬盘可以是 MBR 或 GPT。
    在单个动态磁盘组中既可以有 MBR,也可以有 GPT 磁盘。也使用将基本 GPT 和 MBR 磁盘的混合,但它们不是磁盘组的一部分。可以同时使用 MBR 和 GPT 磁盘来创建镜像卷、带区卷、跨区卷和 RAID-5 卷,但是 MBR 的柱面对齐的限制可能会使得创建镜像卷有困难。通常可以将 MBR 的磁盘镜像到 GPT 磁盘上,从而避免柱面对齐的问题。可以将 MBR 磁盘转换为 GPT 磁盘,并且只有在磁盘为空的情况下,才可以将 GPT 磁盘转换为 MBR 磁盘。否则数据将发生丢失!!!
    不能在可移动媒体,或者在与群集服务使用的共享 SCSI 或 Fibre Channel 总线连接的群集磁盘上使用 GPT 分区样式

    MBR,全称为Master Boot Record,即硬盘的主引导记录。
    为了便于理解,一般将MBR分为广义和狭义两种:广义的MBR包含整个扇区(引导程序、分区表及分隔标识),也就是上面所说的主引导记录;而狭义的MBR仅指引导程序而言。
    硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT和硬盘有效标志(55AA)。在总共512字节的主引导扇区里主引导程序(boot loader)占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为55AA。
    MBR是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它,但可以通过命令来修改和重写,如在minix3里面,可以用命令:installboot -m /dev/c0d0 /usr/mdec/masterboot来把masterboot这个小程序写到mbr里面,masterboot通常用汇编语言来编写。我们也可以用ROM-BIOS中提供的INT13H的2号功能来读出该扇区的内容,也可用软件工具Norton8.0中的DISKEDIT.EXE来读取。
    用INT13H的读磁盘扇区功能的调用参数如下:
    入口参数:AH=2 (指定功能号)
    AL=要读取的扇区数
    DL=磁盘号(0、1-软盘;80、81-硬盘)
    DH=磁头号
    CL高2位+CH=柱面号
    CL低6位=扇区号
    CS:BX=存放读取数据的内存缓冲地址
    出口参数:CS:BX=读取数据存放地址
    错误信息:如果出错CF=1 AH=错误代码
    用DEBUG读取位于硬盘0柱面、0磁头、1扇区的操作如下:
    A>DEBUG
    -A 100
    XXXX:XXXX MOV AX,0201 (用功能号2读1个扇区)
    XXXX:XXXX MOV BX,1000 (把读出的数据放入缓冲区的地址为CS:1000)
    XXXX:XXXX MOV CX,0001 (读0柱面,1扇区)
    XXXX:XXXX MOV DX,0080 (指定第一物理盘的0磁头)
    XXXX:XXXX INT 13
    XXXX:XXXX INT 3
    XXXX:XXXX (按回车键)
    -G=100 (执行以上程序段)
    -D 1000 11FF (显示512字节的MBR内容)
    在windows操作系统下,例如xp,2003,Vista,windows7,有微软提供的接口直接读写mbr;
    FILE * fd=fopen("\\\\.\\PHYSICALDRIVE0","rb+");
    char buffer[512];
    fread(buffer,512,1,fd);
    //then you can edit buffer[512] as your wish......
    fseek(fd,0,SEEK_SET); //很重要
    fwrite(buffer,512,1,fd); //把修改后的MBR写入到你的机器
    fclose(fd); //大功告成
    MBR组成
    一个扇区的硬盘主引导记录MBR由如图6-15所示的4个部分组成。
    ·主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序。
    ·出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。
    ·分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。
    ·结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA,如果该标志错误系统就不能启动。

    补充知识:EFI(可扩展固件接口)
    可扩展固件接口(英文名Extensible Firmware Interface 或EFI)是由英特尔,一个主导个人电脑技术研发的公司推出的一种在未来的类PC的电脑系统中替代BIOS的升级方案。BIOS技术的兴起源于IBM PC/AT机器的流行以及第一台由康柏公司研制生产的“克隆”PC。在PC启动的过程中,BIOS担负着初始化硬件,检测硬件功能,以及引导操作系统的责任,在早期,BIOS还提供一套运行时的服务程序给操作系统及应用程序使用。BIOS程序存放于一个掉电后内容不会丢失的只读存储器中,系统加电时处理器的第一条指令的地址会被定位到BIOS的存储器中,便于使初始化程序得到执行。

    EFI的产生

    众所周知,英特尔在近二十年来引领以x86系列处理器为基础的PC技术潮流,它的产品如CPU,芯片组等在PC生产线中占据绝对领导的位置。因此,不少人认为这一举动显示了英特尔公司欲染指固件产品市场的野心。事实上,EFI技术源于英特尔安腾处理器(Itanium)平台的推出。安腾处理器是英特尔瞄准服务器高端市场投入近十年研发力量设计产生的与x86系列完全不同的64位新架构。在x86系列处理器进入32位的时代,由于兼容性的原因,新的处理器(i80386)保留了16位的运行方式(实模式),此后多次处理器的升级换代都保留了这种运行方式。甚至在含64位扩展技术的至强系列处理器中,处理器加电启动时仍然会切换到16位的实模式下运行。英特尔将这种情况归咎于BIOS技术的发展缓慢。自从PC兼容机厂商通过净室的方式复制出第一套BIOS源程序,BIOS就以16位汇编代码,寄存器参数调用方式,静态链接,以及1MB以下内存固定编址的形式存在了十几年。虽然由于各大BIOS厂商近年来的努力,有许多新元素添加到产品中,如PnP BIOS,ACPI,传统USB设备支持等等,但BIOS的根本性质没有得到任何改变。这迫使英特尔在开发更新的处理器时,都必须考虑加进使效能大大降低的兼容模式。有人曾打了一个比喻:这就像保时捷新一代的全自动档跑车被人生套上去一个蹩脚的挂档器。
    然而,安腾处理器并没有这样的顾虑,它是一个新生的处理器架构,系统固件和操作系统之间的接口都可以完全重新定义。并且这一次,英特尔将其定义为一个可扩展的,标准化的固件接口规范,不同于传统BIOS的固定的,缺乏文档的,完全基于经验和晦涩约定的一个事实标准。基于EFI的第一套系统产品的出现至今已经有五年的时间,如今,英特尔试图将成功运用在高端服务器上的技术推广到市场占有率更有优势的PC产品线中,并承诺在2006年间会投入全力的技术支持。

    比较EFI和BIOS

    一个显著的区别就是EFI是用模块化,C语言风格的参数堆栈传递方式,动态链接的形式构建的系统,较BIOS而言更易于实现,容错和纠错特性更强,缩短了系统研发的时间。它运行于32位或64位模式,乃至未来增强的处理器模式下,突破传统16位代码的寻址能力,达到处理器的最大寻址。它利用加载EFI驱动的形式,识别及操作硬件,不同于BIOS利用挂载实模式中断的方式增加硬件功能。后者必须将一段类似于驱动的16位代码,放置在固定的0x000C0000至0x000DFFFF之间存储区中,运行这段代码的初始化部分,它将挂载实模式下约定的中断向量向其他程序提供服务。例如,VGA图形及文本输出中断(INT 10h),磁盘存取中断服务(INT 13h)等等。由于这段存储空间有限(128KB),BIOS对于所需放置的驱动代码大小超过空间大小的情况无能为力。另外,BIOS的硬件服务程序都已16位代码的形式存在,这就给运行于增强模式的操作系统访问其服务造成了困难。因此BIOS提供的服务在现实中只能提供给操作系统引导程序或MS-DOS类操作系统使用。而EFI系统下的驱动并不是由可以直接运行在CPU上的代码组成的,而是用EFI Byte Code编写而成的。这是一组专用于EFI驱动的虚拟机器指令,必须在EFI驱动运行环境(Driver Execution Environment,或DXE)下被解释运行。这就保证了充分的向下兼容性,打个比方说,一个带有EFI驱动的扩展设备,既可以将其安装在安腾处理器的系统中,也可以安装于支持EFI的新PC系统中,而它的EFI驱动不需要重新编写。这样就无需对系统升级带来的兼容性因素作任何考虑。另外,由于EFI驱动开发简单,所有的PC部件提供商都可以参与,情形非常类似于现代操作系统的开发模式,这个开发模式曾使Windows在短短的两三年时间内成为功能强大,性能优越的操作系统。基于EFI的驱动模型可以使EFI系统接触到所有的硬件功能,在操作操作系统运行以前浏览万维网站不再是天方夜谭,甚至实现起来也非常简单。这对基于传统BIOS的系统来说是件不可能的任务,在BIOS中添加几个简单的USB设备支持都曾使很多BIOS设计师痛苦万分,更何况除了添加对无数网络硬件的支持外,还得凭空构建一个16位模式下的TCP/IP协议栈。
    一些人认为BIOS只不过是由于兼容性问题遗留下来的无足轻重的部分,不值得为它花费太大的升级努力。而反对者认为,当BIOS的出现制约了PC技术的发展时,必须有人对它作必要的改变。

    EFI和操作系统

    EFI在概念上非常类似于一个低阶的操作系统,并且具有操控所有硬件资源的能力。不少人感觉它的不断发展将有可能代替现代的操作系统。事实上,EFI的缔造者们在第一版规范出台时就将EFI的能力限制于不足以威胁操作系统的统治地位。首先,它只是硬件和预启动软件间的接口规范;其次,EFI环境下不提供中断的访问机制,也就是说每个EFI驱动程序必须用轮询的方式来检查硬件状态,并且需要以解释的方式运行,较操作系统下的驱动效率更低;再则,EFI系统不提供复杂的存储器保护功能,它只具备简单的存储器管理机制,具体来说就是指运行在x86处理器的段保护模式下,以最大寻址能力为限把存储器分为一个平坦的段,所有的程序都有权限存取任何一段位置,并不提供真实的保护服务。当EFI所有组件加载完毕时,系统可以开启一个类似于操作系统Shell的命令解释环境,在这里,用户可以调入执行任何EFI应用程序,这些程序可以是硬件检测及除错软件,引导管理,设置软件,操作系统引导软件等等。理论上来说,对于EFI应用程序的功能并没有任何限制,任何人都可以编写这类软件,并且效果较以前MS-DOS下的软件更华丽,功能更强大。一旦引导软件将控制权交给操作系统,所有用于引导的服务代码将全部停止工作,部分运行时代服务程序还可以继续工作,以便于操作系统一时无法找到特定设备的驱动程序时,该设备还可以继续被使用。

    EFI的组成

    一般认为,EFI由以下几个部分组成:
    1. Pre-EFI初始化模块
    2. EFI驱动执行环境
    3. EFI驱动程序
    4. 兼容性支持模块(CSM)
    5. EFI高层应用
    6. GUID 磁盘分区


    在实现中,EFI初始化模块和驱动执行环境通常被集成在一个只读存储器中。Pre-EFI初始化程序在系统开机的时候最先得到执行,它负责最初的CPU,主桥及存储器的初始化工作,紧接着载入EFI驱动执行环境(DXE)。当DXE被载入运行时,系统便具有了枚举并加载其他EFI驱动的能力。在基于PCI架构的系统中,各PCI桥及PCI适配器的EFI驱动会被相继加载及初始化;这时,系统进而枚举并加载各桥接器及适配器后面的各种总线及设备驱动程序,周而复始,直到最后一个设备的驱动程序被成功加载。正因如此,EFI驱动程序可以放置于系统的任何位置,只要能保证它可以按顺序被正确枚举。例如一个具PCI总线接口的ATAPI大容量存储适配器,其EFI驱动程序一般会放置在这个设备的符合PCI规范的扩展只读存储器(PCI Expansion ROM)中,当PCI总线驱动被加载完毕,并开始枚举其子设备时,这个存储适配器旋即被正确识别并加载它的驱动程序。部分EFI驱动程序还可以放置在某个磁盘的EFI专用分区中,只要这些驱动不是用于加载这个磁盘的驱动的必要部件。在EFI规范中,一种突破传统MBR磁盘分区结构限制的GUID磁盘分区系统(GPT)被引入,新结构中,磁盘的分区数不再受限制(在MBR结构下,只能存在4个主分区),并且分区类型将由GUID来表示。在众多的分区类型中,EFI系统分区可以被EFI系统存取,用于存放部分驱动和应用程序。很多人担心这将会导致新的安全性因素,因为EFI系统比传统的BIOS更易于受到计算机病毒的攻击,当一部分EFI驱动程序被破坏时,系统有可能面临无法引导的情况。实际上,系统引导所依赖的EFI驱动部分通常都不会存放在EFI的GUID分区中,即使分区中的驱动程序遭到破坏,也可以用简单的方法得到恢复,这与操作系统下的驱动程序的存储习惯是一致的。CSM是在x86平台EFI系统中的一个特殊的模块,它将为不具备EFI引导能力的操作系统提供类似于传统BIOS的系统服务。

    EFI的发展

    英特尔无疑是推广EFI的积极因素,近年来由于业界对其认识的不断深入,更多的厂商正投入这方面的研究。包括英特尔,AMD在内的一些PC生产厂家联合成立了联合可扩展固件接口论坛,它将在近期推出第一版规范。这个组织将接手规划EFI发展的重任,并将英特尔的EFI框架解释为这个规范的一个具体实现。另外,各大BIOS提供商如Phoenix, AMI等,原先被认为是EFI发展的阻碍力量,现在也不断的推出各自的解决方案。分析人士指出,这是由于BIOS厂商在EFI架构中重新找到了诸如Pre-EFI启动环境之类的市场位置,然而,随着EFI在PC系统上的成功运用,以及英特尔新一代芯片组的推出,这一部分市场份额将会不出意料的在英特尔的掌控之中。

    关于UEFI
    UEFI中图形化的硬件设置界面Extensible Firmware Interface(EFI,可扩展固件接口)是 Intel 为全新类型的 PC 固件的体系结构、接口和服务提出的建议标准。其主要目的是为了提供一组在 OS 加载之前(启动前)在所有平台上一致的、正确指定的启动服务,被看做是有近20多年历史的PC BIOS的继任者。
    由于电脑教育普及,很多人都知道BIOS就是Basic Input/Output System,翻成中文是“基本输入/输出系统”,是一种所谓的“固件”,负责在开机时做硬件启动和检测等工作,并且担任操作系统控制硬件时的中介角色。
    然而,那些都是过去DOS 时代的事情,自从Windows NT出现,Linux 开始崭露头角后,这些操作系统已将过去需要通过BIOS完成的硬件控制程序放在操作系统中完成,不再需要调用BIOS功能。一般来说,当今所谓的“电脑高手”,多半是利用BIOS来对硬件性能做些超频调校,除了专业人士外,鲜有人再利用 BIOS 进行底层工作。
    因为硬件发展迅速,传统式(Legacy)BIOS 成为进步的包袱,现在已发展出最新的EFI(Extensible Firmware Interface)可扩展固件接口,以现在传统 BIOS 的观点来说,未来将是一个“没有特定 BIOS”的电脑时代。
    UEFI是由EFI1.10为基础发展起来的,它的所有者已不再是Intel,而是一个称作Unified EFI Form(www.uefi.org)的国际组织,贡献者有Intel,Microsoft,AMI,等几个大厂,属于open source,目前版本为2.1。与legacy BIOS 相比,最大的几个区别在于:
    1. 编码99%都是由C语言完成;
    2. 一改之前的中断、硬件端口操作的方法,而采用了Driver/protocal的新方式;
    3. 将不支持X86模式,而直接采用Flat mode(也就是不能用DOS了,现在有些 EFI 或 UEFI 能用是因为做了兼容,但实际上这部分不属于UEFI的定义了);
    4. 输出也不再是单纯的二进制code,改为Removable Binary Drivers;
    5. OS启动不再是调用Int19,而是直接利用protocol/device Path;
    6. 对于第三方的开发,前者基本上做不到,除非参与BIOS的设计,但是还要受到ROM的大小限制,而后者就便利多了。
    UEFI将是近3年的趋势,到时候对于PC的利用以及维护都将步入一个新的时代。
    [编辑本段]UEFI结构
    uEFI概念根据UEFI概念图的结构,我们将把uEFI概念划为两部分:uEFI的实体 (uEFI Image)跟平台初始化框架。
    uEFI的实体-uEFI Image(图中蓝框围起部分)
    根据uEFI规范定义,uEFI Image包含三种:uEFI Applications, OS Loaders and uEFI Drivers。
    uEFI Applications是硬件初始化完,操作系统启动之前的核心应用,比如:启动管理、BIOS设置、uEFI Shell、诊断程式、调度和供应程式、调试应用...等等
    OS Loaders是特殊的uEFI Application,主要功能是启动操作系统并退出和关闭uEFI应用。
    uEFI Drivers是提供设备间接口协议,每个设备独立运行提供设备版本号和相应的参数以及设备间关联,不再需要基于操作系统的支持。
    启动队列
    平台初始化框架
    uEFI框架主要包含两部分,一是PEI(EFI预初始化),另一部分是驱动执行环境 (DXE)。
    PEI主要是用来检测启动模式、加载主存储器初始化模块、检测和加载驱动执行环境核心。
    DXE是设备初始化的主要环节,它提供了设备驱动和协议接口环境界面。

    展开全文
  • 构造一个简单的MBR分区表

    千次阅读 2016-06-14 18:27:25
    上篇文章讲述了MBR分区表的分析过程,这篇我们开始讲一下如何构造一个MBR分区表。 首先从最简单的没有扩展分区的分区表开始构建: typedef struct tagMBR_PTITEM { /*00*/ UCHAR byState; //分区...

    上篇文章讲述了MBR分区表的分析过程,这篇我们开始讲一下如何构造一个MBR分区表。


    首先从最简单的没有扩展分区的分区表开始构建:



    typedef struct tagMBR_PTITEM
    {
    /*00*/	UCHAR	byState;				//分区状态, 0 = 未激活, 0x80 = 激活 
    /*01*/	UCHAR	byBeginHead;			//分区起始磁头号
    /*02*/	USHORT	wBeginSC;				//分区起始扇区和柱面号, 底字节的低6位为扇区号, 高2位为柱面号的第 9,10 位, 高字节为柱面号的低 8 位
    /*04*/	UCHAR	byFSID;					//分区类型, 如 0x0B = FAT32, 0x83 = Linux 等, 00 表示此项未用
    /*05*/	UCHAR	byEndHead;				//分区结束磁头号
    /*06*/	USHORT	wEndSC;					//分区结束扇区和柱面号
    /*08*/	ULONG	dwBeginSector;			//在线性寻址方式下的分区相对扇区地址
    /*012*/	ULONG	dwSectors;				//分区大小 (总扇区数)
    /*16*/
    } MBR_PTITEM,FAR * LPMBR_PTITEM;		//磁盘的分区信息
    
    
    #define GETSC_C(SC) ((((SC) & 0xc0) << 2) + ((SC) & 0xff)
    
    #define GETSC_S(SC) (SC & 0x3f)
    #define MAKE_SC(s, c) ((WORD)((s & 0x3F) | ((WORD)(LOBYTE(c) << 8)) | ((HIBYTE(c) & 3) << 6)))
    
    
    

    我们通过上篇文章知道没有扩展分区表的MBR分区表最多只有4个分区,在硬盘的第0扇区,字节偏移是446,从446往后64个字节每16个是一个分区信息,总共4个分区,然后是0x55,0xAA,我们现在要分区,所要做的就是讲这4个分区信息填上,重点就是这些信息怎么填写。

    假设我们的硬盘大小是100GB,如果厂商比较实诚的话扇区数应该是100*1024*1024*1024/512=209715200(不过没有这么实诚的,商家做硬盘为了节省成本,一般都不是1024进制,都是1000,就这样还要在少一些),假设我们要分两个分区,第一个40G,第二个60G,那么我们需要将0-83886079扇区分为第一个分区,83886080-209715200分为第二个分区,如果我们直接将这个偏移写进去是不行的,比如0扇区保存的是分区表信息,因此它不属于任何一个分区,一般情况下前面需要预留出一些扇区,最极端的情况下是从第1扇区开始,但是这样的话有些Linux系统可能无法安装,因为有些系统需要分区是4K对齐的,什么叫做4K对齐呢?就是分区的起始扇区是8的倍数,因为每8个扇区是4K,所以叫4K对齐,NTFS文件系统默认每簇大小是4K,因此为了提高扇区使用率,分区大小最好也是8的倍数, 绝大多数分区软件预留的是64扇区,新的分区软件也许会预留2048扇区,分区与分区之间也不是全部连续的,每两个分区之间也会预留一些扇区,叫分区间隙,分区间隙的大小也最好是8的倍数,一般跟前面保留的一样就好了,磁盘最后也要预留一部分扇区,但是这些其实不是必须的。

    假设我们每处预留扇区都是64,因此第一个分区的区间就是64-83886079,第二个分区的区间是83886144-209715135,我们将该区间信息写入分区表,此时我们可以确定分区的信息为:在线性寻址方式下的分区相对扇区地址和分区大小。说到这里说一下分区的另一种表示方法,之前我们所说的扇区偏移都是线性地址(逻辑地址,Ligical Block Address,LBA),而很早之前使用的是C/H/S地址,所谓硬盘的CHS,即Cylinder(柱面)、Head(磁头)、Sector(扇区)。知道了一个扇区的LBA地址就可以计算出CHS地址:

    //S = LBA % 每个磁头的扇区数
    //H = LBA / 每个磁头的扇区数 % 每个柱面的磁头数
    //C = LBA / 每个磁头的扇区数 / 每个柱面的磁头数
    //每个磁头的扇区数、每个柱面的磁头数是磁盘的基本信息,可以通过IOCTL获取
    void CalcChs(IN LPDISK_BASEINFO lpDiskInfo,
    				 IN DWORD		dwSectOffset,
    				 OUT LPWORD		lpwSector,
    				 OUT LPWORD		lpwHead,
    				 OUT LPDWORD	lpdwCylinder)
    {
    	*lpwSector =  (WORD)((dwSectOffset % lpDiskInfo->dwSectorsPerTrack) + 1);
    	*lpwHead   = (WORD)((dwSectOffset / lpDiskInfo->dwSectorsPerTrack) % lpDiskInfo->dwTracksPerCylinder);
    	*lpdwCylinder   = (DWORD)((dwSectOffset / lpDiskInfo->dwSectorsPerTrack) / lpDiskInfo->dwTracksPerCylinder);
    }
    

    到此为止我们还有两个成员没有确定:是否是活动分区和分区类型。接下来我们来了解一下这两项的作用,活动分区,也可以叫启动分区,就是说这个分区是否是启动分区,这个标志主要是可以让BIOS知道这个硬盘是否可以作为引导盘(我猜的,不过是在想不出它还有什么用),每个MBR分区的磁盘仅可以设置一个活动分区,而且这个分区只能是主分区,不能是扩展分区。一般这个分区就是操作系统的引导文件所在的分区,但是操作系统现在都有自己的MBR代码,然后加载运行他们自己的PBR,并不一定要依赖这个;分区类型,就是文件系统类型,这个值只要不是0其他都随便,没什么卵用,因为在操作系统中还是可以修改文件系统类型的,他也就是可以作为操作系统格式化分区的时候的一个默认值,比如你设置该值为0x0B,在格式化这个分区的时候,选择文件系统那个下拉默认选中FAT。

    我们所有的数据都已经确定完后,因为个MBR分区表有4项,我们只有两个分区,剩下的两项就全部清为0,然后将最后两个字节设置为0x55,0xAA,一定要设置,不然BIOS不认,最后将我们构造的分区表写入硬盘的第0扇区,分区就结束了。


    展开全文
  • 引言 现在Win7、Win8等老系统是可以免费升级到Win10的,但现在可以升级的期限已经迫近了。微软负责Windows与设备集团的执行副...MBR分区表: 在传统硬盘分区模式中,引导扇区是每个分区(Partition)的第一扇区,而
  • 选中的磁盘具有MBR分区表。在EFI系统上。Windows只能安装到GPT磁盘 报错原因 win10系统的快速启动功能,如今新买的预装的win8/win10电脑默认都是UEFI引导和GPT硬盘,(早年出厂的电脑的引导方式为BIOS(Legace)引导...
  • MBR分区表详解

    万次阅读 2018-09-27 17:16:39
    1.MBR分区 MBR(Main Boot Record 主引导记录区)位于整个硬盘的0磁道0柱面1扇区。在512字节的主引导扇区中,MBR只占用了其中的446个字节,另外的64个字节交给了 DPT(Disk Partition Table硬盘分区表),最后两个...
  • 安装Win7时提示“无法安装到这个磁盘,具有MBR分区表”怎么办.docx
  • 安装Win7时提示“无法安装到这个磁盘,具有MBR分区表”的问题.docx
  • 硬盘GPT和MBR分区表转换方法

    千次阅读 2018-09-07 09:15:20
    硬盘GPT和MBR分区表转换方法 GPT对应UEFI启动方式 (最新模式,针对大容量硬盘) MBR对应BIOS LEGACY启动方式(老模式,支持EASYbcd软件进行Ubuntu双系统的安装) ... 随着硬盘容量越来越大,传统的MBR硬盘分区模式...
  • Windows无法安装到这个磁盘 选中的磁盘具有MBR分区表解决方法
  • 选中的磁盘具有MBR分区表。在EFI系统上,windows只能安装在GPT磁盘。” 解决方法: 首先将磁盘分区表改为GPT,但是此操作会清除磁盘的全部数据。所以大家在重装系统之前,把重要文件备份一下。具体方法如下: 1、在...
  • 装系统时提示无法安装在某磁盘(有MBR分区表) “ windows 无法安装到这个磁盘。选中得磁盘具有MBR 分区表。在EFI 系统上。Windows只能安装到GPT磁盘。” 有时我们在作系统得时候回出现这个提示。这个时候可以使用...
  • 备份并恢复MBR分区表

    2012-07-23 21:57:15
    备份mbr的意义:万一分区表被破坏了,可以...1、备份MBR分区表 /dev/sdb1 ext3 99M 5.6M 89M 6% /f [root@localhost ~]# dd if=/dev/sda of=/f/mbr.bak bs=512 count=1 1+0 records in 1+0 records out 512 ...
  • 非预装win10机型出厂时(我的笔记本是预装win7),硬盘默认为MBR分区表格式,而UEFI模式仅支持在GPT分区表的硬盘上安装系统。 如果系统安装光盘中包含了UEFI信息,启动时可能会自动加载并进入UEFI模式,因此便会出现...
  • 选中的磁盘具有MBR分区表,在EFI系统上,windows只能安到GPT磁盘。”我当初遇到这个问题也是束手无策。试过网上很多修改BIOOS设置的,照做了还是无效。最后在安装界面将驱动去全部删除,这样就会合并到一个,这是就...
  • 硬盘的MBR和GPT分区表首当其冲。 O. 硬盘分区 在以前的博客中,我也稍微提到过硬盘的分区,不过不是特别详细,这里特别拿出来讲一讲,为什么我们的硬盘需要分区。 (1). 提高了数据的安全性 因为每个分区中的...
  • 备份MBR分区表,并破坏后恢复 方案1 用hexdump -C /dev/sda -n 512查看分区表前512字节 通过修改分区表修改如图的64个字节来达到破坏效果 前512字节中最后的64个字节 80 04 |..........Y+....| 000001c0 01 04 ...
  • 操作系统是靠硬盘分区表MBR)来识别出硬盘中的各个不同的分区。硬盘分区表中记录了各个分区的位置和大小以及类型等信息,如果这个分区表破坏了,那么这块硬盘里面的分区就会丢失,系统是无法在浏览器里面列出各个...
  • MBR分区磁盘的分区表信息存放在硬盘0磁道第0个扇区内总共512字节 前446字节为bootloader。 中间64位为磁盘分区表信息,每个分区信息占16个字节,总计存放4个分区。(这段就是需要备份出来的数据) 最后的aa55为结束...
  • 所以越来越多的用户考虑安装官方MSDN原版系统,但是呢,近期总是有用户称自己在安装Win10原版系统的时候,在选择磁盘分区的时候,提示了“Windows无法安装到这个磁盘,选中的磁盘具有MBR分区表,在EFI系统上,windows...
  • fdisk支持MBR分区表,gdisk支持GPT分区表,而parted支持两者 不知道为什么,这样分区后直接挂载到/root/xfs目录下会出现问题: 于是,进行重新进行格式化分区为xfs: 使用df命令查看是否挂载成功 到此...
  • 要知道现在大多数的电脑都采用了gpt分区表格式,而且预装了win8系统。但是在安装win8系统后,有些用户表示使用不希望,...今天小编就来帮大家解决这个问题,接下来关于U盘装机大师实现gpt转mbr分区表格式图文教程,
  • win7安装默认使用Legacy引导mbr分区表。后来,想装个ubuntu组双系统,目前的版本是ubuntu18.04。机器有两块硬盘,一个ssd作为系统盘,一个hdd作为存储盘。我把hdd压缩了一些空间出来,准备在这些空间里安装,遇到的...
  • 所以越来越多的用户考虑安装官方MSDN原版系统,但是呢,近期总是有用户称自己在安装Win10原版系统的时候,在选择磁盘分区的时候,提示了“Windows无法安装到这个磁盘,选中的磁盘具有MBR分区表,在EFI系统上,windows...
  • 选中的磁盘具有MBR分区表。在EFI系统上,Windows只能安装到GPT磁盘。 原因 说明本电脑的上一个系统的磁盘分区方式采用的MBR分区表,而我们U盘安装时,驱动方式是EFI系统,EFI与之对应的是GPT分区方式,所以要么U盘...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,405
精华内容 10,962
关键字:

mbr分区表