fallocate 预分配空间
fallocate 为文件预分配磁盘块,但不写入实际数据,所以几 GB 的空间在毫秒级就能分配完成,比 dd 快几个数量级。常见用途是备份盘预留空间、测试大文件场景、避免“写到一半才发现盘满”。要把它和 truncate 分清楚:truncate 造的是稀疏文件,逻辑大小很大但几乎不占物理块,两者语义正好相反。
基本信息
| 适用平台 | Linux(ext4、xfs、btrfs 等主流本地文件系统) |
|---|---|
| 语法 | fallocate -l 大小 文件;fallocate -d 文件(打洞释放) |
| 权限要求 | 对目标目录有写权限即可 |
| 相关命令 | truncate、dd、df、du、ls -ls |
| 限制 | tmpfs、NFS、部分 overlay 文件系统不支持 |
典型使用场景
- 备份盘预留空间,确保关键备份能完整写入
- 测试磁盘写入性能与文件大小边界
- 预建大文件供特定应用或数据库使用
- 演练“磁盘写满”故障与监控告警
- 用 -d 释放已分配的块(配合稀疏文件场景)
常用示例
常用示例
fallocate -l 10G /backup/reserve.img # 预占 10G 空间,毫秒级完成
df -h /backup # 确认空间真的被占用
du -h /backup/reserve.img # du 显示 10G,说明不是稀疏文件
fallocate -l 1G testfile; du -h testfile # 逻辑大小与物理占用都接近 1G
fallocate -d testfile # 打洞释放已分配的块
truncate -s 1G sparse.img; du -h sparse.img # 对比:稀疏文件几乎不占物理空间
ls -ls sparse.img # 第一列是实际占用块数,快速判断是否稀疏
df -h /backup # 释放后再确认空间是否回收与相关工具的区别
| 工具 | 行为 | 适用场景 |
|---|---|---|
| fallocate | 直接分配块,不写数据 | 需要保证空间可写时用 |
| truncate | 调整大小,默认稀疏 | 需要占位但不想占空间时用 |
| dd 加 /dev/zero | 真实写数据,慢 | 文件系统不支持 fallocate 时的回退 |
| du | 统计物理占用 | 区分稀疏与预分配的关键手段 |
| ls -ls | 第一列显示占用块数 | 一眼看出是否稀疏 |
fallocate 会立刻占用磁盘空间:在容量紧张的盘上误操作可能直接把盘写满并影响业务,执行前先用 df 确认余量。
tmpfs、NFS 以及部分 overlay 文件系统不支持 fallocate,报 Operation not supported 时改用 dd if=/dev/zero 回退,或换到支持的本地文件系统上操作。