Linux 磁盘与分区

概述

本文介绍与磁盘分区相关的两种分区格式 —— MBR 和 GPT。

在介绍磁盘分区之前,简要说明各硬件设备在 Linux 系统中的表现形式以及分区的原因。

因为 Linux 的哲学思想为 “一切皆文件”,故而各硬件设备在 Linux 系统中的表现形式也为文件,其集中存放于 /dev 目录之下。例如:对于 STAT 接口的硬盘设备而言,其对应文件名称为 /dev/sd[a-d],硬盘设备若存在分区,则分区对应的文件名称为 /dev/sd[a-d][number]

使用分区的原因需要结合系统挂载来谈。系统挂载就是将某磁盘分区挂载至系统某目录之下,如此操作之后,该目录内容均会位于此磁盘分区之中,且目录内容不会影响其他磁盘分区中的数据。总结而言,磁盘分区具有如下优点:

  1. 充分利用磁盘空间。如果将整颗大磁盘挂载于某小型目录之下,该磁盘空间将会大大浪费。
  2. 提升数据读取效率。将目录内容放置于磁盘分区之内,有助于集中放置数据,从而加快磁臂搜索。
  3. 保护分区数据安全。进行磁盘分区之后,如果系统需要重装,那么只会影响存放系统核心所在分区,其余分区数据不受任何影响。另外,分区数据读取越频繁,磁盘越容易出故障,因此进行磁盘分区之后,可将磁盘故障集中于某一区域,从而保证其余区域安全。

对于磁盘构成要素而言,指出几个简单概念:扇区 (存在两种规格,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 分区格式而言,它具有如下缺点:

  1. MBR 分区格式仅支持 2TB 以下的硬盘设备 (起始/终止扇区编号字段 4 字节,每个扇区存放 512 Byte,则 $2^{32} \times 512 Byte = 2^{41} Byte = 2 T$),无法适应现今超大容量的硬盘设备。
  2. 虽扩展分区可使用内部的前几个扇区存储分区信息,但是分区数量仍有较大限制。

GPT

为克服 MBR 分区格式的上述缺点,GPT 分区格式被提出。

相比于 MBR 分区格式而言,它具有如下特点:

  1. 第一个扇区前半部分同样存储开机管理程序,后半部分存储 GPT 分区格式的标识信息。
  2. 第 2 ~ 33 扇区存储分区表信息,与此同时,最后 33 个扇区备份此分区表信息 (解决缺点 2,最大支持 128 个分区)。
  3. 对于分区表而言,每个分区条目使用 128 Byte 存储,其中 8 Byte 存放起始扇区编号,8 Byte 存放终止扇区编号 (解决缺点 1,最大支持 8 ZB 的磁盘)。

所涉指令

指令 fdisk 用于设置 MBR 分区格式的磁盘分区,指令 gdisk 用于设置 GPT 分区格式的磁盘分区。

指令 parted 用于查看设备的分区信息。

指令 lsblk 用于查看特定块设备的若干信息。

指令 blkid 用于查看特定块设备的属性信息。