DomBro Studio

磁盘与Linux分区

2017/12/11

Linux系统安装在哪里?当然是在硬盘上。

目录

1. 计算机硬盘(机械)

计算机上面的存储设备设备包括硬盘、软盘、MO、CD、DVD、磁带机、U盘等,都是可以用来存储数据的。而其中最常见的就是硬盘了。注意这里说的都是传统的机械硬盘。

1.1 硬盘的物理组成

大家应该都看过硬盘吧。硬盘依据桌面型与笔记本又分为3.5英寸及2.5英寸的大小。我们以3.5英寸的硬盘来说明。硬盘其实是由许多的盘片、机械手臂、磁头与主轴马达所组成的。它大概是长酱婶的

实际的数据都是写在具有磁性物质的盘片上,而读写主要是通过在机械手臂上的读取头(Head)来完成。实际运行时,主轴马达让盘片转动,然后机械手臂可伸展让读取头在盘片上面进行读写的操作。另外由于单一盘片的容量有限,因此有的硬盘内部会有两个以上的盘片。

1.2 盘片上的数据

整个盘片上面好像有多个同心圆绘制出的饼图,而由圆心以放射状的方式分割出磁盘的最小存储单位,那就是扇区(Sector),在物理组成分面,每个扇区大小为512bytes,这个值是不会改变的。而扇区组成一个圆就成为磁道(Track),如果是在多硬盘上面,在所有盘片上面的同一个磁道可以组成一个柱面(Cylinder),柱面也是一般我们分割硬盘时的最小单位了!
在计算整个硬盘的存储量时,简单的计算公式就是:header数量x每个header负责的柱面数量 x 每个柱面所含有的扇区数量 x 扇区的容量,单位换算为:header x cylinder/header x secter/cylinder x 512bytes/secter,简单的写法如下:Head x Cylinder x Sector x 512bytes。不过要注意的是,一般硬盘制造商在显示硬盘的容量时,大多是以十进制来编号,因此市售的500GB硬盘,理论上仅会有460GB左右的容量。盘片其实是酱婶的

1.3 传输接口

目前硬盘与主机系统的连接主要有下面传输接口规格

  • IDE接口

IDE接口插槽所使用的排线较宽,每条排线上面可以接两个 IDE 设备,由于可以接两个设备,为了判别两个设备的主/从(Master/Slave)架构,因此这种磁盘驱动器上面需要调整跳针(Jump)成为Master或Slave才行。这种接口的最高传输速度为Ultra 133规格,即每秒理论传输速度可达133MB。

  • SATS接口

每条SATA连接线仅能接一个SATA设备。SATA接口除了速度较快之外,由于其排线较细小,所以有利于主机壳内部的散热与安装。目前SATA已经发展到了第二代,其速度由SATA-1的每秒150MB提升到SATA-2每秒300MB的传输速度,因此目前主流的个人计算机硬盘已经被SATA替代了。

  • SCSI接口

另一种常见于工作站等级以上的硬盘传输接口为SCSI接口,这种接口的硬盘在控制器上含有一块处理器,所以除了运转速度快之外,也比较不会耗费CPU资源。在个人计算机上面这种接口的硬盘不常见。

2. 磁盘分区

Linux系统是安装在计算机组件的磁盘部分。一块磁盘是可以被分区成多个分区(partition),以 Windows 观点来看,你可能会有一块磁盘并且将它分区成为 C:, D:, E:盘。那个 C, D, E就是分区。但是Linux的设备都是以文件的类型存在,那分区的文件名又是什么?如何进行磁盘分区,磁盘分区有哪些限制?是我们这个小节所要探讨的内容。

2.1 磁盘连接的方式与设备文件名的关系

由上面传输接口可以知道,常见的个人计算机磁盘接口有两种,IDE和SATA(主流)接口。称可连接到IDE接口的设备为IDE设备,不管是磁盘还是光盘设备
以IDE接口来说,由于一个IDE扁平电缆可以连接两个IDE设备,通常主机又都会提供两个IDE接口,因此最多可以接到四个IDE设备。也就是说,如果你已经有一个光盘设备了,那么最多就只能再接三块IDE接口的磁盘。这两个IDE接口通常被称为IDE1(primary)及IDE2(secondary),而每条扁平电缆上面的IDE设备可以被区分为Master(主设备)与Slave(从设备)。IDE设备和文件名的关系是酱婶的

