磁盘分区
Windows的磁盘分区
windows中磁盘分区比较直观,可能会将一个磁盘划分成C,D,E,F盘,C,D,E,F就是分区。
linux的磁盘分区
linux下一切皆文件的概念来说,磁盘也就是一个特殊的文件。
正常的物理机器使用的都是/dev/sd[a-p]的磁盘文件名,至于虚拟环境中,为了加速,可能会使用/dev/vd[a-p]的文件名。
磁盘的划分和其物理构造有很大的关系,磁盘主要由碟片、机械手臂、磁头、主轴马达组成。
碟片上可以细分出扇区与磁道两种单位,其中扇区的物理大小有两种设计,分别是512字节与4K字节。
整块磁盘的第一个扇区特别重要,因为它记录了整块磁盘的重要信息。早期第一个扇区里面含有的重要信息我们称为MBR(Master Boot Record)格式,由于近年来磁盘容量的不断扩大,造成读写上的一些困扰,甚至超过一定大小后的磁盘分区已经让某些操作系统无法存取,因此又多了一个新的磁盘分区格式,称为GPT(GUID partition table)。
MBR
所有碟片的同一磁道我们称之为“柱面”,柱面是文件系统的最小单位,也就是分区的最小单位。
早期Linux为了兼容Windows的磁盘,因此使用的是支持Windows的MBR的方式来处理启动引导程序与分区表。启动引导程序及录取与分区表则统统放在磁盘的第一个扇区,这个扇区通常是512字节大小。
第一扇区的512字节会包含两个东西:
- 主引导记录(MBR),可以安装启动引导程序的地方,有446字节。
- 分区表,记录整块硬盘分区的状态,有64字节。
由于分区表所在部分只占了64字节,因此最多仅能有四组及录取,每组记录区记录了该区段的起始与结束的柱面号码。
将柱面以柱形图来看,即把每个柱面拆为矩形:
假设硬盘有400个柱面,共划分为四个分区。
对与Windows来说,上面四分区就相当于C、D、E、F四个,当数据要写入F时,就相当于数据会被写入301-400号柱面之间。
由于64字节的限制,最多只能容纳四组分区记录,这四个分区的记录被称为主要(Primary)或者扩展(Extended)分区。
当然这不代表只能划分出四个分区,你可以将一块硬盘划分成十个以上的分区。用到扩展分区的方式来处理。
扩展分区的意思是,既然第一个扇区所在的分区表只能记录四组数据,那可利用额外的扇区来记录更多的分区信息,如下图:
逻辑分区属于扩展分区,扩展分区属于主分区。
由扩展分区继续划分出来的分区,被称为逻辑分区,逻辑分区的设备号名称号码是由5开始的。
MBR、主要分区、扩展分区、逻辑分区的特性简单定义:
- 主要分区与扩展分区最多可以由四个(硬盘的限制),如3个主要分区,1个扩展分区。
- 扩展分区最多只能有一个(操作系统的限制)。
- 逻辑分区是由扩展分区持续划分出来的分区。
- 能够被格式化后作为数据存取的分区是主要分区和逻辑分区,扩展分区无法格式化。
- 逻辑分区的数量依赖操作系统而不同,子啊linux系统中SATA硬盘已经可以突破63个以上的分区限制。
过去MBR分区表的限制中经常可以发现如下问题:
- 操作系统无法使用2.2TB以上的磁盘容量。
- MBR仅有一个区块(一个只有512字节的区块),若被破坏后,经常无法或很难恢复。
- MBR内的存放启动引导程序的区块仅446字节,无法存储较多的程序代码。
GPT
为了兼容所有的磁盘,在扇区定义上面,大多会采用所谓的逻辑区块地址(Logical Block Address, LBA)来处理。GPT将磁盘的所有区块以LBA(默认为512字节)来规划,第一个LBA称为LBA0(从0开始编号)。
与MBR仅使用第一个512字节区块来记录不同,GPT使用了34个LBA区块来记录分区信息,除了前面34LBA区块外,整个磁盘的最后34个LBA也拿来做备份。
上图的解释说明:
-
LBA0(MBR 兼容区块)
与MBR模式相似,也分两部分,一个跟之间446字节相似的区块,存储第一阶段的启动引导程序。而在原本的分区表记录内,这个兼容模式仅放入一个特殊标识符,用来表示此磁盘为 GPT 格式之意。对于不懂 GPT 分区表磁盘管理程序,就不会认识这块磁盘,就不能修改此分区信息,进一步保护了磁盘。
-
LBA1(GPT 表头记录)
这部分记录了分区表本身的位置和大小,同时记录了备份用的 GPT 分区放置的位置,同时放置了分区表的校验码(CRC32),操作系统可以根据这个校验码来判断 GPT 是否正确,若失败可以读取备份来恢复。
-
LBA2~LBA33(实际记录分区信息处)
从LBA2开始,每个LBA都可以记录四组分区记录,所以默认情况下总共可以有
4*32=128
组分区记录。每组记录可以用到128字节的空间。
GPT分区已经没有所谓的主、扩展、逻辑分区的概念,每组记录都可以独立存在,当然每个都可以视为是主要分区,每一个分区都可以拿来格式化使用。