这一章在规划的重点是为了要安装Linux,那Linux系统是安装在计算机组件的哪个部分呢?就是磁盘啦!所有先来认识一下磁盘。我们知道一块磁盘是可以被分割成多个分割槽的(partition),以旧有的Windows观点来看,你可能会有一颗磁盘并且将它分割成为C: , D: , E: 槽!那个C,D,E就是分割槽。但是Linux的硬件设备都是以文件的形态存在,那分割槽的文件名又是什么?如何进行磁盘分区,磁盘分区有哪些限制?
磁盘的组成主要有磁盘盘、机械手臂、磁盘读取头与主轴马达所组成,而数据的写入其实是在磁盘盘上面。磁盘盘上面又可细分出扇区(sector)与磁柱(cylinder)两种单位,其中扇区每个为512byte那么大。
那么是否每个扇区都一样重要呢?其实整颗磁盘的第一个扇区特别重要,因为它记录了整颗磁盘的重要信息!磁盘的第一个扇区主要记录了两个重要的信息,分别是:
MBR是很重要的,因为当系统在开机的时候会主动去读取这个区块的内容,这样系统才会知道你的程序放在哪里且该如何进行开机。如果你要安装多重引导的系统,MBR这个区块的管理就非常的重要了。
那么分割表又是啥?其实你刚刚拿到的整颗硬盘就像一根原木,你必须要在这根原木上面切割出你想要的区段,这个区段才能够再制作成为你想要的家具!如果没有进行切割,那么原木就不能被有效的使用。同样的道理,你必须要针对你的硬盘进行分割,这样硬盘才可以被你使用的。
在上一小节的图示中,我们有看到“开始与结束磁柱”,那是文件系统的最小单位,也就是分隔槽的最小单位。我们就是利用参考对照磁柱号码的方式来处理。在分割表所在的64bytes容量中,总共分为四组记录区,每组记录区记录了该区段的起始与结束的磁柱号码。若将硬盘以长条形来看,然后将磁柱以柱形图来看,那么64bytes的记录区段有点像底下的图示:
假设上面的硬盘设备文件名为 /dev/hda时,那么这四个分隔槽在Linux系统中的设备文件名如下所示。重点在于文件名后面会再接一个数字,这个数字与该分隔槽所在的位置有关。
上图中我们假设硬盘只有400个磁柱,共分割成四个分割槽,第四个分割槽所在为第301到400号磁柱的范围。当你的操作系统为Windows时,那么第一个到第四个分割槽的代号应该就是C, D, E, F。当你有资料要写入F槽时,你的数据会被写入这颗磁盘的301~400号磁柱之间。
由于分割表就只有64bytes而已,最多只能容纳四笔分割的记录,这四个分割的记录被称为主要(Primary)或延伸(Extended)分割槽。根据上面的图示与说明,我们可以得到几个重点信息:
为啥要分割啊?基本上可以这样思考分割的角度:
既然分割表只有四组数据的空间,那么是否代表我一颗硬盘最多只能分割出四个分隔槽?当然不是啦,有经验的朋友都知道,你可以将一颗硬盘分割成十个以上的分割槽。那又是如何达到的呢?在Windows/Linux系统中,我们是透过刚刚谈到的延伸分割(Extended)的方式来处理的。延伸分割的想法是:既然第一个扇区所在的分割表只能记录四笔数据,那我可否利用额外的扇区来记录更多的分割信息?实际上图示有点像底下这样:
在上图当中,我们知道硬盘的四个分割记录区仅使用到两个,P1为主要分割,P2则为延伸分割,请注意,延伸分割的目的是使用额外的扇区来记录分割信息,延伸分割本身并不能被拿来格式化。然后我们可以透过延伸分割所指向的那个区块继续做分割的记录。
如上图右下方那个区块又继续分割出五个分割槽,这五个由延伸分割继续切出来的分割槽,就被称为逻辑分割槽(logical partition)。同时注意一下,由于逻辑分割槽是由延伸分割继续分割出来的,所以它可以使用的磁柱范围就是延伸分割所设定的范围,也就是图中的101~400.
同样的,上述的分割槽在Linux系统中的设备文件名分别如下:
仔细看看,怎么设备文件名没有 /dev/hda3 与 /dev/hda4呢?因为前面四个号码都是保留给Primary或Extended用的,所以逻辑分割槽的设备名称号码就由5号开始了。这是个很重要的特性!
主要分割、延伸分割与逻辑分割的特性我们作个简单的定义:
事实上,分割是个很麻烦的东西,因为它是以磁柱为单位的连续磁盘空间,且延伸分割又是个类似独立的磁盘空间,所以在分割的时候得要特别注意。
第一个扇区所记录的分割表与MBR非常重要,几乎只要读取硬盘都会先由这个扇区先读起。因此,如果整颗硬盘的第一个扇区物理实体坏掉了,那这个硬盘大概就没有用了。因为系统如果找不到分割表,怎么知道如何读取磁柱区间呢。
为了计算机硬件系统的资源合理分配,因此有了操作系统这个系统软件的产生。由于操作系统会控制所有的硬件并且提供核心功能,因此我们的计算机就能够认识硬盘内的文件系统,并且进一步的读取硬盘内的软件文件与执行该软件来达成各项软件的执行目的。
既然操作系统也是软件,那么我的计算机又是 如何认识这个操作系统软件并且执行它的?明明开机时我的计算机还没有任何软件系统,那它要如何读取硬盘内的操作系统文件啊?这就牵涉到计算机的开机程序了。
这里提及两个东西:CMOS和BOIS。CMOS是记录各项硬件参数且嵌入在主板上面的存储器,BIOS则是一个写入到主板上的一个程序。这个BIOS就是在开机的时候,计算机系统会主动执行的第一个程序。
接下来BIOS回去分析计算机里面有哪些存储设备,我们以硬盘为例,BIOS会依据使用者的设定去取得能够开机的硬盘,并且到该硬盘里面去读取第一个扇区的MBR位置。MBR这个仅有446bytes的硬盘容量里面会放置最基本的开机管理程序,此时BIOS就功成圆满,而接下来就是MBR内的开机管理程序的工作了。
这个开机管理程序的目的是在加载操作系统内核文件,由于开机管理程序是操作系统在安装的时候所提供的,所以它会认识硬盘内的文件系统格式,因此就能够读取内核文件,然后接下来就是内核文件的工作,开机管理程序也功成圆满,之后就是大家所知道的操作系统的任务了。
简单的说,整个开机流程到操作系统之前的动作应该是这样的:
BootLoader的主要任务有:
转交其他loader表示你的计算机系统里面可能具有两个以上的开机管理程序,我们的硬盘不是只有一个MBR而已,开机管理程序除了可以安装在MBR之外,还可以安装在每个分割槽的启动扇区(boot sector)。这个特色才能造就“多重引导”的功能。
所谓挂载就是利用一个目录当成进入点,将磁盘分割槽的数据放置在该目录下,也就是说,进入该目录就可以读取该分割槽,这个动作我们称为挂载。由于整个Linux系统最重要的是根目录,因此根目录一定需要挂载到某个分割槽。至于其他的目录则可依用户自己的需求给予挂载到不同的分割槽。