再以SATA接口来说,由于SATA/USB/SCSI等磁盘接口都是使用SCSI模块来驱动的,因此这些接口的磁盘设备文件名都是/dev/sd[a-p]的格式。但是与IDE接口不同的是,SATA/USB接口的磁盘根本就没有一定的顺序,那如何决定它的设备文件名呢?这个时候就得要根据Linux内核检测到磁盘的顺序了

  • SATA设备文件名例子
1
2
3
4
5
如果你的PC上面有两个SATA磁盘以及一个USB磁盘,而主板上面有六个SATA的插槽。这两个SATA磁盘分别安插在主板上的SATA1, SATA5插槽上,请问这三个磁盘在Linux中的设备文件名是什么?
答:由于是使用检测到的顺序来决定设备文件名,并非与实际插槽代号有关,因此设备的文件名如下:
1.SATA1插槽上的文件名:/dev/sda
2.SATA5插槽上的文件名:/dev/sdb
3.USB磁盘(开机完成后才被系统识别):/dev/sdc

这就是在Linux系统中不同接口的磁盘设备文件名,即 IDE接口的设备文件名为 /dev/hd[a-d] SATA接口的设备文件名为 /dev/sd[a-p]
可是知道了这些当然还不够!现在知道了每个磁盘设备文件名是什么,那磁盘的每个分区又该叫什么?为什么要这么纠结磁盘与设备的文件名捏?因为在Linux下面一切都是以文件的方式存在的

2.2 主引导分区与分区表

上面提到了磁盘的组成(由盘片、机械臂、磁头、主轴马达组成)和盘片上的数据,盘片上可以分出扇区和柱面两种单位,每个扇区有512byte那么大。在这么多的扇区里面磁盘的第一个扇区最重要!!因为第一块扇区记录了整块磁盘最重要的两个信息————主引导分区和分区表

  • 主引导分区(Master Boot Record,MBR)

可以安装引导加载程序的地方,有446bytes。MBR是非常重要的。系统在开机时会主动去读取这个区块的内容,这样系统才会知道你的程序放在哪了该如何进行开机。

  • 磁盘分区表

你拿到的整块硬盘就像原木,你必须要在这根木头上切割出你想要的区段,这个区段才能在制作成为你想要的家具。同样地道理,硬盘进行分区才能更好的被利用。
磁盘上面的起始与结束柱面(也就是柱面的号码)就是分区的最小单位,也就是文件系统的最小单位。其实就是利用柱面的参考柱面的号码进行磁盘的分区的。在分区表所在的64byte容量中,总共分为四组记录区,每组记录了该区段的起始与结束的柱面号码。若是以硬盘为长方形来看如下图

假设上图设备文件名为 /dev/hda 时,那么自四个分区在Linux系统中的设备文件名分别为 P1:/dev/hda1、P2:/dev/hda2、P3:/dev/hda3、P4:/dev/hda4 重点在于文件名后面的数字,这个数字与该分区所在的位置有关。由于分区表就只有64byte,最多只能容纳四个分区,这四个分区被称为主(Primary)或扩展(Extened)分区。

  • 分区本质

1.其实所谓的分区就是针对那个64bytes的分区表进行设置而已
2.硬盘默认的分区表仅能写入四组分区信息。这四组分区信息我们称为主(Primary)或扩展(Extended)分区。
3.分区的最小单位为柱面
4.当系统写入磁盘时,一定会参考磁盘分区表,才能针对某个分区进行数据处理。

2.3 磁盘分区原因

有没有想过这个问题,磁盘为什么要进行分区?处于以下两个方面的考虑

  • 数据的安全性

因为每个分区的数据是分开的。所以,当你需要将某个分区的数据重整时,例如你要重新安装Windows时,可以将C盘中其他重要数据移到其他分区,例如将邮件、桌面数据移动到D盘去,那么重装系统并不会影响到D盘。所以善用分区,可以让你的数据更安全。

  • 系统的性能考虑

由于分区将数据集中在某个柱面的区段,例如上图 当中第一个分区位于柱面号码 1~100号,如此一来当有数据要读取自该分区时,磁盘只会搜寻前面1~100的柱面范围,由于数据集中了,将有助于数据读取的速度与性能!所以说,分区是很重要的。

2.4 扩展分区与逻辑分区

有没有想过这个问题,既然分区表只有记录四组数据的空间,那是不是一块硬盘最多可以分出四个分区?我默默的看了一眼放在H盘下面的岛国动作片,显然我的电脑不止四个分区。可以做到不止四个分区的操作是如何达到的呢?答案就是扩展分区

  • 扩展分区

扩展分区的想法是,既然第一个扇区所在的分区表只能记录四条数据,那我是否可以利用额外的扇区来记录更多的分区信息?就像下图

