EFI/GPT探索(为何win7分区时创建100M隐藏分区)
转自
http://blog.tomatoit.net/article.asp?id=348
EFI/GPT是新一代的固件/启动管理技术,比较复杂,资料很少。
经过大量的搜索,找到了一些资料,总算是摸到了一点门,先简要地说一下。
一、技术背景。EFI是Intel开发的,最早被用于Itanium计算机(1.0版),然后是Mac(1.1版),后来Intel开放了标准和技术资料,EFI由UEFI组织管理(http://www.uefi.org)。经过一段时间的开发,升级到2.0版(UEFI 2.0),目前,最新的版本是2.1。Intel有个网站,有EFI的技术资料、开发工具、实例代码和实用工具(提供EFI Shell和Toolkit下载)(http://www.tianocore.org)。
二、基本概况。EFI技术比较重要的有CSM、Shell和Toolkit,CSM能够让用户选择是用EFI firmware还是Legacy BIOS开机,Apple通过Boot Camp支持这个功能,所以我们可以在Mac机上安装Windows。至于Shell,它提供一个开机命令行环境,它可以做许多事情,目前我们需要的是用它来启动操作系统安装程序(因为只有这样才可以将Windows x64 SP1或Windows Server 2008安装到GPT分区,旧版本和32位的的Windows不可以)。Toolkit就是一些命令行工具,就像DOS下的.com/.exe文件,不过它的扩展名是.efi。
三、分区相关。EFI需要占用一个分区,它的格式是FAT32,是隐藏的,默认不会挂载,所以在文件管理器里是看不见的。我们可以用Mac OS X安装盘或Windows Vista/2008安装盘手动创建这种分区(推荐使用Windows Vista/2008安装盘,兼容性好),Mac就不用说,用diskutil或硬盘工具,Vista/2008是这样的:
1、准备一个全新硬盘,似乎不能已经是GPT分区表的硬盘,MBR的可以。
开机,插入Vista/2008安装盘,从光盘启动(Mac机可以开机按住Option键,会出现两个光盘图标,选左边的)。
2、安装画面选择语言后,点下一步,然后可以看到几个选项,一是升级,二是全新安装,下面还有两个我忘记是什么文字了,点最下面那一个,然后点下一步,再点最下面一个像命令控制台那样的图标,就进入了命令行。
3、创建GPT分区过程:
输入diskpart,回车。
输入list disk,可以看到硬盘编号,0,1,2,3…什么的。
输入select disk x(x是硬盘编号)选中你要分区的硬盘。
输入clean清除该硬盘上的所有分区(如果你的硬盘不是未分区状态)。
输入convert gpt将该硬盘转换成GPT分区表(基本上可以说是永久转换,没法转回MBR,除非你再次用clean清除分区表)。
输入create partition efi size=***(***是分区大小,以MB为单位,Mac默认是200MB,稍微搞大点没关系,我分的是512MB)。
输入create partition msr size=***(msr是Microsoft保留分区,貌似MS会用它干点什么事,我给它分了512MB)。
输入create partition primary size=*** id=yyy创建数据分区,可用于安装操作系统(id=yyy可以不必输入,它代表的是GUID分区类型(格式,就像MBR分区表的FAT/NTFS/HFS+用一个字符串代表分区格式,只不过GUID它很长,是全球唯一标识符,这里不输入的话,在安装操作系统,格式化分区时会自动生成),详细介绍和各种分区GUID列表见此)。
然后再重复上面那一句创建多个数据分区。
建完了分区后,可以将EFI分区格式化一下以便挂载,方法:
输入list partition看一下EFI分区的编号是多少。
输入select partition x选中EFI分区(一般是1)。
输入assign letter=x(x代表你要给它分配的盘符,随便填一个没被占用的盘符就好了)
输入exit退出diskpart分区工具,这下又回到了命令行。
输入format x: /fs:fat /q /y格式化这个EFI分区。
这样一个GPT磁盘就做好了。
在这里,其实还可以做一些其他的事情,比如把EFI Shell装进去(事先把EFI Shell的文件解压到一个FAT32格式的U盘上面(移动硬盘可能也行),怎么挂载这个U盘?请看上面。)不过要注意,这个命令行只能进来一次,如果你退回到安装介面,或者停电,那你就得重新分区(首先还得弄成MBR分区)。当然了,你也可以在安装完Vista/2008以后再做这些事情。
四、安装系统。由于我们的目的是将Windows Vista x64 SP1/2008 x64或其他支持EFI/GPT的系统安装到GPT分区,所以有一个前提条件是我们得从EFI Shell启动安装,否则安装程序是不允许你将操作系统安装到GPT分区的。至于这个EFI Shell,有一个rEFIt提供了Shell(http://refit.sourceforge.net),不过它是一个Mac软件,所以你必须得先安装Mac OS X(至少得Tiger吧)。Intel的TianoCore网站也提供了这个东西(http://www.tianocore.org),Vista/2008安装盘里不知有没有,估计没有。
所以,目前的问题是,得拿到这个Shell,从这个Shell启动安装程序。这个Shell可以安装到哪里呢,EFI分区是FAT32格式(FAT32分区格式已开放),我们可以把它安装到EFI分区(当然首先我们需要能够对这个分区进行挂载和读写),也可以把它安装到U盘或移动硬盘上的FAT32分区(看来FAT32分区还挺有用)。
Windows挂载EFI分区就不用说了吧,上面有。
Windows添加.efi文件启动记录到NVRAM请看这里。
Mac挂载EFI分区和添加.efi文件启动记录请看这个贴子的11楼。
当然啦,我们还得知道是用哪个.efi文件做启动记录,Vista/2008是用bootmgr.efi做启动记录(安装光盘里有),Leopard好像是用安装盘中/usr/standalone/i386/…/boot.efi。
目前我还没正式安装Vista x64/2008到GPT分区,因为我急着把这篇文章写出来。等安装成功了我再补充,当然了,如果有人比我先装好,那也很好。
我担心的是目前的45nm的MacBook仍然是用1.1版的EFI,而许多PC机事实上已经使用了UEFI 2.0或2.1(也就是说PC机事实上也可以这样做)。据说2008最新款的iMac和Mac Pro已经使用了UEFI 2.0,国外有人已经安装成功了。