先把结论摆在这里:你手机里删了照片但存储空间没怎么变,和云厂商天天讲的块存储、文件存储、对象存储,其实是同一套底层逻辑在不同尺度上的呈现。很多人一听到这三个词就头大,觉得是运维和架构师才需要懂的东西,实际上只要你用过手机、用过网盘、往电脑里插过U盘,你已经在跟这三种存储打交道了,只是没人把它们放一起讲清楚。
这篇文章我就用最直白的方式,把块存储、文件存储、对象存储拆开揉碎。不堆术语,不讲虚的,讲清楚三件事:它们分别是什么、各自解决什么问题、实际项目里到底怎么选。最后再顺手解开两个最近被问爆的场景——手机"假删除"问题和日志链路里 widely 出现的"alloy → loki → 对象存储桶 → grafana"部署模式。搞懂这些,你以后看任何存储相关的技术方案,心里都会有个清晰的坐标系。
1. 一个"删不掉的空间"带我重新理解了存储分层
1.1 文件管理器里的"删除",只是第一层
先还原一个极度常见的场景:你拿着一台平板或者手机,打开相册,把最近拍的几百张照片和视频全部选中、删除。系统弹窗提示"已删除到最近删除"。你去系统设置里看存储空间,好家伙,可用空间几乎没变,甚至有时候还会变得更少了。
这时候绝大多数人的第一反应是:这手机是不是卡了?或者系统有 Bug?我明明删了 5 个 G 的视频,为什么空间没回来?
答案其实藏在存储的工作方式里。存储世界并不是你打开文件管理器看到的那层"文件夹 + 文件"那么简单。你在界面上操作的"删除",落在底层存储设备上,可能只是一条"我标记这块区域为可复用"的指令,并不等于"把这块区域立刻擦干净腾出来"。这个现象和本文要讲的块存储、文件存储、对象存储有直接关系——不同的存储类型,对"删除"这两个字的理解完全不一样。
1.2 从 LBA 到文件系统:存储世界其实有三层抽象
想在十分钟内搞懂三大存储类型,你得先知道一个最底层的概念:LBA,Logic Block Address,逻辑块地址。
不管是手机里的闪存、电脑里的固态硬盘、还是数据中心里的磁盘阵列,物理存储介质被抽象成一个个固定大小的"块"。以最常见的 4K 扇区为例,整块磁盘就是一大串编号从 0 到 N 的块。拿到一块裸盘,你要读写数据,就得告诉存储设备"请把数据写到第 x 号块",这就是 LBA 读写。注意,这个时候你的脑子里不应该有"文件""目录""文件名"这些概念,只有"块"和"地址"。
块存储,就是这一层的东西。你看到的是一块块连续或独立的"裸磁盘",谁来写都行,写什么格式都行。操作系统要在这块裸盘上,再盖一层"文件系统",把第 x 号块、第 y 号块组织成一个个文件和目录,这才有了你熟悉的 C 盘、D 盘、Mac 的访达、Linux 的 /home。文件存储,就是这一层的产物。而对象存储,它是完全跳过了"文件系统"这个思维模式,用另一套"桶 + 对象"的模型来解决更大的问题。
所以你看,同样是"存个文件",背后的存储类型完全不是一回事。现在我们把这三层拆开细讲。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 块存储:把存储切成砖头,让操作系统自己盖房
2.1 块存储的本质是 LBA,不是文件名
块存储最让人困惑的地方在于:它根本不关心你存进去的是什么。一块 100G 的云硬盘(比如云厂商的 EVS/EBS),格式化之后挂载到服务器上,你既可以把它当成一个装文件的磁盘,也可以把它当成 Oracle 数据库的裸设备,还可以做成 LVM 逻辑卷再切成多个小分区。对于块存储系统来说,它只保证一件事:当你告诉它"我要读第 10000 号块",它能把这个块的内容原样返回给你。
块存储的典型物理形态是什么?你电脑里那块 NVMe 固态硬盘,数据中心里的 RAID 磁盘组,SAN(存储区域网络)里通过光纤通道映射给服务器的 LUN,云服务器上挂载的云硬盘。这些东西本质上都是"块设备"。
在上层基础架构中,块存储最常见的两种打开方式:
- 文件系统直接落地:把块设备格式化成 ext4、XFS、NTFS 等文件系统,变成服务器的一个分区或整盘挂载点。
- 裸设备直通:数据库软件不经过文件系统,直接以原始块的方式读写设备。早期 Oracle 数据库特别喜欢这么干,就是为了绕过文件系统的额外开销,榨干磁盘的随机读写性能。
2.2 为什么数据库和虚拟机磁盘非它不可
市面上存储类型这么多,为什么搞虚拟化和数据库的人都对块存储情有独钟?核心原因就两条:延迟低、语义简单。
数据库的写入路径是极度频繁的随机小 I/O。一条 UPDATE 语句可能要写一个数据页,这个页在盘的哪个位置,数据库自己早有算计。它需要的是"我说往哪写就往哪写,你快点给我写完"的直接反馈。块存储没有目录树查询、没有文件锁管理、没有 inode 分配这些中间层开销,天然就适合这种低延迟高并发的随机读写场景。
虚拟机磁盘也是同样道理。你在 OpenStack 或者 VMware 里创建一个虚机,背后往往是一块块存
