-
磁盘分区
-
磁盘连接的方式与装置文件名的关系
正常的实体机器大概使用的都是 /dev/sd[a-] 的磁盘文件名,至于虚拟机环境底下,为了加速,可能就会使
用 /dev/vd[a-p] 这种装置文件名SATA/USB 接口的磁盘根本就没有一定的顺序,那如何决定他的装置文件名呢?
根据 Linux 核心侦测到磁盘的顺序来决定文件名,这里鸟哥举了一个例题,“两个SATA硬盘和一个U盘插在主板上,SATA硬盘分别插在SATA1、SATA5上,问三个磁盘在linux中的文件名”,答“和插槽号没有关系,根据 Linux 核心侦测到磁盘的顺序来决定文件名,所以分别是/dev/sda、/dev/sdb、/dev/sdc(开机完成后才被捕捉到)”磁盘盘上面又可细分出扇区(Sector)与磁道(Track)两种单位, 其中扇区的物理量设计有两种大小,分别是 512bytes 与 4Kbytes。
-
MSDOS(MBR) 与 GPT 磁盘分区表(partition table)
早期为了兼容windows磁盘使用的是支持windows的MBR(master boot record)来处理开机管理程序和分区表,开机管理程序和分区表通通放在第一个扇区,扇区通常是512bytes大小,所以第一个扇区会有以下两个数据:
主要启动记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有 446 bytes
分区表(partition table):记录整颗硬盘分区的状态,有 64 bytes-
分区表所在区块只有64bytes,所以最多分四组记录区(16字节一个),每组记录区记录了该区段的起始于结束的磁柱号码
(这张图真的是生动形象,鸟哥大赞)
假设上图中的硬盘文件名为/dev/sda1时,那么这四个分区在linux系统中的文件名为(档名后会再接一个数字,这个数字与分区的位置是有关的,真的很有意思)
P1:/dev/sda1
P2:/dev/sda2
P3:/dev/sda3
P4:/dev/sda4 由上得到几点重要启示
1.其实所谓的『分区』只是针对那个 64 bytes 的分区表进行设定而已!
2.硬盘默认的分区表仅能写入四组分区信息
3.这四组分区信息我们称为主要(Primary)或延伸(Extended)分区槽
4.分区槽的最小单位『通常』为磁柱(cylinder)
5.当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分区槽进行数据的处理分区的意义
1.数据的安全性
2.系统的效能考虑 (我要读取xx数据,只需要读取该分区的磁柱区间即可)延伸分区
1.延伸分区的目的是使用额外的扇区来记录分区信息,延伸分区本身并不能被拿来格式化
2.逻辑分区槽(延伸分区继续切出来的分区槽)的名称号码由5号开始(eg:P1:/dev/sda1,P2:/dev/sda2,L1:/dev/sda5)这是因为前四个号码都保留给主分区或者扩展分区了MBR、主要分区、延伸分区、逻辑分区特性的简单定义
1.主要分区与延伸分区最多可以有4笔(硬盘限制)
2.延伸分区最多只能有一个(操作系统的限制)
3.逻辑分区是由延伸分区持续切割出的分区槽
4.能够被格式化后,作为数据存取的分区槽为主要分区与逻辑分区,延伸分区无法被格式化
5.逻辑分区的数量因操作系统而不同MBR的局限
1.操作系统无法抓取到2.2T以上的内容
2.MBR仅有一个区块,如损坏后无法或很难救援
3.MBR内存放开机管理程序的区块仅446bytes,无法容纳较多的程序代码
补充说明,为什么无法抓取到2.2T以上的磁盘容量呢,首先16个字节的分区信息中都有什么呢,16个字节的分区信息保存有分区活动状态标志、文件系统标识、起止柱面号、磁头号、扇区号、起始扇区位置(4个字节)、分区总扇区数目(4个字节)等内容。这里最重要的是:分区的起始扇区位置与分区的总扇区数,都是用4个字节表示的,而这一分区最大能表示2的32次方的扇区个数,按每扇区512字节计算,每个分区最大不能超过2TB。磁盘容量超过2TB以后,分区的起始位置也就无法表示
-
GUID partition table,GPT磁盘分区表
为了兼容所有的磁盘,在扇区的定义上,大多使用LBA(Logical Block Address 逻辑区块地址)来处理,GPT将磁盘所有区块以此LBA(预设为512bytes)来规划,由LBA0开始编号
-
MBR仅使用第一个512bytes去开来记录,GPT使用了34个LBA区块来记录分区信息
LBA0(MBR相容区块)
分为两部分
1.446bytes储存第一阶段的开机管理程序
2.原本分区表的记录区内,这个兼容模式仅放入一个特殊标志的分区(表示老子这个磁盘是GPT格式,不认识GPT分区表的磁盘管理程序请走开)LBA1(GPT 表头记录)
1.记录了分区表本身的位置与大小
2.记录了备份用GPT分区的位置
3.放置了分区表的检验机制码,操作系统以此来判断GPT正确性,若错误,则透过此记录区取得备份的GPT回复GPT 的正常运作LBA2-33(实际记录分区信息处)
从LBA2开始,每个LBA可记录4比分区记录,默认情况下可有4*32比分区记录,每笔记录中分别提供64bits来记录开始/结束扇区号码注意
1.磁盘管理工具fdisk不认识GPT,需使用gdisk或parted指令
2.grub第一版不认识GPT,grub2后认识
-
开机流程中的BIOS与UFFI开机检测程序
大致开机流程
1.BIOS:开机主动执行的程序(根据设定取得能够开机的硬盘,并到该硬盘读取第一个扇区的MBR位置)
2.MBR:主要启动记录区块,内含开机管理程序
3.开机管理程序(boot loader):一个可读取核心文件来执行软件
4.核心文件,开始操作系统的功能...LBA0仅提供第一阶段开机管理程序代码,如果使用类似grub的的开机管理程序,需额外分出一个BIOS boot的分区槽防止其他开机过程中的其他代码,CentOS中通常占用2MB
boot loader的主要任务
1.提供选项:用户可选择不同的开机项目,这也是多重引导的重要功能
2.载入核心文件:直接指向可开机的程序区段开始操作系统
3.转交其他loader:将开机管理功能转交给其他loader(开机管理程序除了可以安装在MBR,还可以安装再每个分区槽的启动扇区(boot sector))--造就了多重引导功能多重引导工作的总结
1.每个分区槽都拥有自己的启动扇区(boot sector)
2.实际可开机的核心文件是放置到各分区槽的
3.loader只认识自己系统槽内的可开机核心文件以及其他loader
4.loader可直接指向或者是间接将管理权移交给另一个管理程序
5.多重引导为什么先安装windows再安装linux呢,因为windows安装程序会主动覆盖MBR及自己所在分区槽的启动扇区,并没有提供给我们选择的功能-
UFFI BIOS搭配GPT开机流程(用到再说)
-
linux安装模式下,磁盘分区的选择
- 文件系统与目录树的关系
1.挂载:利用一个目录当作进入点,将磁盘分区槽内的数据放置再该目录下,这个动作即为挂载,这个进入点即为挂载点
- 文件系统与目录树的关系
-
-
安装Linux前的规划
(没什么笔记,按需定制)
-
重点回顾
- 磁盘文件通常分为两种,实际SATA/USB文件名为/dev/sd[a-p],虚拟机中的文件名可能为/dev/vd[a-p]
- 磁盘的第一个扇区主要记录两个重要信息
1.主要启动记录区(MBR),446字节,可安装开机管理程序的地方
2.分区表(partition table),64字节,记录整颗硬盘分区的状态 - 磁盘的MBR分区方式中,主分区和扩展分区最多可以有4个,逻辑分区的文件名号码一定由5开始
- 磁盘容量大于2TB时,系统会自动使用GPT分区方式来处理磁盘分区
- GPT分区无扩展分区与逻辑分区的概念,可假设所有分区都是主分区
- 开机的流程:BIOS-->MBR-->boot loader-->核心文件
- boot loader可以安装的地点有两个,MBR和boot sector