磁盘分区分析

Posted 扶磐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了磁盘分区分析相关的知识,希望对你有一定的参考价值。

今天在给安装CentOS虚拟机时,突然开始思考制作U盘启动盘的原理,一直想不明白有了iso文件为什么还要工具制作启动盘,后来发现因为iso是磁盘的整个镜像文件,说到底他也只是个文件,如果直接拷贝的话,文件系统会把它放到一个不知道的地方,而我们需要这个磁盘镜像从第一个扇区完完整整的写入磁盘,其实u盘启动盘制造工具起了Linux中dd命令的作用,因此要用工具刻入,而不能直接复制进去。后面又心血来潮想复习一下MBR和GPT的知识,顺便看一眼自己的磁盘情况。

环境

  • Windows10
  • 1块470G的磁盘
  • Windows自带的磁盘管理
  • winhex(试用版)

前置知识

UEFI与BIOS、GPT与MBR的区别 CSDN

MBR与GPT 知乎 老狼

探索之旅

可以看到本机上有一整块的磁盘,总大小为476.92GB,共有如下五个分区:

  • 100MB的EFI系统分区
  • 226GB的C盘
  • 100GB的E盘
  • 150GB的D盘
  • 505MB的恢复分区

根据微软官方给出的解释,EFI系统分区用来存放启动操作系统的启动代码,恢复分区用来存放一些特殊工具,在系统出错时可以帮助你恢复Windows,而C盘、E盘和D盘用来存放数据,其中Windows操作系统数据存放在C盘。

可是你的电脑真的只有五个分区吗?

Winhex是一款强大的磁盘分析工具,可以从传送门下载,之前自己在取证课上用到过,了解的不是很深,但也够用了。下面简单给出winhex使用步骤

  1. 使用管理员权限打开winhex.exe

  2. 点击file,创建新的case

  3. 创建完成后再次点击file,点击add medium,然后选择整块磁盘

  4. 查看结果

可以看到这块GPT分区的磁盘共有六个分区,但Partition 2他的文件系统是未知的。其他五个分区分别对应着上面说的五个分区,这时候也能明白下图中磁盘分区1和磁盘分区6的意义了。

继续分析,我们来看一下起始扇区,GPT的第一个sector被称为PMBR,第二个扇区是表头,接着32个扇区是分区表,剩下的是数据。

其中第一个扇区,在原始MBR分区表中,分区类型使用EE来表明是GPT分区,范围从LBA 0x01到0xFFFFFFFF,识别不了该标志的legacy BIOS此时就会启动操作系统失败,而不会乱写入数据破坏分区;可以指别GPT分区的UEFI或legacy BIOS可以明白这是一个GPT分区而不是MBR分区。

第二扇区存放GPT表头,定义了硬盘的可用空间以及组成分区表的项的大小和数量。在使用64位Windows Server2003的机器上,最多可以创建128个分区,即分区表中保留了128个项,其中每个都是128字节。

起始字节 偏移量 内容
0 16 分区类型GUID
16 16 分区GUID
32 8 起始LBA(小端格式)
40 8 末尾LBA
48 8 分区属性
56 72 分区名字

后面的三十二个扇区都为分区表,由于本电脑上只有六个分区,因此只需要看前两个扇区就好。

我们先来分析分区1

可以从分区名字上看出,分区1为EFI system partition(ESP),他的分区类型GUID其实也证明了这一点。

该分区属性中63位为1,表示不自动挂载,也就是不自动分配盘符,这就是为什么我们只能看到C、D、E分区而看不到该分区的原因。

EFI System Partition分区存放着系统启动文件,可以看到里面都是UEFI相关的文件。

前面我们看到这个分区的文件系统是FAT32,为什么是FAT文件系统呢?osdev中有这么一段话:

UEFI firmware loads an arbitrary sized UEFI application (a relocatable PE executable file) from a FAT partition on a GPT-partitioned boot device to some address selected at run-time.

这里面的PE格式文件就是我们看到的后缀为.EFI文件,上面这段话很好的解释了需要FAT32文件系统的原因。

分区2从名字和分区类型GUID中都可以看出为微软保留分区,值得一提的是,该分区未在磁盘管理中出现。使用windows自带工具diskpart,发现当list volume时五个volume,此时看不到分区2,list partition时便可以看到分区2了,因此猜测,可能是微软不将保留分区视为volume,所以在磁盘管理上才看不见的。

分区2的属性同样是不自动挂载,同理分区6属性中63位也为1,表示不自动挂载,需要注意的是它的第0位也为1,表示为系统分区,磁盘分区工具必须将此分区保持原样,不得做任何修改。

分区3、4、5皆为Basic data partition分区,他们的文件系统类型需要去分区内第一个扇区中获得。

到这里就分析完了,感觉自己对文件系统和UEFI启动还不是特别了解,因此后面有机会还是要去探索一番。

以上是关于磁盘分区分析的主要内容,如果未能解决你的问题,请参考以下文章

利用Oracle分区表来减少磁盘I/O冲突

Linux shell磁盘监控

Linux磁盘分区管理--ext2和ext3文件系统逻辑结构分析

mysql 分区指定分区表数据存储路径,可以支持跨磁盘

磁盘分区之后出现OEM分区

挂载磁盘分区大小