Linux中设备的文件名

linux秉持着万物皆是文件的思想,各类硬件设备也被当成文件对待,以下是常用设备的文件名

0

中括号 [ ] 表示设备的序列名,比如/dev/sd[a-p],就表示有多个同类型的设备,他们的文件名分别是 /dev/sda, /dev/sdb, ...... .dev/sdp

总之,我们可以先理解为,访问这些文件就等于访问对应的设备了

磁盘组成

要想了解磁盘分区,我们得先了解磁盘的组成
1

物理结构:

  • 盘片:就是上图中左边的圆盘,就是我们的盘片了
  • 主轴马达:上图中右边的侧面图,每一个长方形就是一个盘片(侧面),然后通过一个像棍子一样的东西串在一起,这个棍子就是主轴马达了,盘片会跟着主轴旋转
  • 机械臂:上图中右边的侧面图,蓝色的部分就是机械臂了,就像个夹子一样,可以进行伸缩运动,简单来说就是靠近主轴和远离主轴
  • 磁头:上图中右边的侧面图,红色的部分就是磁头了,相当与是位于机械臂的末端,像是夹住盘片一样,我们就是通过这个来访问磁盘的

逻辑结构:

  • 磁道:上图中左边的俯视图,黄色的部分就是磁道了,它就是一个圆圈,当然盘片不止一个磁道,这里黄色的部分是最外圈磁道
  • 扇区:上图中左边的俯视图,绿色的部分就是扇区了,简单来说就是一个磁道被划分得到的就是扇区啦
  • 柱面:这个立体图不好画,柱面就是多个盘片的同一位置的磁道的组合就是柱面了,举个例子就是我们用过的卷纸,卷纸的一圈其实就像是一个柱面,或者说卷纸用完后留下的那个轴就像是一个柱面

磁盘连接的方式与设备名的关系

由于SATA/USB/SAS等磁盘接口都是使用SCSI模块来驱动的,因此这些接口的磁盘设备文件名都是/dev/sd[a-p]的格式(参考上图的设备名)

所以SATA/USB接口的磁盘根本就没有一定的顺序,那如何决定他的设备文件名呢?这个时候就得要根据 Linux核心侦测到磁盘的顺序

简单来说就是,我们找到谁谁的名字顺序就靠前,这个与实际插槽的代号没关系

这里是个例题
1

磁盘分区

磁盘分区有两种不同的格式

MSDOS(MBR)分区表格式

这种格式下,磁盘的第一个扇区很重要,存放着 开机管理程序纪录区与分区表,通常是512字节

  • 主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446Bytes
  • 分区表(partition table):记录整颗硬盘分区的状态,有64 Bytes

由于分区表所在区块仅有64 Bytes容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的柱面号码

举个例子,我们将磁盘分成4个分区,如下所示
3

假设磁盘的设备名是 /dev/sda1, 那么这些分区名就是 /dev/sda[1-4]

书里写得很好,我就直接照搬了

4

这里说一下主要分区和延伸分区,主要分区就是以为着整个就是一个分区,延伸分区是利用额外的扇区来存储分区记录,简单来说,就是延伸分区可以进一步分为逻辑扇区,数量不限,这样我们实际的分区数量就突破4个了

如下是一个例子,我们可以看到总共有1个主要分区和1个延伸分区,延伸分区又细分为5个逻辑扇区,而这些逻辑扇区的分区记录就是在延伸分区使用的那个扇区中(图中的小黑块)
4

那这些分区的命名又是怎样的呢:
5

我们可以看到逻辑分区的数字编号是从5开始,这是因为前4个编号要留给主要分区或延伸分区,逻辑分区是无法使用的

这里是关于MBR分区的特性的总结:
6

MBR磁盘空间整合

