Linux系统中,一切皆是文件。磁盘分区是文件系统的第一步。
各硬件装置在Linux中的文件名
在Linux系统中,每个装置都被当成一个文件来对待。举例来说,IDE接口的硬盘的文件名称即为/dev/hd[a-d],其中, 括号内的字母为a-d当中的任意一个,亦即有/dev/hda, /dev/hdb, /dev/hdc, 及 /dev/hdd这四个文件的意思。
另外先提出来强调一下,在Linux这个系统当中,几乎所有的硬件装置文件都在/dev这个目录内, 所以你会看到/dev/hda, /dev/fd0等等的文件名。 | 鸟哥的图示 |
---|
那么打印机与软盘呢?分别是/dev/lp0, /dev/fd0罗!好了,其他的周边设备呢? 底下列出几个常见的装置与其在Linux当中的文件名:
装置 | 装置在Linux内的档名 |
---|---|
IDE硬盘机 | /dev/hd[a-d] |
SCSI/SATA/U盘硬盘机 | /dev/sd[a-p] |
U盘快闪碟 | /dev/sda-p |
软盘机 | /dev/fd[0-1] |
打印机 | 25针: /dev/lp[0-2] U盘: /dev/usb/lp[0-15] |
鼠标 | U盘: /dev/usb/mouse[0-15] PS2: /dev/psaux |
当前CDROM/DVDROM | /dev/cdrom |
当前的鼠标 | /dev/mouse |
磁带机 | IDE: /dev/ht0 SCSI: /dev/st0 |
需要特别留意的是硬盘机(不论是IDE/SCSI/U盘都一样),每个磁盘驱动器的磁盘分区(partition)不同时, 其磁盘文件名还会改变呢!
MBR
磁盘的第一个磁区主要记录了两个重要的资讯,分别是:
- 主要启动记录区(Master Boot Record, MBR):可以安装启动管理程序的地方,有446 bytes
- 分割表(partition table):记录整颗硬盘分割的状态,有64 bytes
MBR是很重要的,因为当系统在启动的时候会主动去读取这个区块的内容,这样系统才会知道你的程序放在哪里且该如何进行启动。 如果你要安装多重启动的系统,MBR这个区块的管理就非常非常的重要了!
磁盘分区表(partition table)
分割表所在的64 bytes容量中,总共分为四组记录区,每组记录区记录了该区段的启始与结束的磁柱号码。 若将硬盘以长条形来看,然后将磁柱以直条图来看,那么那64 bytes的记录区段有点像底下的图示:
磁盘分区表的作用示意图磁盘分区表的作用示意图
假设上面的硬盘装置档名为/dev/hda时,那么这四个分割槽在Linux系统中的装置档名如下所示, 重点在文件名后面会再接一个数字,这个数字与该分割槽所在的位置有关喔!
- P1:/dev/hda1
- P2:/dev/hda2
- P3:/dev/hda3
- P4:/dev/hda4
由於分割表就只有64 bytes而已,最多只能容纳四笔分割的记录, 这四个分割的记录被称为主要(Primary)或延伸(Extended)分割槽。 根据上面的图示与说明,我们可以得到几个重点资讯:
- 其实所谓的『分割』只是针对那个64 bytes的分割表进行配置而已!
- 硬盘默认的分割表仅能写入四组分割信息
- 这四组分割信息我们称为主要(Primary)或延伸(Extended)分区
- 分区的最小单位为磁柱(cylinder)
- 当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分区进行数据的处理
- P(primary)+E(extended)最多只能有四个,其中E最多只能有一个
由于P(primary)+E(extended)最多只能有四个,其中E最多只能有一个。要分出更多的区可以通过一个扩展分区进行分配。如下图:
-
P+P+P+E的环境:
分割示意图
分割示意图实际可用的是/dev/sdb1, /dev/sdb2, /dev/sdb3, /dev/sdb5, /dev/sdb6, /dev/sdb7这六个,至於/dev/sdb4这个扩展分配本身仅是提供来给逻辑分割槽创建之用。
-
P+E的环境:
分割示意图
分割示意图第一个逻辑分割槽一定是由5号开始的!所以/dev/sdb3, /dev/sdb4就会被保留下来没有用到了!
-
启动流程与主要启动记录区(MBR)
在计算机里有BIOS与CMOS两个东西, CMOS是记录各项硬件参数且嵌入在主板上面的储存器,BIOS则是一个写入到主板上的一个韧体( 韧体就是写入到硬件上的一个软件程序)。这个BIOS就是在启动的时候,计算机系统会主动运行的第一个程序了!
接下来BIOS会去分析计算机里面有哪些储存设备,我们以硬盘为例,BIOS会依据使用者的配置去取得能够启动的硬盘, 并且到该硬盘里面去读取第一个磁区的MBR位置。 MBR这个仅有446 bytes的硬盘容量里面会放置最基本的启动管理程序, 此时BIOS就功成圆满,而接下来就是MBR内的启动管理程序的工作了。
这个启动管理程序的目的是在加载(load)核心文件, 由於启动管理程序是操作系统在安装的时候所提供的,所以他会认识硬盘内的文件系统格式,因此就能够读取核心文件, 然后接下来就是核心文件的工作,启动管理程序也功成圆满,之后就是大家所知道的操作系统的任务啦!
简单的说,整个启动流程到操作系统之前的动作应该是这样的:
- BIOS:启动主动运行的韧体,会认识第一个可启动的装置;
- MBR:第一个可启动装置的第一个磁区内的主要启动记录区块,内含启动管理程序;
- 启动管理程序(boot loader):一支可读取核心文件来运行的软件;
- 核心文件:开始操作系统的功能...
由上面的说明我们会知道,BIOS与MBR都是硬件本身会支持的功能,至于Boot loader则是操作系统安装在MBR上面的一套软件了。由与MBR仅有446 bytes而已,因此这个启动管理程序是非常小而美的。 这个boot loader的主要任务有底下这些项目:
- 提供菜单:使用者可以选择不同的启动项目,这也是多重启动的重要功能!
- 加载核心文件:直接指向可启动的程序区段来开始操作系统;
- 转交其他loader:将启动管理功能转交给其他loader负责。
举一个例子来说,假设你的个人计算机只有一个硬盘,里面切成四个分割槽,其中第一、二分割槽分别安装了Windows及Linux, 你要如何在启动的时候选择用Windows还是Linux启动呢?假设MBR内安装的是可同时认识Windows/Linux操作系统的启动管理程序, 那么整个流程可以图示如下:
启动管理程序的工作运行示意图启动管理程序的工作运行示意图
在上图中我们可以发现,MBR的启动管理程序提供两个菜单,菜单一(M1)可以直接加载Windows的核心文件来启动; 菜单二(M2)则是将启动管理工作交给第二个分割槽的启动磁区(boot sector)。当使用者在启动的时候选择菜单二时, 那么整个启动管理工作就会交给第二分割槽的启动管理程序了。 当第二个启动管理程序启动后,该启动管理程序内(上图中)仅有一个启动菜单,因此就能够使用Linux的核心文件来启动。 这就是多重启动的工作情况啦!我们将上图作个总结:
- 每个分割槽都拥有自己的启动磁区(boot sector)
- 图中的系统分区为第一及第二分区
- 实际可启动的核心文件是放置到各分区内
- loader只会认识自己的系统分区的可启动核心文件,以及其他loader而已;
- loader可直接指向或者是间接将管理权转交给另一个管理程序。
目录树结构(directory tree)
Linux系统最重要的地方在于目录树架构。 所谓的目录树架构(directory tree)就是以根目录为主,然后向下呈现分支状的目录结构的一种文件架构。 所以,整个目录树架构最重要的就是那个根目录(root directory),这个根目录的表示方法为一条斜线『/』, 所有的文件都与目录树有关。目录树的呈现方式如下图所示:
目录树相关性示意图目录树相关性示意图
如上图所示,所有的文件都是由根目录(/)衍生来的,而次目录之下还能够有其他的数据存在。
文件系统与目录树的关系(挂载)
所谓的『挂载』就是利用一个目录当成进入点,将磁盘分区的数据放置在该目录下; 也就是说,进入该目录就可以读取该分区的意思。这个动作我们称为『挂载』,那个进入点的目录我们称为『挂载点』。 由于整个Linux系统最重要的是根目录,因此根目录一定需要挂载到某个分割槽的。 至於其他的目录则可依使用者自己的需求来给予挂载到不同的分分区。我们以下图来作为一个说明:
目录树与分割槽之间的相关性目录树与分割槽之间的相关性
上图中假设我的硬盘分为两个分区,partition 1是挂载到根目录,partition 2则是挂载到/home这个目录。 这也就是说,当我的数据放置在/home内的各次目录时,数据是放置到partition 2的,如果不是放在/home底下的目录, 那么数据就会被放置到partition 1了!
网友评论