Administrator
Published on 2026-01-15 / 0 Visits
0
0

一篇讲透:块存储、分布式存储、对象存储到底是什么关系?

很多人第一次接触存储体系时,都会被一堆词绕晕:块存储、文件存储、分布式存储、对象存储、分布式对象存储、分布式文件系统、分布式块设备……
其实它们不是“互相替代”的关系,而是不同抽象层、不同访问语义、不同工程目标的组合。

下面我用一篇文章把这些概念捋成一条清晰的逻辑链。


一、什么是块存储?块存储是和什么比较出来的?

块存储(Block Storage)是一种存储呈现方式:
它把数据切成固定大小的块(block)
,每个块有地址,像“硬盘扇区/块地址”一样被读写。上层看到的是一块裸磁盘/卷(Volume),而不是“文件”。AWS 的对比解释里也强调:块存储会把数据拆成等大小块并按优化方式存储,适合快速访问与检索。

与之比较的典型是:

  • 文件存储(File Storage / NAS):上层直接看到“目录/文件”层级。

  • 对象存储(Object Storage):上层看到的是“对象 + 元数据 + ID/Key”,不是文件系统目录树。

一句话类比:

  • 块存储:给你一块“生盘”(/dev/sdb),你自己建分区、建文件系统。

  • 文件存储:给你一个“共享文件夹”(/share),你直接读写文件。

  • 对象存储:给你一个“桶 + Key”(bucket/key),你 PUT/GET 对象。


二、块存储“是怎么存的”?

你在主机上看到的“块存储”,通常长这样:

  • Linux:/dev/vdb/dev/mapper/xxx

  • Windows:一块新磁盘(Disk)/ 一个卷(Volume)

1)块存储对主机暴露的是“块设备”

主机拿到的是一个可寻址的块设备,操作系统会在其上:

  • 建分区(可选)

  • 创建文件系统(ext4/xfs/ntfs 等)

  • 本机文件系统负责目录、权限、文件锁、碎片整理等

也就是说:
块存储只负责提供“可随机读写的块地址空间”
❗文件语义(文件名、目录、权限)是主机自己实现的。

2)块是“固定大小”,但上层可以随机读写

块存储特别擅长:

  • 随机读写(Random I/O)

  • 低延迟事务写入

  • 细粒度更新(改一个 4KB 页,不用重写整文件)

这也是数据库、虚拟化磁盘镜像偏爱块存储的根本原因。


三、哪些数据“必须”用块存储?(场景清单)

不是所有数据都该用块存储。块存储最适合这类工作负载:

✅ 1)数据库 / 事务型系统(强烈推荐块存储)

  • MySQL/PostgreSQL/Oracle

  • ES/ClickHouse(取决于架构,但多数核心数据盘仍偏块)
    原因:随机读写、写放大控制、延迟敏感

✅ 2)虚拟化与云主机系统盘/数据盘

  • VM 的虚拟磁盘(VMDK/QCOW2 的底层卷)

  • 云主机 EBS/云硬盘这种本质就是块卷
    原因:虚拟机需要“像真实硬盘一样”的语义与性能。

✅ 3)高性能文件系统的底座

你想要一个本机 ext4/xfs 的体验(比如应用只认本地路径、锁语义复杂),就让它跑在块存储上。

⚠️ 不太建议块存储的典型数据

  • 海量小图片/视频/归档:对象存储更省心

  • 多人共享文档协作:文件存储(CIFS/NFS)更自然

  • 需要跨机共享同一目录:单纯块卷做不到(除非上层做集群文件系统/共享机制)


四、什么是分布式存储?“分布式”到底指什么?

分布式存储(Distributed Storage)不是一种“访问协议”,而是一种架构方式

数据不放在一台存储设备里,而是分散到多台节点上,通过复制/纠删码/一致性协议实现容量与可靠性扩展。

关键点:

  • 分布式存储描述的是后端如何组织数据

  • 块/文件/对象描述的是前端如何访问数据

所以它们是两条正交维度:

  • 前端接口:块 / 文件 / 对象

  • 后端架构:单机 / 集群 / 分布式


