GPT与MBR那些纠缠不清的故事第一弹——MBR与GPT都是什么呢?[zz]
版权信息
原文作者:Park 原文地址:威锋论坛
(本系列文第二弹,如果看了本文不懂得可以看看,理论要结合实践才能得出结论: http://bbs.feng.com/read-htm-tid-5969091.html)
那个……最近看威锋上很多同学把分区表弄乱了(其实也没有,有一两个而已),感觉很多同学还是在用Windows的分区思维来看Mac,对于Mac使用的GPT(GUID分区图)不太了解,那我就敲篇科普文……本人说话有点啰嗦……所以请各位包含……还有本人才疏学浅,欢迎拍砖~
很多同学很喜欢用Windows分区思维来看Mac,觉得用Windows分区软件来分区问题不大,但是这样就造成了很多问题,有些同学改完分区之后会发现,咦?分区不见了诶~好神奇哟。然后剩下的我就不说了。用自带的磁盘工具分区也经常出问题,那么我就来给大家讲讲Mac的GPT与Windows的MBR之间的二三事
电脑的硬盘都有分区,这个大家应该都知道,但是其实这个分区在硬盘上是不存在的。总不能说,我买块硬盘,咣当用分区软件一分,一下子就把硬盘磁碟给那笔画出来几个区。然后这个是第一个分区,这个是第二个分区,然后这个装Windows,那个装OS X等等。分区是存储在分区表上的。这个大家都知道我也就不再说了,但是分区表也是分格式的,就像一个登记表一样,记录着每一个分区的开始和结束位置(一般是以柱面、磁头、扇区做单位)。PC上使用的一般是MBR,也就是所谓的“主引导记录”,这个分区表一般存储在磁盘的第一个扇区。但是MBR(主引导记录)是PC用的东西,Mac从PowerPC时代就不是用这个的。现在大家如果到磁盘工具里,还能看到一个Apple分区图(如下图)这就是当时的产物
Apple分区图是为了配合当时的PowerPC Mac使用的(具体用来配合他的基础系统是什么技术我也不是特别清楚,有知道的同学可以帮忙补充一下),但是到了06年Intel Mac的时候,就要用一种和Intel兼容的技术了。Apple当时没有选用当时已经用了N年,可以说“古董级”的BIOS作为电脑的基础系统。而是使用了Intel当时正在大力倡导的EFI技术。
说道BIOS,我这里跟大家简单介绍一下,BIOS这种神器是从IBM时代开始的。具体的工作可以说就是几个:首先这个东西会检测系统硬件是否正常,然后接下来,通过CMOS里的设置看明白是要启动哪个设备(比如光驱、硬盘、闪存,还有上个世纪的软驱和比较奇葩的网络等等)并按照顺序检测。通过选定的启动设备启动系统。这个东西可以说当初作为一个电脑的基础系统,起了很大的作用,但是用Mac的同学都应该知道,Mac下是不需要设定启动设备的。如果要启动到闪存盘也是只需要在启动的时候按住Option键来选定而已,而且最好的是这个选定界面支持鼠标。那为什么在Mac下就这么简单呢?这就要讲到EFI技术了
话说这个EFI技术是Intel当时极力倡导的,后来交给一个组织发展,改叫UEFI。不过不论叫什么,这个东西他是好的没错。好处呢就是他的数据(如果我没记错的话)是保存在闪存上的,而且是用32位的C语言开发的。这个什么语言可以不用管它,但是需要知道的一点就是这个可以执行一些比较复杂的程序。比如说在09年左右开始,貌似华硕就出过一款主板,内置了一个紧急恢复系统,用于在操作系统崩溃的时候恢复数据用的。还自带一个浏览器,可以说是已经到了神器级别……不知道现在的华硕板子还有没有这个玩意了。总之,那段时间之后的主板大都开始配备EFI了。笔记本也是这段时间才开始配备的。
好了,总算把EFI的问题倒腾完了,接下来,继续说GPT的问题。GPT和MBR不同,他并不是在一个固定的扇区的,而是从在第一个扇区之后开始(为什么保留第一个扇区我等会跟大家解释)作为一个分区进行保存,分区表可以要多大有多大。GPT作为一种分区表是极好的,优点是什么呢?我来给大家讲解一下。刚才我也说过,BIOS是管电脑启动的,但是他知道该启动哪个设备之后,如何知道该启动哪个分区呢?这个在MBR中是由所谓“活动分区”管理的。也就是说,BIOS会在之后读取MBR中的“活动分区”,然后根据活动分区加载启动器(比如Windows XP的ntldr、Win Vista的bootmgr等等),由启动器再加载操作系统。但是,这样就造成了一个后果,就是比如我在A分区装了个Windows,B分区装了个Linux,必须指定一个活动分区然后用他的引导器来引导操作系统。这一点可能有同学不太理解。就是说,如果你装了Linux和Windows,你必须选择使用一种引导器,然后再由引导器自动(或者你手动)添加另一个操作系统。比如选定GRUB(Linux的引导器),那你能看到的就是GRUB那个方框式界面,如果选定了bootmgr,那就能看到的是“Windows启动管理器”那个界面。当然一般Linux和Windows共存的时候一般都用GRUB的。而GPT加载的方式就不一样。虽然也有引导器,但是没有活动分区这码事。具体的引导方式我也不清楚(不清楚你说毛啊亲)。至少在Mac下我理解是通过设定引导分区来进行的。有知道的同学可以告诉我一下……
说完了GPT的第一个优点,接下来说第二个,这个优点就是GPT对多分区的支持很好。很多同学经常性被MBR分区表的那个什么“逻辑分区”、“主分区”、“扩展分区”犯晕。为什么要有这么多类型的分区呢?就是因为MBR只有一个扇区(我没记错的话)。这个扇区只支持四个分区的信息。所以,只能分四个区。但是为什么(事实上)MBR还能分很多区呢?这就是扩展分区和逻辑分区。扩展分区就是一个大的分区(在MBR看来),但是其中实际包含要多少有多少个逻辑分区。每个逻辑分区都存储着下一个逻辑分区的信息,然后这样连起来。而GPT刚才我也说过,他可以要多少个扇区有多少,所以他可以存储最多无限个分区。当然,看你给GPT分配多大空间了。
最后说GPT的第三个优点,就是对大硬盘的支持好。前一段时间一直爆出iMac 3TB硬盘的版本无法使用Boot Camp,就是源于MBR使用的是CHS寻址,也就是我刚才说的磁头、柱面、扇区寻址办法。而这种寻址不能支持2TB(精确说应该是两点多T,有零有整的)以上的硬盘。所以就造成了这个结果(至于Boot Camp的实现原理我等会再和大家说)。而GPT使用的是LBA寻址,支持到十几EB的硬盘。几十年内是足够用的。
这么好的技术,为什么一直在PC上得不到应用呢?原因就是当时Windows对GPT的不支持。这里我就要狠狠地吐槽一下微软了。微软的Windows操作系统我一直管他叫“新技术推进的最大障碍”(其实Office神马的也是……不过这个留待下次吐槽)。比如说高DPI显示器(Retina屏幕),在Mac下可以说是神级的一个东西,但是为什么在PC下就推广不起来?原因就是MS一直是对高DPI显示持保守态度。07、08年的时候就有厂商出过20英寸的准高分辨率显示器。当时的显示器一直是叫好不叫座,为什么呢?原因就是当时的20寸显示器(16:10)都使用了1680x1050的高分辨率,而当时的Windows XP和Windows Vista没有针对高分辨率做任何优化。造成的直接后果就是字体在这种分辨率下很小,看着非常累。于是厂商们都使用低分辨率。直到今天,1366x768也是主流。同理换到EFI上也一样。当时的Windows Vista(32位)并不支持作为系统盘使用GPT的,而Windows XP (32位)干脆就不支持使用。64位的Windows倒是支持GPT作为启动盘了。但是当时64位的Windows多少人用啊……反观Linux,从2008年左右开始的Linux不论32位还是64位都支持GPT作为启动盘了。微软直到最近的Windows 8才完整的对GPT与LBA进行支持(没记错是这样)。我估计还是为了EFI的安全启动(可以让电脑只能使用Windows)而支持的。所以别看Apple有的时候专利流氓……微软也是挺恶心的……大公司都这样……
好了,那么为什么有些同学在拿Windows的磁盘管理来调整分区的时候造成分区表乱掉呢?这个我可以说说Boot Camp的实现原理
Windows就算是现在对GPT的支持好一点了,也只是64位有限支持而已。所以当初Apple用了一个折中方案,叫做MBR/GPT混合分区表。正常的GPT为了防止不识别GPT的分区软件弄乱分区,所以在原来的第一个扇区(也就是MBR用的)写入了一段信息,将整个磁盘写成了一个未知格式的分区。这样在MBR软件读取的时候,会显示整个硬盘有一个未知格式的分区,进而停止访问。但是Boot Camp为了兼容,在这个写入了前四个分区的磁盘信息,这样在Windows下也可以读取了。但是这样在调整的时候就出了问题。Windows的磁盘管理可能会把GPT分区表的分区删除,然后……整个硬盘就变成MBR分区表了……后面的后果……我不用说了吧
好了,码了这么多,原理说完了,接下来就是讲讲Boot Camp的话对于分区该有什么注意事项了:
1.对于Mac,千万不要尝试使用任何Windows下的分区软件来调整分区。Windows自带的磁盘管理是无法识别GPT/MBR的混合分区表的。第三方管理软件我不知道但是尽量别用。自带的磁盘管理就好
2.对于3TB以上硬盘的Mac,如果要安装Windows,需要将Boot Camp分区置于2TB之内。
好了,就说这么多了。本人才疏学浅。对很多东西不是特别了解,很多知识也记不清了。所以如果有说错的还是请多拍砖
本文部分内容参考Wikipedia。
本文全文基于cc-by-sa协议发表,您可以自由复制、放映、传播、修改、商业使用本作品。唯请遵循以下条件:
1.请署原作者之姓名(Park)
2.请仍基于本协议进行发表
附加条款:
1.若转载请通知(不是让我同意,只要让我知道就行……毕竟我挺想知道我的文章被谁转载了)
2.商业使用请寄送样刊(就是收藏……看样子也没人会商业转载吧……)
修改:2013年1月29日:
1.修正笔误(Bootmgr与Boormgr)
2.解释授权协议,修正附加条款
修改:2013年2月5日
把标题改了一下以便和我的第二弹标题一致……(原标题:打算玩Boot Camp或者多分区的戳,关于MBR与GPT的问题,我简单扯两句)