磁盘连接的方式与装置文件名的关系
个人计算机常见癿磁盘接口有两种, 分别是 IDE 与 SATA 接口
,目前主流已经是 SATA 接口了,但是老一点主机其实大部分还是使用 IDE 接口。 我们称呼可连接到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 内核检测到磁盘的顺序了!
例题:
如果你的 PC 上面有两个 SATA 磁盘以及一个 USB 磁盘,而主板上面有六个 SATA 的插槽。这两个 SATA 磁盘分别安插在主板上的SATA1, SATA5 插槽上, 请问这三个磁盘在Linux 中的装置文件名为何?
答:
由二是使用侦测到的顺序来决定装置文件名,并非与实际插槽代号有关,因此装置的文件名如下:
1. SATA1 插槽上的文件名:/dev/sda
2. SATA5 插槽上的文件名:/dev/sdb
3. USB 磁盘(开机完成后才被系统捉到):/dev/sdc
磁盘的组成
整颗磁盘的第一个扇区特别的重要,因为他记录了整颗磁盘的重要信息! 磁盘的第一个扇区主要记录了两个重要的信息,分别是:
• 主引导分区(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)分区
• 分区的最小单位为柱面(cylinder)
• 当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分割进迚行数据的处理
扩展分区的想法是:既然第一个扇区所在的分区表只能记录四条数据, 那我可否利用额外的扇区来记录更多的分区信息?实际上图示有点像下面这样:
上图当中,我们知道硬盘的四个分区记录表仅使用到两个,P1为主分区,而 P2则为扩展分区。
请注意,扩展分区的目地是使用额外的扇区来记录分区信息,扩展分区本身不能被拿来格式化
。然后我们可以透过扩展分区所指向的那个区块继续作分区的记录。
如上图右下方那个区块有继续分割出五个分区, 这五个由扩展分区继续切出来的分区,就被称为逻辑分区(logical partition)
。 同时注意一下,由于逻辑分区是由扩展分区继续分割出来的,所以他可以使用的柱面范围就是扩展分区所设定的范围。也就是图中的 101~400 啦!
同样的,上述的分割槽在 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 号开始了!这是个很重要的特性
主分区、扩展分区与逻辑分区的特性我们作个简单的定义:
• 主分区与扩展分区最多可以有四个(硬盘的限制)
• 扩展分区最多只能有一个(操作系统的限制)
• 逻辑分区是由扩展分区持续切割出来的分区
• 能够被格式化后作为数据存储的分区为主分区与逻辑分割。逻辑分区无法格式化
• 扩展分区的数量依操作系统而不同,在 Linux系统中,IDE 硬盘最多有 59 个逻辑分割(5 号到63 号), SATA 硬盘则有 11 个逻辑分割(5 号到 15 号)。
事实上,分区是个很麻烦的东西,因为他是以柱面为单位的『连续』磁盘空间,且扩展分区又是个类似独立的磁盘空间
,所以在分区的时候得要特别注意。我们用例子来解释一下好了:
例题:
在 Windows 操作系统当中,如果你想要将 D 与 E 盘整合成为一个新的分割槽,而如果有两种分区的情况如下图所示, 图中的特殊颜色区块为 D 不 E 盘的示意,请问这两种方式是否均可将 D 与 E 整合成为一个新的分区?
答:
• 上图可以整合:因为上图的 D 不 E 同属于扩展分区内的逻辑分割,因此只要将两个分区删除,然后再重新建立一个新的分区, 就能够在不影响其他分区的情况下,将两个分区的容量整合成为一个。
• 下图不可整合:因为 D 与 E 分属主分区与逻辑分割,两者不能能够整合在一起。除非将扩展分区破坏掉后再重新分割。 但如此一来会影响到所有的逻辑分区,要注意的是:如果扩展分区被破坏,所有逻辑分区将会被删除。 因为逻辑分区的信息都记录在扩展分区里面。
由二第一个扇区所记录的分区表与 MBR 是很重要的,几乎只要读取硬盘都会先由这个扇区先读起。因此,如果整颗硬盘的第一个扇区(就是 MBR 与 partition table 所在的扇区)物理实体坏掉了,那这个硬盘大概就没有用了! 因为系统如果找不到分区表,怎么知道如何读取柱面区间呢。
开机流程与主引导分区(MBR)
在计算器里面有BIOS 与 CMOS 两个东西, CMOS 是记录各项硬件参数且嵌入在主板上面的储存器
,BIOS 则是一个写入到主板上的一个韧体(再次说明, 韧体就是写入到硬件上的一个软件程序
)。 这个 BIOS 就是在开机的时候,计算机系统会主动执行的第一个程序!
接下来 BIOS 会去分析计算机里面有哪些储存设备,我们以硬盘为例,BIOS 会依据使用者的设定去取得能够开机的硬盘, 并且到该硬盘里面去读取第一个扇区的 MBR 位置。 MBR 这个仅有 446 bytes 的硬盘容量里面会放置最基本的开机管理程序, 此时 BIOS 就功成圆满,而接下来就是 MBR 内的开机管理程序的工作了。
这个开机管理程序的目地是在加载(load)核心档案, 由于开机管理程序是操作系统在安装的时候所提供的,所以他会认识硬盘内的文件系统格式,因此就能够读取内核文件, 然后接下来就是内核文件的工作,开机管理程序也功成圆满,之后就是大家所知道的操作系统的任务啦!
简单的说,整个开机流程到操作系统之前的动作应该是这样的:
1.BIOS:开机主动执行的韧体,会认识第一个可开机的装置
2.MBR:第一个可开机装置的第一个扇区内的主要启动记录区块,内包含开机管理程序
3.开机管理程序(boot loader):一支可读叏核心档案来执行的软件
4.内核文件:开始操作系统的功能…
由上面的说明我们会知道,BIOS 与 MBR 都是硬件本身会支持的功能,至于 Boot loader 则是操作系统安装在 MBR 上面的一套软件了。由于 MBR 仅有 446 bytes 而已,因此这个开机管理程序是非常小而完美的。
这个 boot loader 的主要任务有以下这些项目:
• 提供菜单:用户可以选择不同的开机项目,这也是多重引导的重要功能
• 载入核心档案:直接指向可开机的程序区段来开始操作系统
• 转交其他 loader:将开机管理功能转交给其他 loader 负责
Linux 安装模式下, 磁盘分区的选择
目录树结极(directory tree)
整个 Linux 系统最重要的地方就是在于目录树结构。
所以,整个目录树结构最重要的就是那个根目录(root directory),这个根目录的表示方法为一条斜线『/』 , 所有的文件都与目录树有关。
文件系统与目录树的关系(挂载)
所谓『挂载』就是利用一个目录当成进入点,将磁盘分区的数据放置在该目录下; 也就是说进入该目录就可以读取该分区的意思。这个动作我们称为『挂载』,那个进入点的目录我们称为『挂载点』。
文章整理至《鸟哥的私房菜(第3版)》
鸟哥 著