所谓分布式存储,就是这个底层的存储系统,因为要存放的数据非常多,单一服务器所能连接的物理介质是有限的,提供的IO性能也是有限的,所以通过多台服务器协同工作,每台服务器连接若干物理介质,一起为多个系统提供存储服务。为了满足不同的访问需求,往往一个分布式存储系统,可以同时提供文件存储、块存储和对象存储这三种形式的服务。

五、分布式存储到底是“分布式文件”还是“分布式块”?

答案是:都可以。分布式存储可以对外提供块、文件、对象三种接口

一个非常典型的例子是 Ceph:
它在同一个分布式底座(RADOS)上,上层可以提供 RBD 块设备、CephFS 文件系统、RGW 对象网关。官方文档与介绍也明确强调这三种接口共存。

1)分布式文件存储(Distributed File Storage)

对外像 NAS:目录/文件
典型:CephFS、GlusterFS、HDFS(偏大数据)
适合:共享目录、协作、容器共享卷(某些场景)

2)分布式块存储(Distributed Block Storage)

对外像“云硬盘”:卷/块设备
典型:Ceph RBD、OpenStack Cinder 后端等
适合:云主机卷、数据库卷、虚拟化

3)分布式对象存储(Distributed Object Storage)

对外像 S3:bucket/object
典型:Ceph RGW、MinIO、各云厂商对象存储
适合:海量非结构化数据、备份归档、静态资源、数据湖


六、对象存储是什么?它和文件存储有什么本质不同?

对象存储的核心特征是:

  • 数据以 对象(Object) 形式管理

  • 每个对象带丰富元数据

  • 用全局唯一 Key/ID 定位,不依赖“目录树”

  • 接口通常是 HTTP/REST(如 S3 API)

AWS 与 Red Hat 都把对象存储描述为:以对象为单位管理数据,并关联元数据,而不是目录文件层级。
对象存储的通用定义也强调:它以对象/Blob 组织数据,区别于文件层级与块寻址。

为什么对象存储特别适合“海量非结构化”?

因为它更容易做到:

  • 横向扩展(bucket/namespace 天生适合跨节点)

  • 便宜的大容量

  • 通过元数据做生命周期管理(分层、归档、版本、保留策略等)

但它通常不擅长:

  • 需要 POSIX 文件锁语义的协作编辑

  • 小延迟事务随机写(对象 PUT/GET 往往以“对象整体”为单位)


七、有“分布式对象存储”一说吗?

不仅有,而且这是对象存储最常见的形态。

原因很简单:对象存储的设计目标往往就是海量扩展与高可靠,天然适合分布式实现。
比如 Ceph 的对象能力就是通过 RGW 提供对象接口,并由分布式集群承载。Ceph 技术架构介绍也把 RGW(对象)、RBD(块)、CephFS(文件)并列为 Ceph 的三大接口层。 (Ceph)

所以你可以这样记:

“对象存储 ≈ 更经常以分布式形态出现”
“文件/块存储”既可以是集中式,也可以是分布式。


八、最容易搞混的点:块/文件/对象 vs 分布式/集中式

把它们放到一个“二维表”里就清楚了:

  • 横轴:访问接口(你怎么用):块 / 文件 / 对象

  • 纵轴:后端架构(它怎么存):集中式 / 分布式

于是会得到 6 种组合:

  • 集中式块:SAN/云硬盘的某些实现

  • 分布式块:Ceph RBD

  • 集中式文件:传统 NAS(CIFS/NFS)

  • 分布式文件:CephFS / GlusterFS

  • 集中式对象:小规模对象存储设备(少见)

  • 分布式对象:S3/Ceph RGW/MinIO(最常见)


九、选型速查:你该用块、文件还是对象?

选块存储(Block)如果你有:

  • 数据库、事务系统

  • VM 磁盘、系统盘

  • 低延迟随机 I/O

  • 想要完全掌控本机文件系统

选文件存储(File)如果你有:

  • 多人共享目录

  • 办公协作、工程文件共享

  • 需要 POSIX/锁语义(NFS)或 Windows ACL(SMB/CIFS)

选对象存储(Object)如果你有:

  • 海量图片/视频/日志归档/备份

  • 需要生命周期管理、版本、跨地域

  • 以“对象整体”读写为主(PUT/GET)



Comment