Linux 磁盘与分区
概述
本文介绍与磁盘分区相关的两种分区格式 —— MBR 和 GPT。
在介绍磁盘分区之前,简要说明各硬件设备在 Linux 系统中的表现形式以及分区的原因。
因为 Linux 的哲学思想为 “一切皆文件”,故而各硬件设备在 Linux 系统中的表现形式也为文件,其集中存放于 /dev
目录之下。例如:对于 STAT 接口的硬盘设备而言,其对应文件名称为 /dev/sd[a-d]
,硬盘设备若存在分区,则分区对应的文件名称为 /dev/sd[a-d][number]
。
使用分区的原因需要结合系统挂载来谈。系统挂载就是将某磁盘分区挂载至系统某目录之下,如此操作之后,该目录内容均会位于此磁盘分区之中,且目录内容不会影响其他磁盘分区中的数据。总结而言,磁盘分区具有如下优点:
- 充分利用磁盘空间。如果将整颗大磁盘挂载于某小型目录之下,该磁盘空间将会大大浪费。
- 提升数据读取效率。将目录内容放置于磁盘分区之内,有助于集中放置数据,从而加快磁臂搜索。
- 保护分区数据安全。进行磁盘分区之后,如果系统需要重装,那么只会影响存放系统核心所在分区,其余分区数据不受任何影响。另外,分区数据读取越频繁,磁盘越容易出故障,因此进行磁盘分区之后,可将磁盘故障集中于某一区域,从而保证其余区域安全。
对于磁盘构成要素而言,指出几个简单概念:扇区 (存在两种规格,512 Byte 和 4 KB。为向下兼容,4 KB 扇区通常会进一步划分为 8 个 512 Byte 的逻辑扇区。因此下面叙述之中,扇区规格均为 512 Byte)、磁道、柱面、磁头、磁臂、主轴马达。
在整颗磁盘的所有扇区之中,1 号扇区十分重要,其中存放整颗磁盘的重要信息 (包括分区信息)。
MBR
对于 MBR 分区格式而言,1 号扇区之中存放三种信息:
- MBR:存放开机管理程序,即 Boot Loader,共计 446 Byte。
- 分区表:存放磁盘分区信息,共计 64 Byte。
- 记录签名:如果其中内容为
0x55AA
,则表明该磁盘可作为启动之用,反之则不可,共计 2 Byte。
在此三种信息之中,我们仅关注分区表中的内容。
鉴于每条分区信息需要 16 Byte 空间 (其中 4 Byte 存放起始扇区编号,4 Byte 存放终止扇区编号),因此分区表内部仅能容纳 4 组分区 (称为主分区)。其分区结构大致如图所示:
为进一步扩大所能容纳的分区数量,可将某一主分区转换为扩展分区,该分区可借助于内部的前几个扇区存储分区信息,以此进一步划分扩展分区,且划分得到的分区被命名为逻辑分区。
使用 MBR 分区格式划分磁盘时,通常做法为:三个主分区 + 一个扩展分区,扩展分区内部可自由划分逻辑分区。
实际之中,磁盘的第一个扇区和分区内的第一个扇区都会存放开机管理程序。也正是因为这个原因,才会存在多重开机,俗称 多系统电脑。
对于 MBR 分区格式而言,它具有如下缺点:
- MBR 分区格式仅支持 2TB 以下的硬盘设备 (起始/终止扇区编号字段 4 字节,每个扇区存放 512 Byte,则 $2^{32} \times 512 Byte = 2^{41} Byte = 2 T$),无法适应现今超大容量的硬盘设备。
- 虽扩展分区可使用内部的前几个扇区存储分区信息,但是分区数量仍有较大限制。
GPT
为克服 MBR 分区格式的上述缺点,GPT 分区格式被提出。
相比于 MBR 分区格式而言,它具有如下特点:
- 第一个扇区前半部分同样存储开机管理程序,后半部分存储 GPT 分区格式的标识信息。
- 第 2 ~ 33 扇区存储分区表信息,与此同时,最后 33 个扇区备份此分区表信息 (解决缺点 2,最大支持 128 个分区)。
- 对于分区表而言,每个分区条目使用 128 Byte 存储,其中 8 Byte 存放起始扇区编号,8 Byte 存放终止扇区编号 (解决缺点 1,最大支持 8 ZB 的磁盘)。
所涉指令
指令 fdisk
用于设置 MBR 分区格式的磁盘分区,指令 gdisk
用于设置 GPT 分区格式的磁盘分区。
指令 parted
用于查看设备的分区信息。
指令 lsblk
用于查看特定块设备的若干信息。
指令 blkid
用于查看特定块设备的属性信息。