From Disk to Operating System
硬盘分类
接口类型 | 全称 | 协议类型 | 传输速率范围 | 连接方式 | 主要特点 | 典型应用场景 |
---|---|---|---|---|---|---|
SATA | Serial ATA | AHCI/NVMe | 1.5-6 Gbps | 7针数据+15针电源 | 兼容性强,成本低,支持热插拔 | 家用PC、普通服务器 |
mSATA | Mini-SATA | AHCI | 1.5-6 Gbps | 52针接口 | SATA的迷你版本,无电源接口 | 超极本、工业设备 |
SATAe | SATA Express | AHCI/NVMe | 8-16 Gbps | 2x SATA+PCIe | 兼容SATA和PCIe协议 | 早期高性能存储过渡方案 |
M.2 | NGFF (Next Gen FF) | SATA/NVMe | 6-32 Gbps | M型/B型/M+B型键 | 支持PCIe通道,体积小巧,可选SATA或NVMe协议 | 笔记本、高端PC、工作站 |
U.2 | SFF-8639 | NVMe | 32-64 Gbps | 68针接口 | 支持热插拔,兼容2.5寸硬盘形态 | 企业级存储、数据中心 |
PCIe | PCI Express | NVMe | 16-128 Gbps | PCIe插槽 | 直接连接CPU,超低延迟 | 高性能计算、显卡扩展存储 |
SAS | Serial Attached SCSI | SCSI | 6-24 Gbps | 29针接口 | 全双工,支持多路径访问,高可靠性 | 企业级服务器、存储阵列 |
FC | Fibre Channel | SCSI/FCP | 16-128 Gbps | 光纤接口 | 超长距离传输(最远10km),支持SAN架构 | 大型数据中心、云存储 |
USB | Universal Serial Bus | UAS/BOT | 0.48-40 Gbps | Type-A/C等 | 即插即用,广泛兼容 | 外置存储、移动设备 |
Thunderbolt | - | NVMe over PCIe | 40-120 Gbps | Type-C接口 | 支持菊花链拓扑,可传输视频和数据 | 创意工作站、外置SSD |
NVMe-oF | NVMe over Fabrics | RDMA/FC/TCP | 25-200 Gbps | 多种网络介质 | 支持远程访问NVMe设备 | 分布式存储、超融合架构 |
IDE/PATA | Parallel ATA | ATA | 16-133 MBps | 40/80针排线 | 已淘汰,并行传输 | 2000年前的老旧电脑 |
上述表格总结的各类接口,还存在着各种类型的协议
- AHCI:面向机械硬盘设计,支持NCQ但存在延迟瓶颈
- NVMe:专为SSD优化,支持64K命令队列,延迟降低90%
- SCSI:企业级协议,支持标签化命令和错误恢复
- UAS:USB3.0后的新一代协议,替代BOT模式提升效率
- RDMA:绕过CPU直接内存访问,用于超低延迟场景
引导类型与磁盘分区表格式
- 开机引导方式为 Legacy 引导 -> 磁盘存储数据的结构需要为 MBR 分区
- UEFI 引导 -> GPT 分区
项目 | EFI/UEFI | GPT |
---|---|---|
本质 | 启动固件(主板程序) | 磁盘分区表(磁盘结构) |
执行位置 | 主板固件中 | 磁盘开头的分区结构 |
管理对象 | 控制系统引导流程、寻找 EFI 文件 | 控制磁盘分区的布局和类型 |
相互关系 | UEFI 需要 GPT 格式的磁盘才能使用 EFI 启动 | GPT 磁盘中必须有一个 EFI 分区供 UEFI 使用 |
可否分开使用 | GPT 可以用 BIOS 启动(需要 BIOS 支持) | UEFI 也可兼容 MBR(有兼容启动选项) |
由 archlinux 了解系统安装的本质
在 Windows 系统安装流程中,分为三个层次:
- 安装在启动盘中的 PE 系统
- 系统安装镜像(一般为 iso 文件)
- 实际安装到磁盘的系统
由于 Windows 在内以及包含一般 Linux 发行版在内的众多系统,往往就是双击或者说挂载 iso 之后,遵循着一系列的设置流程,系统就安装完成了,所以我一直不太理解这个 iso 系统镜像文件究竟是什么。
但是由于 archlinux 系统安装的所有过程都需要手动完成(安装流程参考Arch Linux 安装使用教程),因此在这个过程才了解到系统镜像中包含的文件结构实际就是最后安装完成后的系统所具备的文件结构,而装系统也就是在镜像中的文件基础上,经过一系列自定义,将这些文件区别化的迁移到磁盘中的一个过程。
实践
一种更便捷且安全的实践方式是使用 QEMU 完成一个系统的安装流程,以下给出简要的流程描述。
- 编译安装 QEMU
configure 脚本如下
|
|
其中的添加 slirp 是因为在 qemu 启动时需要指定虚拟机使用的网络模式,其中的 user network backend 默认是不具备的,需要在编译时额外添加选项,该解决方案参考network backend ‘user’ is not compiled into this binary。
- 创建虚拟磁盘
|
|
- 启动 qemu
比较关键的一点是如何让 qemu 模拟 UEFI 启动,一般来说这是需要主板支持的,在虚拟机下则需要通过 ovmf 来进行支持,一方面是需要在宿主机安装 ovmf,另一方面是在 qemu 启动时添加额外的选项。
|
|
- 其他问题解决
在添加完引导程序准备启动程序时,可能会在开机时仍然找不到引导程序,这是因为某些主板的 UEFI 会硬编码引导路径,仅识别固定路径 EFI/BOOT/BOOTX64.EFI,忽略其他自定义路径(如 EFI/ARCH/grubx64.efi),所以需要额外将 GRUB 安装到 UEFI 规范中的后备引导路径,当然这一点在 archlinux 的安装流程中也有说明。