本文已参与「新人创作礼」活动,一起开启掘金创作之路。
我们知道一块磁盘是可以被分割成多个分割槽的(partition), 以 Windows 来看,你可能会有一块磁盘并且将他分割成为 C, D, E盘!那个 C, D, E 就是分割槽(partition)。但是 Linux 的装置都是以档案的型态存在,那分割槽的档名又是什么? 如何进行磁盘分区,磁盘分区有哪些限制?
磁盘连接的方式与装置文件名
我们知道个人计算机常见的磁盘接口有两种, 分别是 IDE 与 SATA 接口。 我们称呼可连接到 IDE 接口的装置为 IDE 装置,不管是磁盘还是光盘设备。但是注意,IDE其实已经是淘汰的产品,目前主流的固态硬盘基本是m.2接口。其实sata淘汰IDE也不是一蹴而就的。
机械硬盘连接到主板上的SATA接口,其实名为SATA串口,因为接口只有一个通道,也就是说硬盘一次只能传输1个bit的数据,速度非常慢,后来人们为了解决这个问题就发明了第二种接口,名为IDE并行接口,这个接口之所以叫做并行接口是因为它有八个通道,一次可以同时传输8个bit,也就是一字节的数据,这样速度就有了很大的提升,不过代价也很大,因为一个数据被分成8条路传输很容易出现数据丢失和信号干扰等问题。
造化弄人的是,随着时间推移,人们又回到了SATA串口上来了,不过这个串口已经不是当年的那个串口了。经历多年的发展,SATA3.0的带宽已经达到了6Gpbs的上限,换算下来也就是700MB/s的传输速度,这样一来硬盘的速度就不会受到接口带宽的限制了,直到现在我们用的基本都是走SATA3.0总线的SATA串口硬盘。
PS:注意,NVMe协议既可以使用在SATA接口也可以是M.2接口。AHCI协议只能用在SATA接口,前提是走SATA总线,如果走PCIe总线,那么AHCI也可以是M.2接口。如图:
我们还是以古老的IDE接口来说。由于一个 IDE 扁平电缆可以连接两个 IDE 装置,又通常主机都会提供两个 IDE 接口,因此最多可以接到四个 IDE 装置。 也就是说,如果你已经有一个光盘设备了,那举最多就叧能再接三颗 IDE 接口的磁盘。 这两个 IDE 接口通常被称为 IDE1(primary)及 IDE2(secondary), 而每条扁平电缆上面的 IDE 装置可以被区分为 Master 与 Slave。这四个 IDE 装置的文件名为:
| IDE\Jumper | Master | Slave |
|---|---|---|
| IDE1(Primary) | /dev/hda | /dev/hdb |
| IDE2(Secondary) | /dev/hdc | /dev/hdd |
再以 SATA 接口来说,由于 SATA/USB/SCSI 等磁盘接口都是使用 SCSI 模块来驱动的, 因此这些接口的磁盘装置文件名都是/dev/sd[a-p]的格式。 但是不 IDE 接口不同的是,SATA/USB 接口的磁盘根本就没有一定的顺序,那如何决定他的装置文件名呢? 这个时候就得要根据 Linux 核心侦测到磁盘的顺序了。
如果你的 PC 上面有两个 SATA 磁盘以及一个 USB 磁盘,而主板上面有六个 SATA 的插槽。这两个 SATA 磁盘分别安插在主板上的 SATA1, SATA5 插槽上, 请问这三个磁盘在Linux 中的装置文件名是怎样的?
答: 由于是使用侦测到的顺序来决定装置文件名,并非与实际插槽代号有关,因此装置的文件名如下:
- SATA1 插槽上的文件名:/dev/sda
- SATA5 插槽上的文件名:/dev/sdb
- USB 磁盘(开机完成后才被系统捉到):/dev/sdc
磁盘分区
目录树结构(directory tree):我们前面有谈过 Linux 内的所有数据都是以文件的形态来呈现的,因此,整个 Linux 系统最重要的地方就是在目录树架构。 所谓的目录树架构(directory tree)就是以根目录为主,然后向下呈现分支状的目录结构的一种文件架构。 所以,整个目录树架构最重要的就是那个根目录(root directory),这个根目录的表示方法为一条斜线『/』, 所有的文件都与目录树有关。目录树的呈现方式如下图所示:
如上图所示,所有的文件都是由根目录(/)衍生来的,而次目录之下还能够有其他的数据存在。
文件系统与目录树的关系(挂载):所谓的『挂载』就是利用一个目录当成进入点,将磁盘分区槽的数据放置在该目录下; 也就是说,进入该目录就可以读取该分割槽的意思。这个动作我们称为『挂载』,那个进入点的目录我们称为『挂载点』。 由于整个 Linux 系统最重要的是根目录,因此根目录一定需要挂载到某个分割槽的。 至于其他的目录则可依用户自己的需求来给予挂载到不同的分割槽。如下图:
上图中假设我的硬盘分为两槽,partition 1 是挂载到根目录,至于 partition 2 则是挂载到/home 这个目录。 也就是说,当我的数据放置在/home 内的各次目录时,数据是放置到 partition 2 的,如果不是放在/home 底下的目录, 那举数据就会被放置到 partition 1 。