基本磁盘与动态磁盘
磁盘的使用方式能够分为两类:一类是“基本磁盘”。基本磁盘很是常见,咱们平时使用的磁盘类型基本上都是“基本磁盘”。“基本磁盘”受26个英文字母的限制,也就是说磁盘的盘符只能是26个英文字母中的一个。由于A、B已经被软驱占用,实际上磁盘可用的盘符只有C~Z 24个。另外,在“基本磁盘”上只能创建四个主分区(注意是主分区,而不是扩展分区);另外一种磁盘类型是“动态磁盘”。“动态磁盘”不受26个英文字母的限制,它是用“卷”来命名的。“动态磁盘”的最大优势是能够将磁盘容量扩展到非邻近的磁盘空间。
动态硬盘,是指在磁盘管理器中将本地硬盘升级得来的。动态磁盘与基本磁盘相比,最大的不一样就是再也不采用之前的分区方式,而是叫作卷集(Volume),卷集分为简单卷、跨区卷、带区卷、镜像卷、RAID-5 卷。基本磁盘和动态磁盘相比,有如下区别:
一、卷集或分区数量。动态磁盘在一个硬盘上可建立的卷集个数没有限制。而基本磁盘在一个硬盘上只能分最多四个主分区。
二、磁盘空间管理。动态磁盘能够把不一样磁盘的分区建立成一个卷集,而且这些分区能够是非邻接的,这样的大小就是几个磁盘分区的总大小。基本磁盘则不能跨硬盘分区而且要求分区必须是连续的空间,每一个分区的容量最大只能是单个硬盘的最大容量,存取速度和单个硬盘相比也没有提高。
三、磁盘容量大小管理。动态磁盘容许咱们在不从新启动机器的状况下调整动态磁盘大小,并且不会丢失和损坏已有的数据。而基本磁盘的分区一旦建立,就没法更改容量大小,除非借助于第三方磁盘工具软件,好比PQ Magic。
四、磁盘配置信息管理和容错。动态磁盘将磁盘配置信息放在磁盘中,若是是RAID容错系统会被复制到 其余动态磁盘上,这样能够利用RAID-1的容错功能,若是某个硬盘损坏,系统将自动调用另外一个硬盘的数据,保持数据的完整性。而基本磁盘将配置信息存放在引导区,没有容错功能。
基本磁盘转换为动态磁盘能够直接进行,可是该过程是不可逆的。要想转回基本磁盘,只有把全部数据所有拷出,而后删除硬盘全部分区后才能转回去。html
MBR分区表:小程序
在传统硬盘分区模式中,引导扇区是每一个分区(Partition)的第一扇区,而主引导扇区是硬盘的第一扇区。它由三个部分组成,主引导记录MBR、硬盘分区表DPT和硬盘有效标志。在总共512字节的主引导扇区里MBR占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为55AA。windows
一个扇区的硬盘主引导记录MBR由4个部分组成。安全
MBR的局限性
MBR的意思是“主引导记录”,最先在1983年在IBM PC DOS 2.0中提出。
之因此叫“主引导记录”,是由于它是存在于驱动器开始部分的一个特殊的启动扇区。这个扇区包含了已安装的操做系统的启动加载器和驱动器的逻辑分区信息。所谓启动加载器,是一小段代码,用于加载驱动器上其余分区上更大的加载器。若是你安装了Windows,Windows启动加载器的初始信息就放在这个区域里——若是MBR的信息被覆盖致使Windows不能启动,你就须要使用Windows的MBR修复功能来使其恢复正常。若是你安装了Linux,则位于MBR里的一般会是GRUB加载器。
MBR支持最大2TB磁盘,它没法处理大于2TB容量的磁盘。MBR还只支持最多4个主分区——若是你想要更多分区,你须要建立所谓“扩展分区”,并在其中建立逻辑分区。
MBR已经成为磁盘分区和启动的工业标准。服务器
GPT分区表:网络
GPT的分区信息是在分区中,而不象MBR同样在主引导扇区,为保护GPT不受MBR类磁盘管理软件的危害,GPT在主引导扇区创建了一个保护分区(Protective MBR)的MBR分区表(此分区并没必要要),这种分区的类型标识为0xEE,这个保护分区的大小在Windows下为128MB,Mac OS X下为200MB,在Window磁盘管理器里名为GPT保护分区,可以让MBR类磁盘管理软件把GPT当作一个未知格式的分区,而不是错误地当成一个未分区的磁盘。架构
GPT的优点
GPT意为GUID分区表。(GUID意为全局惟一标识符)。这是一个正逐渐取代MBR的新标准。它和UEFI相辅相成——UEFI用于取代老旧的BIOS,而GPT则取代老旧的MBR。之因此叫做“GUID分区表”,是由于你的驱动器上的每一个分区都有一个全局惟一的标识符(globally unique identifier,GUID)——这是一个随机生成的字符串,能够保证为地球上的每个GPT分区都分配彻底惟一的标识符。
这个标准没有MBR的那些限制。磁盘驱动器容量能够大得多,大到操做系统和文件系统都无法支持。它同时还支持几乎无限个分区数量,限制只在于操做系统——Windows支持最多128个GPT分区,并且你还不须要建立扩展分区。
在MBR磁盘上,分区和启动信息是保存在一块儿的。若是这部分数据被覆盖或破坏,事情就麻烦了。相对的,GPT在整个磁盘上保存多个这部分信息的副本,所以它更为健壮,并能够恢复被破坏的这部分信息。GPT还为这些信息保存了循环冗余校验码(CRC)以保证其完整和正确——若是数据被破坏,GPT会发觉这些破坏,并从磁盘上的其余地方进行恢复。而MBR则对这些问题无能为力——只有在问题出现后,你才会发现计算机没法启动,或者磁盘分区都不知去向了。框架
兼容性
使用GPT的驱动器会包含一个“保护性MBR”。这种MBR会认为GPT驱动器有一个占据了整个磁盘的分区。若是你使用老实的MBR磁盘工具对GPT磁盘进行管理,你只会看见一个占据整个磁盘的分区。这种保护性MBR保证老式磁盘工具不会把GPT磁盘看成没有分区的空磁盘处理而用MBR覆盖掉原本存在的GPT信息。另外,为了保护分区表,GPT的分区信息在每一个分区的头部和尾部各保存了一份,以便分区表丢失之后进行恢复。ide
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字节为分区项一、分区项二、分区项三、分区项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是设备初始化的主要环节,它提供了设备驱动和协议接口环境界面。
參考文章:
https://my.oschina.net/lintur/blog/31954
http://www.ithome.com/html/win8/58192.htm
http://fyzx.ankang.gov.cn/Article/Class26/201408/1484.html