这套教程写给会用 Linux 命令行、但没系统学过存储的工程师。我们从"一块盘插上服务器之后发生了什么"讲起,一路走到"能设计、部署并长期运维一套生产存储集群,并为 GPU / AI 平台选型"。全程分 6 个阶段、38 篇课文,每一篇都配有能在自己电脑的虚拟机里跑起来的例子。
读完这一课,你会知道每个阶段学什么、学到什么程度算过关、需要准备什么环境,以及怎样用这个站点最省力。
为什么要按路线学
存储是一门"每个词都认识,连起来就不会"的学问。iostat 里 %util 到了 100%,盘就满载了吗?write() 返回成功,数据就安全了吗?Ceph 报 HEALTH_WARN,要不要半夜爬起来?这些问题的答案散落在硬件、内核、文件系统、网络和分布式系统五个领域里,零散地看博客,很容易背下一堆结论,却在真实故障面前对不上号。
所以本站把内容按依赖关系排成一条线:
- 先单机,后分布式。Ceph 的一个 OSD 本质上就是"一个进程 + 一块盘",单机 I/O 栈看不懂,分布式存储的慢请求就永远是黑盒。
- 先会测,后会调。没有基线的调优都是玄学。阶段 2 整个阶段都在教你怎么量、怎么看,然后才动参数。
- 先原理,后生产。阶段 3 讲清楚数据怎么分布、怎么冗余,阶段 4 部署 Ceph 时你才知道每个参数在决定什么。
顺序是建议不是限制——已经有底子的读者,可以对照下面每个阶段的"学到什么程度"自测一下,直接跳到对应阶段。
六个阶段的路线图
| 阶段 | 名称 | 定位 | 一句话 | 学完能做到 |
|---|---|---|---|---|
| 0 | 启程 | Prerequisites | 看清数据住在哪里 | 建立存储全景,搭好能随意折腾的实验环境,画得出 Linux I/O 栈 |
| 1 | 入门 | Beginner | 玩转一台机器上的存储 | 独立完成上盘、分区、RAID、建文件系统和挂载,说清数据何时真正落盘 |
| 2 | 进阶 | Intermediate | 会测、会看、会调 | 用科学方法测出真实性能,用观测工具定位 I/O 瓶颈,有依据地调优 |
| 3 | 原理 | Advanced | 从单机走向分布式 | 解释网络存储与分布式存储如何分布数据、如何冗余、如何恢复 |
| 4 | 生产 | Production | 部署并运维 Ceph 与 K8s 存储 | 规划、部署并长期运维生产 Ceph 集群,为 Kubernetes 提供块 / 文件 / 对象存储 |
| 5 | 专家 | Expert | 高性能存储与 AI 平台 | 为 GPU 集群设计高性能存储方案,完成容量与性能规划,建立 on-call 体系 |
阶段 0:启程——看清数据住在哪里
- 学习路线与使用指南:就是你正在读的这一篇。
- 存储全景:从寄存器到集群:从 CPU 寄存器到对象存储,延迟相差十几个数量级;DAS、NAS、SAN、对象存储、分布式存储各自解决什么问题;存储工程师每天在干什么。
- 搭建实验环境:准备一台 Ubuntu 24.04 虚拟机,用虚拟盘和 loop 设备造出"很多块盘",装好 fio、sysstat、bpftrace 等工具。
- 一次 write() 的旅程:Linux I/O 栈:从系统调用到设备,逐层走一遍。这是全课程的"地图",后面每一课都会指回它。
学到什么程度:能凭记忆画出 Linux I/O 栈的主要层次,说出每一层的一两个关键对象(页缓存、bio、request……);实验虚拟机可以随时加盘、删盘、重建。
阶段 1:入门——玩转一台机器上的存储
学到什么程度:拿到一台新服务器,不查资料也能把几块盘做成 RAID 10 + LVM + XFS 并写进 fstab,重启不出错;能解释 fsync 和 O_DIRECT 的区别,知道"写成功"在不同调用下分别承诺了什么。这相当于一个合格 Linux 运维对存储的要求。
阶段 2:进阶——会测、会看、会调
- 性能指标:IOPS、吞吐与延迟
- 性能分析方法论
- 磁盘 I/O 观测:iostat 到 blktrace
- 文件系统观测:缓存与延迟
- 用 BPF 看清 I/O
- 基准测试:fio 与 elbencho
- I/O 调优:调度器、队列与内核参数
学到什么程度:业务说"存储慢",你能在 15 分钟内用 USE 方法给出判断:是盘慢、是队列堵、是缓存没命中,还是根本不是存储的问题;能写出一份可复现的 fio 测试报告,并指出别人报告里的常见陷阱(测的是页缓存、队列深度不对、没预热 SSD……)。这一阶段是整套课程里投入产出比最高的部分,建议花最多时间。
阶段 3:原理——从单机走向分布式
学到什么程度:能向同事讲清楚一次 Ceph 写入从客户端到三个 OSD 落盘的全过程;能根据容量效率、重建代价和小文件性能,为一个场景在三副本和 4+2 纠删码之间做出有理由的选择。
阶段 4:生产——部署并运维 Ceph 与 K8s 存储
- 用 cephadm 部署 Ceph 集群
- RBD 块存储与 CephFS 文件系统
- RGW 对象网关
- Ceph Day-2 运维
- Ceph 故障排查闯关
- Kubernetes 存储与 CSI
- Rook:在 Kubernetes 上运行 Ceph
- 存储监控与告警
学到什么程度:能独立完成一套 Ceph 集群从规划、部署、对接 Kubernetes 到监控告警的全过程;坏盘替换、滚动升级这类日常变更能写出 SOP 并执行;看到 HEALTH_WARN 知道哪些可以明天处理、哪些必须现在处理。这一阶段需要多台虚拟机,每课开头会写明环境要求。
阶段 5:专家——高性能存储与 AI 平台
- 高性能网络:RDMA、InfiniBand 与 RoCE
- GPFS / Storage Scale 核心概念
- GPFS ECE 部署与多集群挂载
- GPFS Day-2:快照、租户与调优
- AI 训练存储选型
- 容量与性能规划
- On-call、SOP 与故障复盘
学到什么程度:面对"给 512 张 GPU 的训练集群配存储"这样的需求,能拆出容量、带宽、IOPS、元数据指标,给出两三个候选方案和它们的成本、风险;能带一个小团队值班,故障后能主持复盘。
需要准备什么
前置知识
你需要具备:
- Linux 命令行:会用
cd、ls、cat、vim/nano、ps、grep,知道进程、文件权限、sudo、软件包管理(apt)是什么。 - 一点 C 的阅读能力:不需要会写,但要能看懂
open()、write()、fsync()这样的函数调用和返回值。阶段 2 的 bpftrace 脚本语法接近 C。 - 基本网络概念:IP、端口、TCP、带宽与延迟。阶段 3 之后会大量用到。
不需要:事先了解任何存储产品、会写内核代码、有物理服务器。
硬件与环境
| 阶段 | 需要的环境 | 说明 |
|---|---|---|
| 0~2 | 1 台 Linux 虚拟机:2~4 vCPU、4~8 GB 内存、系统盘 30 GB,外加 3~4 块 10~20 GB 虚拟盘 | 一台 16 GB 内存的笔记本就够。没有虚拟盘也能用 loop 设备代替 |
| 3 | 2~3 台虚拟机,同一内网互通 | 搭 NFS / iSCSI 服务端和客户端;分布式原理部分用单机多进程也能模拟 |
| 4 | 3~4 台虚拟机,每台 4 vCPU、8 GB 内存、3 块以上 20 GB 虚拟盘 | 部署 Ceph 和 Kubernetes,宿主机建议 32 GB 内存以上,或者用云主机 |
| 5 | 3~6 台节点;RDMA 相关内容需要支持 RDMA 的网卡 | 有条件用物理机或云上的高性能实例;没有条件的部分以原理和生产案例为主 |
具体怎么搭,在搭建实验环境里一步步来。
怎样使用本站
页面布局
- 左侧目录:按阶段列出全部课文,当前所在的课会高亮。窄屏下可以从页面顶部展开。
- 右侧大纲:列出本课的二级、三级标题,点击跳转,滚动时自动高亮当前小节。
- 课文底部:有"上一课 / 下一课"导航和"标记为已完成"按钮。
进度保存在本地
学习进度只保存在你浏览器的 localStorage 里,不需要注册账号,也不会上传到任何服务器。代价是:
- 换浏览器、换电脑,进度不会同步;
- 清除浏览器数据(或用无痕模式)会丢掉进度。
进度只是给自己的一个提醒,真正的"学会"记在你的实验笔记里。
提示框
正文里会穿插几种颜色不同的提示框,含义固定:
代码块
命令和配置都放在代码块里,右上角可以一键复制。
- 带文件名的代码块(例如
job.fio)表示你应该把内容保存成这个文件再执行后续命令。 console代码块里,以$开头的是输入的命令,其余行是输出,复制时只复制命令本身。需要 root 权限的命令统一写成sudo ...;bash代码块里全是命令,可以整段复制,#开头的是注释。- 输出示例来自作者的实验环境,你看到的数字(延迟、IOPS、设备名)一定会不同,关注的是数量级和趋势,不是具体数值。
容量计算器
站点顶部有一个容量计算器:输入节点数、每节点盘数和单盘容量,选择副本数或纠删码配置,它会算出裸容量、可用容量,以及考虑故障域和"不能写满"之后真正能交付给业务的容量。
阶段 3 讲副本与纠删码、阶段 5 讲容量与性能规划时会反复用到它。建议你现在就打开玩一下:10 台服务器、每台 12 块 16 TB 硬盘,三副本和 8+3 纠删码分别能给业务多少空间?差距可能比你想的大。
每课的固定结构
每篇课文基本按"为什么需要 → 是什么 → 怎么用 → 生产里要注意什么"展开,结尾有三个固定小节:
- 动手练习:3~5 个小任务,建议全部完成。
- 自测:点开问题查看答案,答不上来就回去重读对应小节。
- 参考资料:官方文档、内核文档和经典书籍的章节,想深入时从这里出发。
学习建议
1. 每课都要动手,而且要"弄坏"
存储知识的最大特点是:正常情况下什么都看不出来,出问题时才见真章。RAID 5 的重建有多慢?fsync 到底贵在哪?拔掉一块盘 Ceph 会怎样?只有亲手做过才会有体感。虚拟机的好处就是坏了可以重来,所以放心去拔盘、填满、断网。
2. 建一个实验笔记
建议用 Git 仓库或任何你习惯的笔记工具,记下每次实验的:
日期 / 环境(内核版本、盘的类型和大小)
我想验证什么
执行了什么命令
看到了什么(贴关键输出,不要只贴结论)
和预期不一样的地方,以及原因三个月后你会发现,这份笔记比任何教程都值钱——尤其是"和预期不一样"那一栏。
3. 先有数量级,再有细节
不需要背下每个参数,但一定要对数量级有直觉:内存访问是百纳秒级,NVMe 是几十微秒级,机械盘是毫秒级,跨机房是几十毫秒级。看到一个 await 是 5 ms 的 NVMe 盘,你应该立刻觉得"不对劲"。存储全景一课的延迟表建议打印出来贴在显示器旁边。
4. 读一手资料
本站负责把知识串成路线,但它不能替代原始资料:
- man 手册:
man 2 write、man 2 fsync、man 2 open里关于O_DIRECT的段落,比大多数博客准确。 - Linux 内核文档:https://docs.kernel.org/,块层、文件系统、
/proc和/sys的权威说明。 - Brendan Gregg《Systems Performance》第 2 版:本课程方法论、文件系统和磁盘部分的主要参考,第 2、8、9 章建议通读。
- 项目官方文档:Ceph(https://docs.ceph.com/)、Kubernetes(https://kubernetes.io/zh-cn/docs/)、IBM Storage Scale 等。
5. 节奏
每课标注了预计学习时间,那是"读 + 做完 LAB"的时间,不含动手练习。以每周 5~6 小时计:
| 阶段 | 课时(约) | 建议周期 |
|---|---|---|
| 0~1 | 5.5 小时 | 2 周 |
| 2 | 5 小时 | 2~3 周(多花时间反复测) |
| 3 | 4.3 小时 | 2 周 |
| 4 | 6.7 小时 | 3~4 周(取决于实验环境) |
| 5 | 5.7 小时 | 3~4 周 |
宁可慢一点,也要把每课的"动手练习"真正做一遍。
内容来源
- 经典书籍:方法论、文件系统与磁盘部分主要参考 Brendan Gregg《Systems Performance: Enterprise and the Cloud, 2nd Edition》,引用处会注明章节。本站用自己的话讲解,并补充了实验。
- 官方文档:Linux 内核文档、Ceph、Kubernetes、IBM Storage Scale 等,每课末尾列出链接。
- 生产实践:阶段 4、5 的大量内容来自真实生产环境中 Ceph、Rook、GPFS、JuiceFS、3FS 等系统的部署与运维经验。引用时已去除内部域名和 IP,统一改成
example.com、192.168.x.x这类示例值,使用时请替换成你自己的环境。
动手练习
- 浏览左侧目录,找到阶段 4 的"Ceph 故障排查闯关"一课,看一眼它的结构,再回到本课,熟悉导航。
- 对照"六个阶段的路线图",给自己每个阶段打个分(0~3 分),确定从哪里开始、哪些阶段可以快速略过。
- 打开容量计算器,算一算 10 节点 × 12 块 16 TB 硬盘在三副本和
8+3纠删码下的可用容量,记下差距。 - 新建一个实验笔记(Git 仓库或笔记软件都行),写下第一条记录:你电脑的 CPU 核数、内存大小和剩余磁盘空间,判断能不能跑阶段 0~2 的实验虚拟机。
- 把本课标记为"已完成",刷新页面,确认目录里的完成标记仍然存在。
自测
为什么本课程要先讲单机 I/O 栈,再讲 Ceph 这样的分布式存储?
分布式存储最终还是落到每台服务器上的进程和盘上。Ceph 的 OSD 就是一个跑在 Linux 上、读写本地盘的进程。单机的页缓存、块层、设备特性搞不清楚,分布式系统里出现慢请求时就无法判断是网络、软件还是某一块盘的问题。
学习进度保存在哪里?什么情况下会丢失?
保存在当前浏览器的 localStorage 里,不上传服务器。换浏览器或电脑不会同步,清除浏览器数据或使用无痕模式会丢失。
看到 [!DANGER] 和 [!PROD] 提示框,分别应该怎么对待?
DANGER 标记的是可能导致数据丢失或集群不可用的操作,执行前必须确认目标设备或对象,在生产上要有回退方案;PROD 是生产实践经验,本地实验时可以先略读,真正上生产前要回来细看。
阶段 0~2 最少需要什么样的实验环境?
一台 Linux 虚拟机即可:2~4 vCPU、4~8 GB 内存、30 GB 左右系统盘,外加 3~4 块虚拟盘。没有虚拟盘时可以用 loop 设备代替。多节点环境要到阶段 3 之后才需要。