diskpart这个命令,用了很多年了。
作为曾经SCCM的老手,至今还记得在System Center Configuration Manager的OSD(操作系统部署)中,为了实现单一镜像单一序列部署到不同的计算机硬件,去编写提供不同的磁盘分区的脚本。
这是由于不同厂商OEM提供Windows时,往往在磁盘上划分了保留分区以存放恢复镜像。如果企业或机构中存在非在线恢复系统的需求,那么可以把OSD产生的镜像WIM保存到保留的恢复分区,以供需要时进行系统的回复。
另外,对于一个生产环境,用户往往希望保留自己的数据分区而只恢复系统分区。在这个情况下,规范分区并且在OSD的任务序列中进行识别和处理就显得非常的重要了。
在以前很长的一段时间里,对磁盘分区的了解满足主分区、扩展分区、活动分区和MBR(主引导记录)就能大致满足日常需求了。在PC/AT时代,BIOS会去寻找磁盘上的激活的引导分区,然后根据之上的引导扇区的信息,加载SYS或者bootmgr之类的引导控制程序,引导进入操作系统。
还记得用16进制磁盘编辑器查看分区表,能够看到活动分区的0x80标记么?还记得查看引导扇区,最后两个双字节为0x55 0xAA么?这里有几篇文章可以帮助回忆:
Why 55 AA is used as the boot signature on IBM PCs?
http://stackoverflow.com/questions/11075003/why-55-aa-is-used-as-the-boot-signature-on-ibm-pcs
The PC/AT boot process
http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/pcat-boot-process.html#Active
可是技术不会停留,为了适应新的需求,例如为了超越2TB磁盘的限制,GPT磁盘分区出现了。相应的,磁盘类型ID也从以前的一个双字节变成了GUID。
之所以想起来了解这个问题,是因为我干掉了机器出场自带的恢复分区。所以顺便了解下GPT分区。
如何创建、删除分区,一搜一堆,不在这篇的讨论范围内。主要想看看分区类型。在删除恢复分区的时候,通过diskpart detail partition命令,能看到我的SSD上有这些类型的分区。
除了熟悉的分区/卷的信息,主要有两个信息是我想了解的,一个是分区类型,因为使用GPT磁盘,都显示为GUID了;一个是属性。
使用diskpart setid命令可以修改分区类型,当然也可以查看。
DISKPART> help setid 为带焦点的分区更改分区类型字段。 语法: SET ID={<BYTE> | <GUID>} [OVERRIDE] [NOERR] ID={<BYTE> | <GUID>} 指定新分区类型。 对于主启动记录(MBR)磁盘,可以采用十六进制形式 对于 GUID 分区表(GPT)磁盘,可以为分区指定 EFI 系统分区: 基本数据分区: 可以使用此参数指定任何分区类型 GUID, Microsoft 保留分区: 动态磁盘上的 LDM 元数据分区: 动态磁盘上的 LDM 数据分区: 群集元数据分区: OVERRIDE 启用 DiskPart 能够强制首先卸载卷上的文件系统, NOERR 仅用于脚本。遇到错误时,DiskPart 会继续 仅供原始设备制造商(OEM)使用。 必须选择一个分区才能成功执行此操作。 警告: 使用此参数更改分区类型字段可能会导致计算机发生故障 此命令在动态磁盘或 Microsoft 保留分区上无法使用。 示例: SET ID=07 OVERRIDE |
这里有一篇比较完整的介绍:https://technet.microsoft.com/en-us/library/cc771243.aspx
我注意到帮助没有说明我的OEM分区,于是搜索。
原来这是个用于实现Intel Rapid Start Technology的分区,文档参见:http://download.intel.com/support/motherboards/desktop/sb/rapid_start_technology_user_guide_for_uefi1.pdf
那么,分区属性又是怎么回事呢?使用diskpart gpt命令可以获得分区属性。
DISKPART> help gpt 在基本 GUID 分区表(GPT)磁盘上,将 GPT 属性分配给带焦点的分区。 ATTRIBUTES=<N> 表示可应用于带焦点的分区的属性的十六进制值。GPT 属性字段 可以在所有分区上设置以下属性: 0x0000000000000001 将该分区标记为必需分区。这向所有的磁 对于基本数据分区,定义了以下属性: 0x8000000000000000 0x4000000000000000 0x2000000000000000 x1000000000000000 Microsoft 可能会随时添加其他属性。 必须选择一个基本 GPT 分区才能继续执行此操作。 警告: 更改 GPT 属性可能会导致无法为基本数据卷分配驱动器号,或阻止装载文件 示例: GPT ATTRIBUTES=0x8000000000000000 |
对照detail partition命令获得的分区属性,能够发现有这么几种:
0x0000000000000000;0X8000000000000000;0X8000000000000001
这样一来,磁盘管理器中分区不能操作就很好理解了。
0x0000000000000000是标准的数据分区,系统会自动分配盘符,也能够正常的通过磁盘管理器进行操作管理;
0X8000000000000000系统不会分配盘符,这样磁盘挂载到其他操作系统时不会出现不需要的盘符。但在需要的时候可以进行操作;
0X8000000000000001除了以上属性之外,还叠加了防止删除分区的属性。
对于GPT磁盘以及相应的GUID等介绍,不论TechNet还是MSDN都有专门的文章。
Frequently asked questions about the GUID Partitioning Table disk architecture
https://support.microsoft.com/en-us/kb/302873
Windows and GPT FAQ
https://msdn.microsoft.com/en-us/library/windows/hardware/dn640535(v=vs.85).aspx
还记得安装Windows的时候,自动多出来的两个分区吗?一个叫引导分区,一个叫保留分区,都是干啥用的呢?
查一下前面的GUID,引导分区其实就是一个EFI分区,也可以简称ESP。这个分区通常保存引导需要的文件,例如bootmgr等。单独做出来一个分区的好处是系统运行时,病毒和恶意代码一般无法影响这个分区。
而保留分区,全称是Microsoft Reserved partition。安装Windows的GPT分区磁盘一定会有这个分区。这个分区有什么作用呢?例如,基本磁盘转化成动态磁盘,这个分区的数据就可以转为LDM动态卷的数据库。
为了验证系统EFI分区,上图显示了我使用提升的System账户查看了挂载的这个分区的内容。
关于分区还有一篇极好的介绍文章:
https://technet.microsoft.com/en-us/library/dd799232%28v=ws.10%29.aspx
传统MBR分区的模式如下:
GPT分区的模式如下: