第1章 Linux开源存储 1
1.1 Linux和开源存储 1
1.1.1 为什么需要开源存储 3
1.1.2 Linux开源存储技术原理和解决方案 6
1.2 Linux开源存储系统方案介绍 8
1.2.1 Linux单节点存储方案 8
1.2.2 存储服务的分类 11
1.2.3 数据压缩 13
1.2.4 重复数据删除 16
1.2.5 开源云计算数据存储平台 27
1.2.6 存储管理和软件定义存储 29
1.2.7 开源分布式存储和大数据解决方案 33
1.2.8 开源文档管理系统 37
1.2.9 网络功能虚拟化存储 39
1.2.10 虚拟机/容器存储 40
1.2.11 数据保护 43
1.3 三大顶级基金会 44
第2章 存储硬件与协议 47
2.1 存储设备的历史轨迹 47
2.2 存储介质的进化 53
2.2.1 3D NAND 53
2.2.2 3D XPoint 55
2.2.3 Intel Optane 58
2.3 存储接口协议的演变 59
2.4 网络存储技术 62
第3章 Linux存储栈 67
3.1 Linux存储系统概述 67
3.2 系统调用 69
3.3 文件系统 72
3.3.1 文件系统概述 73
3.3.2 Btrfs 75
3.4 Page Cache 80
3.5 Direct I/O 82
3.6 块层(Block Layer) 83
3.6.1 bio与request 84
3.6.2 I/O调度 86
3.6.3 I/O合并 88
3.7 LVM 90
3.8 bcache 93
3.9 DRBD 96
第4章 存储加速 99
4.1 基于CPU处理器的加速和优化方案 100
4.2 基于协处理器或其他硬件的加速方案 103
4.2.1 FPGA加速 103
4.2.2 智能网卡加速 105
4.2.3 Intel QAT 107
4.2.4 NVDIMM为存储加速 110
4.3 智能存储加速库(ISA-L) 111
4.3.1 数据保护:纠删码与磁盘阵列 112
4.3.2 数据安全:哈希 113
4.3.3 数据完整性:循环冗余校验码 115
4.3.4 数据压缩:IGZIP 116
4.3.5 数据加密 117
4.4 存储性能软件加速库(SPDK) 117
4.4.1 SPDK NVMe驱动 119
4.4.2 SPDK应用框架 133
4.4.3 SPDK用户态块设备层 136
4.4.4 SPDK vhost target 150
4.4.5 SPDK iSCSI Target 156
4.4.6 SPDK NVMe-oF Target 163
4.4.7 SPDK RPC 165
4.4.8 SPDK生态工具介绍 172
第5章 存储安全 181
5.1 可用性 181
5.1.1 SLA 181
5.1.2 MTTR、MTTF和MTBF 182
5.1.3 高可用方案 183
5.2 可靠性 185
5.2.1 磁盘阵列 186
5.2.2 纠删码 187
5.3 数据完整性 188
5.4 访问控制 189
5.5 加密与解密 191
第6章 存储管理与软件定义存储 194
6.1 OpenSDS 194
6.1.1 OpenSDS社区 195
6.1.2 OpenSDS架构 195
6.1.3 OpenSDS应用场景 198
6.1.4 与Kubernetes集成 200
6.1.5 与OpenStack集成 200
6.2 Libvirt存储管理 201
6.2.1 Libvirt介绍 201
6.2.2 Libvirt存储池和存储卷 205
第7章 分布式存储与Ceph 206
7.1 Ceph体系结构 209
7.1.1 对象存储 211
7.1.2 RADOS 212
7.1.3 OSD 212
7.1.4 数据寻址 214
7.1.5 存储池 219
7.1.6 Monitor 220
7.1.7 数据操作流程 227
7.1.8 Cache Tiering 228
7.1.9 块存储 230
7.1.10 Ceph FS 232
7.2 后端存储ObjectStore 235
7.2.1 FileStore 236
7.2.2 BlueStore 240
7.2.3 SeaStore 243
7.3 CRUSH算法 244
7.3.1 CRUSH算法的基本特性 244
7.3.2 CRUSH算法中的设备位置及状态 246
7.3.3 CRUSH中的规则与算法细节 249
7.3.4 CRUSH算法实践 254
7.3.5 CRUSH算法在Ceph中的应用 261
7.4 Ceph可靠性 262
7.4.1 OSD多副本 263
7.4.2 OSD纠删码 264
7.4.3 RBD mirror 265
7.4.4 RBD Snapshot 267
7.4.5 Ceph数据恢复 271
7.4.6 Ceph一致性 274
7.4.7 Ceph Scrub机制 278
7.5 Ceph中的缓存 279
7.5.1 RBDCache具体实现 285
7.5.2 固态硬盘用作缓存 287
7.6 Ceph加密和压缩 289
7.6.1 加密 289
7.6.2 压缩 291
7.6.3 加密和压缩的加速 294
7.7 QoS 294
7.7.1 前端QoS 294
7.7.2 后端QoS 295
7.7.3 dmClock客户端 297
7.8 Ceph性能测试与分析 298
7.8.1 集群性能测试 299
7.8.2 集群性能数据 304
7.8.3 综合测试分析工具 307
7.8.4 高级话题 311
7.9 Ceph与OpenStack 315
第8章 OpenStack存储 318
8.1 Swift 321
8.1.1 Swift体系结构 321
8.1.2 环 327
8.1.3 Swift API 330
8.1.4 认证 331
8.1.5 对象管理与操作 333
8.1.6 数据一致性 337
8.2 Cinder 338
8.2.1 Cinder体系结构 338
8.2.2 Cinder API 341
8.2.3 cinder-scheduler 342
8.2.4 cinder-volume 343
8.2.5 cinder-backup 347
第9章 容器存储 348
9.1 容器 348
9.1.1 容器技术框架 350
9.1.2 Docker 353
9.1.3 容器与镜像 355
9.2 Docker存储 356
9.2.1 临时存储 357
9.2.2 持久化存储 366
9.3 Kubernetes存储 369
9.3.1 Kubernetes核心概念 370
9.3.2 Kubernetes数据卷管理 376
9.3.3 Kubernetes CSI 380