开始学习

Stage 00 · 启程 · 第 1 / 4

学习路线与使用指南

这套教程怎么学、每个阶段学到什么程度、需要准备什么。

10 分钟|全程第 1 / 38

这套教程写给会用 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:启程——看清数据住在哪里

学到什么程度:能凭记忆画出 Linux I/O 栈的主要层次,说出每一层的一两个关键对象(页缓存、bio、request……);实验虚拟机可以随时加盘、删盘、重建。

阶段 1:入门——玩转一台机器上的存储

学到什么程度:拿到一台新服务器,不查资料也能把几块盘做成 RAID 10 + LVM + XFS 并写进 fstab,重启不出错;能解释 fsyncO_DIRECT 的区别,知道"写成功"在不同调用下分别承诺了什么。这相当于一个合格 Linux 运维对存储的要求。

阶段 2:进阶——会测、会看、会调

学到什么程度:业务说"存储慢",你能在 15 分钟内用 USE 方法给出判断:是盘慢、是队列堵、是缓存没命中,还是根本不是存储的问题;能写出一份可复现的 fio 测试报告,并指出别人报告里的常见陷阱(测的是页缓存、队列深度不对、没预热 SSD……)。这一阶段是整套课程里投入产出比最高的部分,建议花最多时间。

阶段 3:原理——从单机走向分布式

学到什么程度:能向同事讲清楚一次 Ceph 写入从客户端到三个 OSD 落盘的全过程;能根据容量效率、重建代价和小文件性能,为一个场景在三副本和 4+2 纠删码之间做出有理由的选择。

阶段 4:生产——部署并运维 Ceph 与 K8s 存储

学到什么程度:能独立完成一套 Ceph 集群从规划、部署、对接 Kubernetes 到监控告警的全过程;坏盘替换、滚动升级这类日常变更能写出 SOP 并执行;看到 HEALTH_WARN 知道哪些可以明天处理、哪些必须现在处理。这一阶段需要多台虚拟机,每课开头会写明环境要求。

阶段 5:专家——高性能存储与 AI 平台

学到什么程度:面对"给 512 张 GPU 的训练集群配存储"这样的需求,能拆出容量、带宽、IOPS、元数据指标,给出两三个候选方案和它们的成本、风险;能带一个小团队值班,故障后能主持复盘。

需要准备什么

前置知识

你需要具备:

  • Linux 命令行:会用 cdlscatvim/nanopsgrep,知道进程、文件权限、sudo、软件包管理(apt)是什么。
  • 一点 C 的阅读能力:不需要会写,但要能看懂 open()write()fsync() 这样的函数调用和返回值。阶段 2 的 bpftrace 脚本语法接近 C。
  • 基本网络概念:IP、端口、TCP、带宽与延迟。阶段 3 之后会大量用到。

不需要:事先了解任何存储产品、会写内核代码、有物理服务器。

硬件与环境

阶段需要的环境说明
0~21 台 Linux 虚拟机:2~4 vCPU、4~8 GB 内存、系统盘 30 GB,外加 3~4 块 10~20 GB 虚拟盘一台 16 GB 内存的笔记本就够。没有虚拟盘也能用 loop 设备代替
32~3 台虚拟机,同一内网互通搭 NFS / iSCSI 服务端和客户端;分布式原理部分用单机多进程也能模拟
43~4 台虚拟机,每台 4 vCPU、8 GB 内存、3 块以上 20 GB 虚拟盘部署 Ceph 和 Kubernetes,宿主机建议 32 GB 内存以上,或者用云主机
53~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 仓库或任何你习惯的笔记工具,记下每次实验的:

text
日期 / 环境(内核版本、盘的类型和大小)
我想验证什么
执行了什么命令
看到了什么(贴关键输出,不要只贴结论)
和预期不一样的地方,以及原因

三个月后你会发现,这份笔记比任何教程都值钱——尤其是"和预期不一样"那一栏。

3. 先有数量级,再有细节

不需要背下每个参数,但一定要对数量级有直觉:内存访问是百纳秒级,NVMe 是几十微秒级,机械盘是毫秒级,跨机房是几十毫秒级。看到一个 await 是 5 ms 的 NVMe 盘,你应该立刻觉得"不对劲"。存储全景一课的延迟表建议打印出来贴在显示器旁边。

4. 读一手资料

本站负责把知识串成路线,但它不能替代原始资料:

  • man 手册man 2 writeman 2 fsyncman 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~15.5 小时2 周
25 小时2~3 周(多花时间反复测)
34.3 小时2 周
46.7 小时3~4 周(取决于实验环境)
55.7 小时3~4 周

宁可慢一点,也要把每课的"动手练习"真正做一遍。

内容来源

  1. 经典书籍:方法论、文件系统与磁盘部分主要参考 Brendan Gregg《Systems Performance: Enterprise and the Cloud, 2nd Edition》,引用处会注明章节。本站用自己的话讲解,并补充了实验。
  2. 官方文档:Linux 内核文档、Ceph、Kubernetes、IBM Storage Scale 等,每课末尾列出链接。
  3. 生产实践:阶段 4、5 的大量内容来自真实生产环境中 Ceph、Rook、GPFS、JuiceFS、3FS 等系统的部署与运维经验。引用时已去除内部域名和 IP,统一改成 example.com192.168.x.x 这类示例值,使用时请替换成你自己的环境。

动手练习

  1. 浏览左侧目录,找到阶段 4 的"Ceph 故障排查闯关"一课,看一眼它的结构,再回到本课,熟悉导航。
  2. 对照"六个阶段的路线图",给自己每个阶段打个分(0~3 分),确定从哪里开始、哪些阶段可以快速略过。
  3. 打开容量计算器,算一算 10 节点 × 12 块 16 TB 硬盘在三副本和 8+3 纠删码下的可用容量,记下差距。
  4. 新建一个实验笔记(Git 仓库或笔记软件都行),写下第一条记录:你电脑的 CPU 核数、内存大小和剩余磁盘空间,判断能不能跑阶段 0~2 的实验虚拟机。
  5. 把本课标记为"已完成",刷新页面,确认目录里的完成标记仍然存在。

自测

为什么本课程要先讲单机 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 之后才需要。

参考资料

学完了吗?

进度保存在本机浏览器中,可在学习路线页查看。