在Linux 中,每一个装置都被当做文件,然后有文件路径与之对应,比如内存卡在dev/sd[ad] ,[ad]表示a或者d。Linux中几乎所有硬件装置都在dev/目录下面。
一、磁盘分割
** 磁盘结构 **
右图是比较经典的磁盘结构,从图中可以看到,磁盘是从上到下堆叠的若干个圆盘组成,叫做盘片。
而一个圆盘又被划分为如下的结构
[图片上传失败...(image-801765-1516276124809)]
一圈一圈的叫磁道,每个磁道又被划分为不同的扇区,原本的每个磁道扇区数是相同的,后面有改变。
而磁盘是盘片叠在一起的,不同盘片的同一磁道叫做一个柱面。之所以多个叠在一起,是为了节省体积以及加快访问速度而设计的。
l 磁头(head)数:每个盘片一般有上下两面,分别对应1个磁头,共2个磁头;
l 磁道(track)数:磁道是从盘片外圈往内圈编号0磁道,1磁道…,靠近主轴的同心圆用于停靠磁头,不存储数据;
l 柱面(cylinder)数:同磁道数量;
l 扇区(sector)数:每个磁道都别切分成很多扇形区域,每道的扇区数量相同;
l 圆盘(platter)数:就是盘片的数量。
磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数。
寻址,早期采用CHS的方式,根据磁头、磁道、扇区的编号定位,后面磁盘变大变复杂,硬盘所有的物理扇区的C/H/S编号通过一定的规则转变为一线性的编号,效率大大提升。
** Linux的磁盘分区 **
硬盘的分区主要分为基本分区和扩充分区,扩充分区最多一个,且二者之和个数不能超过4个。扩充分区需要在进行逻辑分区,之后才能使用,逻辑分区没有数量上的限制。
有两种类型的硬盘, IDE的硬盘(现在不多见了),驱动器的标识符为"hdx~",x表盘号, a、b、c、d 等 , ~代表分区。逻辑分区的编号会从5开始,前面的交给主分区或扩展分区了。
另一种是SCSI类型的硬盘,dev/sd[x~] 代表不同的盘,正常的实体机是这样的,不过虚拟机会不同可能会使用dev/vd[ap]这样的名字。
** 磁盘分割表 **
目前的分割表有两种格式,一种是MBR的方式,一种GPT。
MBR的方式有一个512Bytes的扇区用来存储开机管理程序和分割表。 开机管理程序:顾名思义,有448bytes。分割表:记录整颗硬碟分割的状态,有64 bytes。由于分割表只有64bytes,所以只能记录四组编号,也即只能将磁盘分成四个分区。也就是上面所说的基本分区和扩充分区。从上面可以看出,分区实际上就是对分割表进行设定而已。分隔的最小单位通常为柱面。
合并分区的时候,逻辑分区好合并。如果两个分区一个是主分区,一个是逻辑分区,那么和并起来就很麻烦了,会破坏掉逻辑分区的整个分区情况。
显然可以想到MGR的方式存在一下缺点:
MGR存储数据的区域太小 ,只有512byte,不管是存取开机管理程序还是存储分割表,能存储的数据都太少。这也是计算机技术发展过程中常出现的现象,设定的标准,没有准备好为那么强的硬件服务,没有预测到银监会发展这么快。比如IPV4这些。
另一方面,如果一个硬盘的MGR存储区域坏掉的话,这个硬盘基本上就不能用了,因为操作系统无法读取关键信息。
GPT方式:
与MGR只是用一个区块不同,GPT使用34个区块来记录,每个区块称作LBA区块,并且磁盘的最后还有34个备用的区块。第0块记录开机管理程序第一段,而原本记录分割表的用来存入特殊标志。第1块记录34个LBA块以及备用快的基本信息。后面的块都用于存储分区记录,每块记录4个,这种记录下的容量可达2 的30次方TB。目前较新的Linux都可以师表GPT格式,但是有部分应用软件,比如fdisk时不能识别的,要使用GPT 的话,得要操作类似gdisk 或者是parted 指令才行!还有硬件接口也可能不识别。
BIOS 搭配MBR/GPT 的开机流程:
计算机的启动叫做boot,起这个名字原理是计算机想要启动就必须运行程序,而运行程序又必须先启动,这是一个鸡生蛋蛋生鸡的问题,于是人们用boot,来源于一句谚语,"pull oneself up by one's bootstraps",提着鞋带把自己拉起来,这怎么可能呢,来形容这个过程。
第一阶段:BIOS basic input/output system 基本输入输出系统。
BIOS主要存放的包括 ,自诊断程序,CMOS设置(也即我们使用的选择启动那个OS)、系统自动装载程序、主要I/O驱动和中断服务。
------>硬件自检,没问题
----->BIOS把控制权交给MGR中的主引导记录也即开机管理程序,选择那个盘中的MGR有一定的顺序,可设置, 这个主引导记录的主要作用是告诉计算机到硬盘哪个(或哪几个,供选择)位置去找操作系统, 具体作用可以如下表示
提供选单:使用者可以选择不同的开机项目,这也是多重开机的重要功能!
载入核心档案:直接指向可开机的程式区段来开始作业系统;
转交其他loader:将开机管理功能转交给其他loader负责。
------>然后会根据位置直接加载操作系统,或者通过界面让用户选择加载哪个操作系统
------->由此,操作系统开始启动了(加载内核,运行初始化代码,创建第一个进程......)
同样的BIOS也是一个很老的设计了,有点跟不上计算机的发展,BIOS也无法支持GPT。所以,新的开机启动程序规范来了。叫做UEFI,相对于BIOS,它有如下有点:
1、具有GPT所拥有的优点,而BIOS没有
2、使用C语言开发,而BIOS使用汇编语言,具有更多优势,比如可移植性,厂商统一等。
3、安全性更高。
4、启动速度更快。
5、更能更多。