Linux中设备的文件名
linux秉持着万物皆是文件的思想,各类硬件设备也被当成文件对待,以下是常用设备的文件名
中括号 [ ] 表示设备的序列名,比如/dev/sd[a-p],就表示有多个同类型的设备,他们的文件名分别是 /dev/sda, /dev/sdb, ...... .dev/sdp
总之,我们可以先理解为,访问这些文件就等于访问对应的设备了
磁盘组成
要想了解磁盘分区,我们得先了解磁盘的组成
物理结构:
- 盘片:就是上图中左边的圆盘,就是我们的盘片了
- 主轴马达:上图中右边的侧面图,每一个长方形就是一个盘片(侧面),然后通过一个像棍子一样的东西串在一起,这个棍子就是主轴马达了,盘片会跟着主轴旋转
- 机械臂:上图中右边的侧面图,蓝色的部分就是机械臂了,就像个夹子一样,可以进行伸缩运动,简单来说就是靠近主轴和远离主轴
- 磁头:上图中右边的侧面图,红色的部分就是磁头了,相当与是位于机械臂的末端,像是夹住盘片一样,我们就是通过这个来访问磁盘的
逻辑结构:
- 磁道:上图中左边的俯视图,黄色的部分就是磁道了,它就是一个圆圈,当然盘片不止一个磁道,这里黄色的部分是最外圈磁道
- 扇区:上图中左边的俯视图,绿色的部分就是扇区了,简单来说就是一个磁道被划分得到的就是扇区啦
- 柱面:这个立体图不好画,柱面就是多个盘片的同一位置的磁道的组合就是柱面了,举个例子就是我们用过的卷纸,卷纸的一圈其实就像是一个柱面,或者说卷纸用完后留下的那个轴就像是一个柱面
磁盘连接的方式与设备名的关系
由于SATA/USB/SAS等磁盘接口都是使用SCSI模块来驱动的,因此这些接口的磁盘设备文件名都是/dev/sd[a-p]的格式(参考上图的设备名)
所以SATA/USB接口的磁盘根本就没有一定的顺序,那如何决定他的设备文件名呢?这个时候就得要根据 Linux核心侦测到磁盘的顺序 了
简单来说就是,我们找到谁谁的名字顺序就靠前,这个与实际插槽的代号没关系
这里是个例题
磁盘分区
磁盘分区有两种不同的格式
MSDOS(MBR)分区表格式
这种格式下,磁盘的第一个扇区很重要,存放着 开机管理程序纪录区与分区表,通常是512字节
- 主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446Bytes
- 分区表(partition table):记录整颗硬盘分区的状态,有64 Bytes
由于分区表所在区块仅有64 Bytes容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的柱面号码
举个例子,我们将磁盘分成4个分区,如下所示
假设磁盘的设备名是 /dev/sda1, 那么这些分区名就是 /dev/sda[1-4]
书里写得很好,我就直接照搬了
这里说一下主要分区和延伸分区,主要分区就是以为着整个就是一个分区,延伸分区是利用额外的扇区来存储分区记录,简单来说,就是延伸分区可以进一步分为逻辑扇区,数量不限,这样我们实际的分区数量就突破4个了
如下是一个例子,我们可以看到总共有1个主要分区和1个延伸分区,延伸分区又细分为5个逻辑扇区,而这些逻辑扇区的分区记录就是在延伸分区使用的那个扇区中(图中的小黑块)
那这些分区的命名又是怎样的呢:
我们可以看到逻辑分区的数字编号是从5开始,这是因为前4个编号要留给主要分区或延伸分区,逻辑分区是无法使用的
这里是关于MBR分区的特性的总结:
MBR磁盘空间整合
磁盘空间整合,只是对于主分区和逻辑分区而言,延伸分区无法被格式化,也就无法存储数据
- 只需要记住同类型的可以直接整合(合并)---相当于删掉原来的分区,然后新增一个分区,这样就能达到类似合并的效果了
- 不同类型的,其实也就是逻辑分区和主分区的合并,这时候只能删掉原来的延伸分区(所有的逻辑分区都会被删除),然后再新建分区(总体的思路还是从不同类型转换到同类型)
MBR分区的限制
GUID partition table, GPT 磁盘分区表
LBA 逻辑区块位址
过去默认的扇区大小是512字节,为了相容所有的磁盘,因此在扇区的定义上,大多使用 LBA来处理
GPT 将磁盘所有区块以此LBA(默认为 512Bytes喔!)来规划,而第一个 LBA 称为LBA0(从 0 开始编号)
GPT格式
与MBR仅使用第一个512Bytes区块来纪录不同,GPT使用了 34个LBA区块 来纪录分区信息!GPT除了前面 34个LBA之外,整个磁盘的最后33个LBA也拿来作为另一个备份(34个区块中,只有后33块是关于分区记录的)
如下图所示,GPT分区表的结构
- LBA0:MBR 相容区块,基本与MBR模式下的第一个扇区一致,开机管理程序仍是446字节,不同的是原本的分区表的纪录区内,这个相容模式仅放入一个特殊标志的分区,用来表示此磁盘为 GPT 格式之意
- LBA1:GPT 表头纪录,这个部份纪录了分区表本身(包含备份)的位置与大小, 以及放置了分区表的检验机制码(CRC32)
- LBA2-33:实际纪录分区信息处,每个 LBA 都可以纪录 4 笔分区纪录,所以在默认的情况下,总共可以有 4x32=128 笔分区纪录
GPT分区已经没有所谓的主、延伸、逻辑分区的概念,既然每笔纪录都可以独立存在,当然每个都可以视为是主分区!每一个分区都可以拿来格式化使用喔
MBR格式和GPT格式的容量
- MBR(主引导记录)
- 寻址方式:MBR使用 32位LBA寻址,这限制了它的寻址范围为 2^32个扇区
- 最大容量:由于每个扇区通常是512字节,MBR最大支持的磁盘容量为 2 TB(2^32 * 512字节)
- GPT(GUID分区表)
- 寻址方式:GPT使用 64位LBA寻址 ,这大大扩展了寻址范围
- 最大容量:GPT的最大寻址能力是 2^64个扇区,每个扇区通常也是512字节,因此最大支持的磁盘容量为8 ZiB(2^73字节)
挂载
目录树结构
目录树架构(directory tree)就是以根目录为主,然后向下呈现分支状的目录结构的一种文件架构
比如我们要访问 mydata 文件,就要通过 /home/dmtsai/mydata 这个路径
Linux内的所有数据都是以文件的形态来呈现的,它使用的也是目录树架构
但我们的文件数据都是放在磁盘分区中的,如何结合目录树的架构与磁盘内的数据,这个就是挂载的作用所在
文件系统与目录树的关系(挂载)
- 挂载:利用一个目录当成进入点,将磁盘分区的数据放置在该目录下;也就是说,进入该目录就可以读取该分区的意思
- 挂载点:那个进入点的目录我们称为“挂载点”
判断文件所在分区
假设有以上这个例子,分区1被挂载到 根目录 下,分区2被挂载到 home目录 下
要判断文件所在的分区,通过 反向追踪 即可,也就是说,从当前文件往上找进入点,谁先被找到,文件就在这个进入点所对应的分区下
结合我们给的例子,当我想要知道/home/vbird/test这个文件在哪个partition时,由 test-->vbird-->home-->/,我们先找到 home目录 这个进入点,所以这个文件在分区2中
BIOS与UEFI开机检测程序
主机系统在载入硬件驱动方面的程序,主要有早期的 BIOS 与新的 UEFI 两种机制
BIOS搭配MBR/GPT的开机流程
BIOS是一个写入到主板上的固件,开机时,计算机系统会第一个主动执行的程序
开机流程如下:
BIOS会识别第一个可开机的硬盘,然后从该硬盘的第一个扇区内读取MBR
MBR内有开机管理程序,该程序是在操作系统安装时提供的,所以它会认识硬盘内的 文件系统格式,然后就能读取 核心程序 了(一般是操作系统)
以上是BIOS搭配MBR的开机流程,搭配GPT也一样,因为GPT的LBA0是MBR相容区块,就像是一个MBR,需要注意的是 要确保MBR内的开机管理程序识别GPT格式,否则无法识别核心程序
多重开机
开机管理程序,这里就称为 boot loader吧,它的大致功能如下
我们可以看到第三点功能 转交其他loader,这意味着在真正加载核心文件(操作系统)前,我们可以选择不同的loader来加载,不同的loader若是对应不同的核心文件,这样就能实现多个操作系统啦
事实上,计算机系统可能具有两个或以上的 Boot loader,硬盘虽然只有一个MBR,但 boot loader除了可以安装在MBR中,还能安装在 每个分区的开机扇区
以上是对上图的总结(适用于多重开机)
- 每个分区都拥有自己的开机扇区(boot sector)
- 图中的系统盘为第一及第二分区,实际可开机的核心文件是放置到各分区内的
- loader只会认识自己的系统盘内的可开机核心文件,以及其他loader而已
- loader可直接指向或者是间接将管理权转交给另一个管理程序
这里有个注意的问题,就是操作系统安装的顺序
记住 Windows安装时会主动覆盖掉MBR以及自己所在分区的开机扇区,并且不提供选择菜单的功能,Linux则相反 就行了
UEFI BIOS 搭配 GPT 开机的流程
UEFI 简介
UEFI是想取代 BIOS 这个固件的,所以也叫作 UEFI BIOS(BIOS为16位,GPT提供64位的寻址,多少有点不适配了)
作为现代计算机的固件接口,UEFI(统一可扩展固件接口)替代传统的 BIOS。功能类似低阶操作系统,可管理硬件资源并载入驱动程序
UEFI 的优势
- 启动速度: 通常比 BIOS 快
- 操作系统前的管理: 用于硬件检测、开机管理、软件设置等
- 安全启动: 确保操作系统经过 UEFI 验证才能开机,提高系统安全性
UEFI 的限制
- 效率问题: 采用 polling(轮询) 管理硬件资源,效率略低,BIOS采用中断管理硬件资源
- 性能: 不提供完整的高速缓存功能,影响执行效率
GPT 分区表
- UEFI 支持 GPT(GUID 分区表),克服了 BIOS 的 1024 柱面限制
- 需要格式化一个 vfat 文件系统(512MB 到 1GB)以支持 UEFI 应用程序
开机流程
- 开机阶段: UEFI 进行硬件初始化和系统检查
- 安全启动: 验证操作系统的签名
- 操作系统加载: 将控制权交给操作系统,UEFI 通常停止工作
- UEFI 程序: 在特定环境下,UEFI 程序可继续运行,协助设备管理
参考书籍
《鸟哥的Linux私房菜 基础学习篇 第4版》 第2章