图中P1为主分区,P2则为扩展分区。这个扩展分区的目的是使用额外的扇区来记录分区信息,扩展分区本身并不能拿来格式化,因为他并不是一个可以挂载的文件系统。我们可以通过扩展分区所指向的那个区块继续做分区的记录。

  • 逻辑分区

扩展分区指向的区块在进行切割出来的就是逻辑分区。由于逻辑分区是由扩展分区继续分区出来的,所以他可以使用的柱面范围就是扩展分区设定的范围!
逻辑分区的数量依操作系统而不同,在Linux系统中,IDE硬盘最多有59个逻辑分区(5号到63号),SATA硬盘则有11个逻辑分区(5号到15号)。

1
2
3
4
5
6
7
8
9
同样,上图分区在Linux系统中的设备文件名分别如下:
P1:/dev/hda1
P2:/dev/hda2
L1:/dev/hda5
L2:/dev/hda6
L3:/dev/hda7
L4:/dev/hda8
L5:/dev/hda9
仔细看看,怎么设备文件名没有/dev/hda3 与/dev/hda4 呢?因为前面四个号码都是保留给Primary或Extended用的。所以逻辑分区的设备名称号码就由5号开始了,这是个很重要的特性,不能忘记。

  • 主分区、扩展分区与逻辑分区的特性的简单定义

主分区和扩展分区最多可以有四个(硬盘限制)
扩展分区最多只能有一个(操作系统限制)
逻辑分区是由扩展分区持续切割出来的分区
能够被格式化后作为数据访问的为主分区和逻辑分区。扩展分区无法格式化

3. 文件系统与目录树的关系

在Linux中所有文件都是以文件形态来呈现的。

3.1 目录树结构

Linux内的所有数据都是以文件的形态来呈现的,所以,整个Linux系统最重要的地方就是在于目录树结构。所谓的目录树结构(directory tree)就是以根目录为主,然后向下呈现分支状的目录结构的一种文件结构。所以,整个目录树结构最重要的就是那个根目录(root directory),这个根目录的表示方法为一条斜线“/”,所有的文件都与目录树有关。目录树的呈现方式如图

整个Linux系统使用的是目录树结构,但是我们的文件数据其实是放置在磁盘分区当中的,如何结合目录树的架构与磁盘内的数据,这就涉及到了挂载

文件系统与目录树的关系(挂载)

挂载就是利用一个目录当成进入点,将磁盘分区的数据放置在该目录下,也就是说,进入该目录就可以读取该分区的意思。这个操作就叫挂载。这个进入点我们称为挂载点 。由于整个Linux系统最重要的是根目录,因此根目录一定需要挂载到某个分区的。至于其他的目录则可依用户自己的需求来给予挂载到不同的分区。
举个栗子

图 中假设我的硬盘分为两区,partition 1 挂载到根目录,至于 partition 2 则是挂载到/home这个目录。这也就是说,当我的数据放置在/home 内的各次目录时,数据是放置到 partition 2 的,如果不是放在/home 下面的目录,那么数据就会被放置到 partition 1。
其实判断某个文件在哪个partition下面是很简单的(前提是你要知道有哪些patrition),通过反向追踪即可。以上图来说,当我想要知道/home/vbird/test 这个文件在哪个 partition 时,由test –> vbird –> home –>/,看哪个“进入点”先被查到那就是使用的进入点了。所以test使用的是/home这个进入点而不是/

总结

简单归纳了计算机磁盘和Linux文件系统的关系

说明

整理笔记参考了 《鸟哥的Linux私房菜》 一书。这本书我是买的京东阅读的正版电子书籍。

如果不想买书看的话可以直接戳这里进入鸟哥Linux私房菜的线上博客 : http://linux.vbird.org/。请大家支持正版!!

至于笔记中的命令我是都敲过一遍的并进行了理解,并不是单纯的复制粘贴呦!

CATALOG
  1. 1. 目录
  2. 2. 1. 计算机硬盘(机械)
    1. 2.1. 1.1 硬盘的物理组成
    2. 2.2. 1.2 盘片上的数据
    3. 2.3. 1.3 传输接口
  3. 3. 2. 磁盘分区
    1. 3.1. 2.1 磁盘连接的方式与设备文件名的关系
    2. 3.2. 2.2 主引导分区与分区表
    3. 3.3. 2.3 磁盘分区原因
    4. 3.4. 2.4 扩展分区与逻辑分区
  4. 4. 3. 文件系统与目录树的关系
    1. 4.1. 3.1 目录树结构
    2. 4.2. 文件系统与目录树的关系(挂载)
    3. 4.3. 总结
    4. 4.4. 说明