11.云计算&大数据_linux基础知识(10)什么是linux_硬盘&硬盘分区
一.硬盘与储存设备
计算机总是需要记录与读取数据的,而这些数据当然不可能每次都由使用者经过键盘来打字!所以就需要有储存设备咯。 计算机系统上面的储存设备包括有:硬盘、软盘、MO、CD、DVD、磁带机、随身碟(快闪内存)、还有新一代的蓝光光驱等, 乃至於大型机器的区域网络储存设备(SAN, NAS)等等,都是可以用来储存数据的。而其中最常见的应该就是硬盘了吧!
- 硬盘的物理组成
大家应该都看过硬盘吧!硬盘依据桌上型与笔记型计算机而有分为3.5寸及2.5寸的大小。我们以3.5寸的桌上型计算机使用硬盘来说明。 在硬盘盒里面其实是由许许多多的圆形磁碟盘、机械手臂、 磁碟读取头与主轴马达所组成的,整个内部如同下图所示:
图2.4.1、硬盘物理构造(图片取自维基百科)
实际的数据都是写在具有磁性物质的磁碟盘上头,而读写主要是透过在机械手臂上的读取头(head)来达成。 实际运作时, 主轴马达让磁碟盘转动,然后机械手臂可伸展让读取头在磁碟盘上头进行读写的动作。 另外,由於单一磁碟盘的容量有限,因此有的硬盘内部会有两个以上的磁碟盘喔!
- 磁碟盘上的数据
既然数据都是写入磁碟盘上头,那么磁碟盘上头的数据又是如何写入的呢? 其实磁碟盘上头的数据有点像下面的图示所示:
图2.4.2、磁碟盘上的数据格式
整个磁碟盘上头好像有多个同心圆绘制出的圆形图,而由圆心以放射状的方式分割出磁碟的最小储存单位,那就是磁区(Sector), 在物理组成分面,每个磁区大小为512Bytes,这个值是不会改变的。而磁区组成一个圆就成为磁轨(track), 如果是在多碟的硬盘上面,在所有磁碟盘上面的同一个磁轨可以组成一个磁柱(Cylinder), 磁柱也是一般我们分割硬盘时的最小单位了!
在计算整个硬盘的储存量时,简单的计算公式就是:『header数量 * 每个header负责的磁柱数量 * 每个磁柱所含有的磁区数量 * 磁区的容量』,单位换算为『header * cylinder/header * secter/cylinder * 512bytes/secter』,简单的写法如下: Head x Cylinder x Sector x 512 Bytes。 不过要注意的是,一般硬盘制造商在显示硬盘的容量时,大多是以十进位来编号,因此市售的500GB硬盘, 理论上仅会有460GBytes左右的容量!
二.磁碟连接的方式与装置档名的关系
以IDE介面来说,由於一个IDE排线可以连接两个IDE装置,又通常主机都会提供两个IDE介面,因此最多可以接到四个IDE装置。 也就是说,如果你已经有一个光盘设备了,那么最多就只能再接三颗IDE介面的磁碟罗。 这两个IDE介面通常被称为IDE1(primary)及IDE2(secondary), 而每条排线上面的IDE装置可以被区分为Master与Slave。这四个IDE装置的档名为:
再以SATA介面来说,由於SATA/U盘/SCSI等磁碟介面都是使用SCSI模块来驱动的, 因此这些介面的磁碟装置档名都是/dev/sd[a-p]的格式。 但是与IDE介面不同的是,SATA/U盘介面的磁碟根本就没有一定的顺序,那如他的装置档名就得要根据Linux核心侦测到磁碟的顺序来觉定
三.磁碟的组成补充
我们在计算机概论谈过磁碟的组成主要有磁碟盘、机械手臂、磁碟读取头与主轴马达所组成, 而数据的写入其实是在磁碟盘上面。磁碟盘上面又可细分出磁区(Sector)与磁柱(Cylinder)两种单位, 其中磁区每个为512bytes那么大。假设磁碟只有一个磁碟盘,那么磁碟盘有点像底下这样:
图2.2.1、磁碟盘组成示意图
那么是否每个磁区都一样重要呢?其实整颗磁碟的第一个磁区特别的重要,因为他记录了整颗磁碟的重要资讯! 磁碟的第一个磁区主要记录了两个重要的资讯,分别是:
- 主要启动记录区(Master Boot Record, MBR):可以安装启动管理程序的地方,有446 bytes
- 分割表(partition table):记录整颗硬盘分割的状态,有64 bytes
MBR是很重要的,因为当系统在启动的时候会主动去读取这个区块的内容,这样系统才会知道你的程序放在哪里且该如何进行启动。 如果你要安装多重启动的系统,MBR这个区块的管理就非常非常的重要了!
那么分割表又是啥?其实你刚刚拿到的整颗硬盘就像一根原木,你必须要在这根原木上面切割出你想要的区段, 这个区段才能够再制作成为你想要的家具!如果没有进行切割,那么原木就不能被有效的使用。 同样的道理,你必须要针对你的硬盘进行分割,这样硬盘才可以被你使用的!
四.磁盘分区表(partition table)
我们就是利用参考对照磁柱号码的方式来处理啦! 在分割表所在的64 bytes容量中,总共分为四组记录区,每组记录区记录了该区段的启始与结束的磁柱号码。 若将硬盘以长条形来看,然后将磁柱以直条图来看,那么那64 bytes的记录区段有点像底下的图示:
图2.3.1、磁盘分区表的作用示意图
假设上面的硬盘装置档名为/dev/hda时,那么这四个分割槽在Linux系统中的装置档名如下所示, 重点在於档名后面会再接一个数字,这个数字与该分割槽所在的位置有关喔!
- P1:/dev/hda1
- P2:/dev/hda2
- P3:/dev/hda3
- P4:/dev/hda4
上图中我们假设硬盘只有400个磁柱,共分割成为四个分割槽,第四个分割槽所在为第301到400号磁柱的范围。 当你的操作系统为Windows时,那么第一到第四个分割槽的代号应该就是C, D, E, F。当你有数据要写入F槽时, 你的数据会被写入这颗磁碟的301~400号磁柱之间的意思。
由於分割表就只有64 bytes而已,最多只能容纳四笔分割的记录, 这四个分割的记录被称为主要(Primary)或延伸(Extended)分割槽。 根据上面的图示与说明,我们可以得到几个重点资讯:
- 其实所谓的『分割』只是针对那个64 bytes的分割表进行配置而已!
- 硬盘默认的分割表仅能写入四组分割资讯
- 这四组分割资讯我们称为主要(Primary)或延伸(Extended)分割槽
- 分割槽的最小单位为磁柱(cylinder)
- 当系统要写入磁碟时,一定会参考磁盘分区表,才能针对某个分割槽进行数据的处理
分割的目的:
- 数据的安全性:
因为每个分割槽的数据是分开的!所以,当你需要将某个分割槽的数据重整时,例如你要将计算机中Windows的C槽重新安装一次系统时, 可以将其他重要数据移动到其他分割槽,例如将邮件、壁纸数据移动到D槽去,那么C槽重灌系统并不会影响到D槽! 所以善用分割槽,可以让你的数据更安全。 - 系统的效能考量:
由於分割槽将数据集中在某个磁柱的区段,例如上图当中第一个分割槽位於磁柱号码1~100号,如此一来当有数据要读取自该分割槽时, 磁碟只会搜寻前面1~100的磁柱范围,由於数据集中了,将有助於数据读取的速度与效能!所以说,分割是很重要的!
既然分割表只有记录四组数据的空间,那么是否代表我一颗硬盘最多只能分割出四个分割槽?当然不是啦!在Windows/Linux系统中, 我们是透过刚刚谈到的扩展分配(Extended)的方式来处理的啦!
在上图当中,我们知道硬盘的四个分割记录区仅使用到两个,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号)。
五.启动流程与主要启动记录区(MBR)
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负责。
上面前两点还容易理解,但是第三点很有趣喔!那表示你的计算机系统里面可能具有两个以上的启动管理程序呢! 有可能吗?我们的硬盘不是只有一个MBR而已?是没错啦!但是启动管理程序除了可以安装在MBR之外, 还可以安装在每个分割槽的启动磁区(boot sector)喔!瞎密?分割槽还有各别的启动磁区喔? 没错啊!这个特色才能造就『多重启动』的功能啊!
我们举一个例子来说,假设你的个人计算机只有一个硬盘,里面切成四个分割槽,其中第一、二分割槽分别安装了Windows及Linux, 你要如何在启动的时候选择用Windows还是Linux启动呢?假设MBR内安装的是可同时认识Windows/Linux操作系统的启动管理程序, 那么整个流程可以图示如下:
图2.4.1、启动管理程序的工作运行示意图
在上图中我们可以发现,MBR的启动管理程序提供两个菜单,菜单一(M1)可以直接加载Windows的核心文件来启动; 菜单二(M2)则是将启动管理工作交给第二个分割槽的启动磁区(boot sector)。当使用者在启动的时候选择菜单二时, 那么整个启动管理工作就会交给第二分割槽的启动管理程序了。 当第二个启动管理程序启动后,该启动管理程序内(上图中)仅有一个启动菜单,因此就能够使用Linux的核心文件来启动罗。 这就是多重启动的工作情况啦!我们将上图作个总结:
- 每个分割槽都拥有自己的启动磁区(boot sector)
- 图中的系统槽为第一及第二分割槽,
- 实际可启动的核心文件是放置到各分割槽内的!
- loader只会认识自己的系统槽内的可启动核心文件,以及其他loader而已;
- loader可直接指向或者是间接将管理权转交给另一个管理程序。