磁盘空间整合,只是对于主分区和逻辑分区而言,延伸分区无法被格式化,也就无法存储数据

  • 只需要记住同类型的可以直接整合(合并)---相当于删掉原来的分区,然后新增一个分区,这样就能达到类似合并的效果了
  • 不同类型的,其实也就是逻辑分区和主分区的合并,这时候只能删掉原来的延伸分区(所有的逻辑分区都会被删除),然后再新建分区(总体的思路还是从不同类型转换到同类型)

MBR分区的限制
6

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分区表的结构

7

  • 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)就是以根目录为主,然后向下呈现分支状的目录结构的一种文件架构
8

比如我们要访问 mydata 文件,就要通过 /home/dmtsai/mydata 这个路径

Linux内的所有数据都是以文件的形态来呈现的,它使用的也是目录树架构

但我们的文件数据都是放在磁盘分区中的,如何结合目录树的架构与磁盘内的数据,这个就是挂载的作用所在

文件系统与目录树的关系(挂载)

  • 挂载:利用一个目录当成进入点,将磁盘分区的数据放置在该目录下;也就是说,进入该目录就可以读取该分区的意思
  • 挂载点:那个进入点的目录我们称为“挂载点”

判断文件所在分区

9

假设有以上这个例子,分区1被挂载到 根目录 下,分区2被挂载到 home目录

要判断文件所在的分区,通过 反向追踪 即可,也就是说,从当前文件往上找进入点,谁先被找到,文件就在这个进入点所对应的分区下

结合我们给的例子,当我想要知道/home/vbird/test这个文件在哪个partition时,由 test-->vbird-->home-->/,我们先找到 home目录 这个进入点,所以这个文件在分区2中

BIOS与UEFI开机检测程序

主机系统在载入硬件驱动方面的程序,主要有早期的 BIOS 与新的 UEFI 两种机制

BIOS搭配MBR/GPT的开机流程

BIOS是一个写入到主板上的固件,开机时,计算机系统会第一个主动执行的程序

开机流程如下:
10

BIOS会识别第一个可开机的硬盘,然后从该硬盘的第一个扇区内读取MBR

MBR内有开机管理程序,该程序是在操作系统安装时提供的,所以它会认识硬盘内的 文件系统格式,然后就能读取 核心程序 了(一般是操作系统)

以上是BIOS搭配MBR的开机流程,搭配GPT也一样,因为GPT的LBA0是MBR相容区块,就像是一个MBR,需要注意的是 要确保MBR内的开机管理程序识别GPT格式,否则无法识别核心程序

多重开机

开机管理程序,这里就称为 boot loader吧,它的大致功能如下
11

我们可以看到第三点功能 转交其他loader,这意味着在真正加载核心文件(操作系统)前,我们可以选择不同的loader来加载,不同的loader若是对应不同的核心文件,这样就能实现多个操作系统啦

事实上,计算机系统可能具有两个或以上的 Boot loader,硬盘虽然只有一个MBR,但 boot loader除了可以安装在MBR中,还能安装在 每个分区的开机扇区

13

以上是对上图的总结(适用于多重开机)

  • 每个分区都拥有自己的开机扇区(boot sector)
  • 图中的系统盘为第一及第二分区,实际可开机的核心文件是放置到各分区内的
  • loader只会认识自己的系统盘内的可开机核心文件,以及其他loader而已
  • loader可直接指向或者是间接将管理权转交给另一个管理程序

这里有个注意的问题,就是操作系统安装的顺序
14

记住 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 应用程序

开机流程

  1. 开机阶段: UEFI 进行硬件初始化和系统检查
  2. 安全启动: 验证操作系统的签名
  3. 操作系统加载: 将控制权交给操作系统,UEFI 通常停止工作
  4. UEFI 程序: 在特定环境下,UEFI 程序可继续运行,协助设备管理

参考书籍

《鸟哥的Linux私房菜 基础学习篇 第4版》 第2章

posted on 2024-08-20 16:54  Dylaris  阅读(151)  评论(0编辑  收藏  举报