Contents
  1. 1. 磁盘组成
  2. 2. MBR和磁盘分区表
    1. 2.1. MBR
    2. 2.2. 磁盘分区表
  3. 3. 磁盘与分区的设备文件名
    1. 3.1. 磁盘设备文件名
    2. 3.2. 分区设备文件名
    3. 3.3. 概念小结
  4. 4. fdisk

前段时间,自己在练习linux磁盘分区的时候把系统搞坏了,自己搭建在那台主机上的博客也随之消失了O_o。于是自己不得不重新安装系统,搭建环境,还好之前写的博客源文件还有备份,要不然损失真就大了。

也好久没有更新博客了,今天就总结下linux磁盘分区的知识吧!

磁盘组成

既然我们是给磁盘来分区的,那就先来复习下磁盘的组成,磁盘主要包括以下几个部分:


  1. 圆形的盘片(记录数据)
  2. 机械手臂和机械手臂上的磁头(可读写盘片上的数据)
  3. 主轴马达(可以转动盘片)

从上面我们明白数据存储和读取的重点在于盘片,而盘片的物理组成如下:

相关概念说明如下:


  1. 扇区(Sector)为最小的物理存储单位,每个扇区为521bytes
  2. 将扇区组成一个圆,就是一个磁道(Track)
  3. 多个盘片(platter)同一位置的磁道组成一个柱面(Cylinder)

另外我们需要明白的是,柱面是磁盘分区(partition)的最小单位

MBR和磁盘分区表

整个磁盘的第一个扇区是很重要的,因为它里面包含两部分内容:MBR磁盘分区表

MBR

MBR即硬盘主引导记录(Master boot record),它占有446bytes,保存了最基本的引导加载程序(boot loader)

而引导加载程序(boot loader)是一个可读取内核文件来执行的软件,它提供了以下几个功能:


  1. 提供菜单: 用户可以选择不同的开机选项,这也是多重引导的重要功能。
  2. 载入内核文件: 直接指向可开机的程序区段来开始操作系统。
  3. 转交其他loader: 将引导加载程序转交给其他loader负责。

而我们的开机流程与MBR息息相关,我们知道,BIOS是一个写入到主板上的韧体(写入到硬件上的软件程序),它是开机时计算机系统会主动执行的第一个程序。接下来BIOS会依据用户设置去读取计算机的第一个可开机设备,比如硬盘。并且到该硬盘里面去读取第一个扇区的MBR。至此,BIOS任务完成,剩下就转交给MBR的boot loader来完成了。

磁盘分区表

partition table即分区表,它占有64bytes,保存了与磁盘分区相关的信息。

它的作用就在与告诉操作系统:某分区可以访问的磁盘区域是柱面A到柱面B之间的块

正如上图所示,linux分区表中仅能记录四条分区信息,其中每条记录区记录了该分区的起始柱面和结束柱面号码

到现在,我们对分区应该大致理解如下:


  1. 所谓的分区,就是对分区表的64bytes设置而已。
  2. 硬盘默认的分区仅能写入四组分区信息
  3. 这四组分区我们成为主(primary)分区或者扩展(extended)分区
  4. 分区的最小单位为柱面(cylinder)

磁盘与分区的设备文件名

了解了磁盘的基本组成之后,我们需要知道,在linux中,磁盘和分区的设备文件名分别怎么表示。

磁盘设备文件名

个人计算机常见的磁盘接口有两种,分别是IDESATA接口。

以IDE接口来说,通常一个主机有两个IDE接口(primary和secondary),而一个IDE接口可以通过一个IDE扁平电缆连接两个IDE设备(Master和slave)。所以,一台主机通常最多可以连接4个IDE设备

这4个IDE设备在linux中会有如下的设备文件名:

再以SATA接口来说,由于SATA/USB/SCSI等设备接口都是用SCSI模块来驱动的,因此这些设备的设备文件名都是/dev/sd[a-p]的格式。

况且与IDE接口不同的是,他们没有一定的顺序,而他们设备文件名的顺序则取决于linux内核检测到磁盘的顺序


下面来看一个案例:

假设你有一个USB磁盘和两个SATA磁盘,并且你的PC主板上有6个SATA插槽,你将这两个SATA磁盘分别安插在SATA1、SATA5插槽上,请问这三个磁盘在linux中的设备文件名是什么?

答案如下:

  1. SATA1插槽上的磁盘文件名:/dev/sda
  2. SATA2插槽上的磁盘文件名:/dev/sdb
  3. USB插槽上的磁盘文件名:/dev/sdc (由于开机完成之后才被系统识别)

分区设备文件名

就拿设备文件名为/dev/hda的这块磁盘来说,假设这块磁盘的分区情况如下:

上图中看出,我们硬盘的分区记录仅使用了两个,其中P1为主分区,P2为扩展分区

请注意:扩展分区的目的是使用额外的扇区来记录分区信息,扩展分区本身并不能用来格式化。这样我们可以通过扩展分区所指向的那个区块继续做分区的记录。

这样,我们就可以进一步将扩展分区P2划分出L1-L4这几个逻辑分区

并且,以上几个分区的设备文件名如下所示:


  1. P1: /dev/hda1
  2. P2: /dev/hda2
  3. L1: /dev/hda5
  4. L2: /dev/hda6
  5. L3: /dev/hda7
  6. L4: /dev/hda8

我们注意到: 怎么分区的设备文件名没有/dev/hda3/dev/hda4呢?

这是因为,前面四个号码都是保留给Primary或者Extended用的。所以,逻辑分区的设备文件名号码就由5开始了。

概念小结

这里将主分区、扩展分区、逻辑分区的相关概念,做个总结:


  1. 主分区与扩展分区最多可以有4个(硬盘的限制)。
  2. 扩展分区最多只能有一个(操作系统的限制)。
  3. 逻辑分区是由扩展分区持续切割出来的分区。
  4. 主分区和逻辑分区可以被格式化,而扩展分区不可以被格式化。
  5. 逻辑分区的数量因操作系统而不同。在linux中,IDE硬盘最多有59个逻辑分区(5号到63号),SATA硬盘最多有11个逻辑分区(5号到15号)

fdisk

前面总结了理论,这里来实践一下。以下是linux中分区可能用到的命令:

1
2
3
4
5
6
7
// 如果不加最后一个参数,可列出整体磁盘相关信息(包括分区信息)
// 如果加上最后一个参数,可以自动分析该目录或文件所在分区,并列出相关分区信息
$ df [-akmhi] [目录或者文件名]
// 磁盘分区命令,进入之后输入help查看使用方式
// 磁盘分区的删除、添加分区等
$ fdisk 磁盘设备文件名

我上次就是使用这个命令进行分区的时候,将系统弄奔溃的,所以使用时候一定要万分小心,最后确定分区表是正确的之后,才输入w

今天就总结到这里。

Contents
  1. 1. 磁盘组成
  2. 2. MBR和磁盘分区表
    1. 2.1. MBR
    2. 2.2. 磁盘分区表
  3. 3. 磁盘与分区的设备文件名
    1. 3.1. 磁盘设备文件名
    2. 3.2. 分区设备文件名
    3. 3.3. 概念小结
  4. 4. fdisk