认识硬件设备与硬盘分区

  • 各硬件设备在Linux中的文件名

SATA接口的硬盘的文件名称即为/dev/sd[a-d],其中, 括号内的字母为a-d当中的任意一个, 亦即有/dev/sda, /dev/sdb, /dev/sdc, 及 /dev/sdd这四个文件的意思。

认识硬件设备与硬盘分区

  •  MSDOS(MBR)与 GPT 磁盘分区表(partition table)
    • MSDOS (MBR) 分区表格式与限制

早期的 Linux 系统为了相容于 Windows 的磁盘,因此使用的是支持 Windows 的 MBR(Master Boot Record, 主要开机纪录区) 的方式来处理开机管理程序与分区表。

  • 主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446 Bytes
  • 分区表(partition table):记录整颗硬盘分区的状态,有64 Bytes
  • 由于分区表所在区块仅有64 Bytes容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的柱面号码。
  • 实际上延伸分区并不是只占一个区块,而是会分佈在每个分区的最前面几个扇区来记载 分区信息的。延伸分区的目的是使用额外的扇区来记录分区信息,延伸分区本身并不能被拿来格式化。 然后我们可以通过延伸分区所指向的那个区块继续作分区的记录。
  • 由于每组分区表仅有 16Bytes 而已,在过去 MBR 分区表的限制中经常可以发现如下的问题:

操作系统无法抓取到 2.2T 以上的磁盘容量!

MBR 仅有一个区块,若被破坏后,经常无法或很难救援。

MBR 内的存放开机管理程序的区块仅 446Bytes,无法容纳较多的程序码。

  • GUID partition table, GPT 磁盘分区表
    • 为了相容 于所有的磁盘,因此在扇区的定义上面, 大多会使用所谓的逻辑区块位址(Logical Block Address, LBA)来处理。GPT 将磁盘所有区块以此 LBA(默认为 512Bytes) 来规划, 而第一个 LBA 称为 LBA0 (从 0 开始编号)。
    • GPT 使用了 34 个 LBA 区块来纪录分区信息,整个磁盘的最后 33 个 LBA 也拿来作为另一个备份.

认识硬件设备与硬盘分区

  • LBA0(MBR 相容区块),与 MBR 模式相似的,这个相容区块也分为两个部份。在原本的分区表的纪录区内,这个相容模式 仅放入一个特殊标志的分区,用来表示此磁盘为 GPT 格式之意。
  • LBA1(GPT 表头纪录)

这个部份纪录了分区表本身的位置与大小,同时纪录了备份用的 GPT 分区 (就是前面谈到的在最后 34 个 LBA 区块) 放置的位置, 同时放置了分区表的检验机制码 (CRC32),操作系统可以根据这个检验码来判断 GPT 是否正确。若有错误,还可以通 过这个纪录区来取得备份的 GPT(磁盘最后的那个备份区块) 来恢复 GPT 的正常运行。

  • LBA2-33 (实际纪录分区信息处)

从 LBA2 区块开始,每个 LBA 都可以纪录 4 笔分区纪录,所以在默认的情况下,总共可 以有 4*32 = 128 笔分区纪录。因为每个LBA 有 512Bytes,因此每笔纪录用到 128 Bytes 的空间,除了每笔纪录所需要的识别码与相关的纪录之外,GPT 在每笔纪录中分别提供了 64bits 来记载开始/结束的扇区号码。因此,GPT 分区表对於单一分区来说, 他的最大容量限制就会在“ 2^64*512Bytes = 263 1KBytes = 233TB = 8 ZB ”,1ZB = 230TB 。

  • GPT 分区已经没有所谓的主、延伸、逻辑分区的概念,每一个分区都可以拿来格式化使用。