首页/系统/Linux 运维命令速查/fallocate 预分配文件空间
文件与目录76 条

fallocate 预分配文件空间

秒级预分配磁盘空间(不写实际数据),用于备份盘预留、测试大文件与防「写满才发现」;比 dd 快几个数量级。

Linux 运维命令速查系统更新于 2026-10-13

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 回退,或换到支持的本地文件系统上操作。

易错点

  • 在不支持的文件系统上使用:报 Operation not supported,先确认文件系统类型再用 dd 回退
  • 以为预分配不占空间:fallocate 与 truncate 语义相反,用 du 与 ls -ls 一对比就看出来
  • 容量紧张时预分配大文件:可能直接把盘写满影响业务,执行前用 df 确认余量
  • 混淆 du 与 ls 的输出:du 显示物理占用、ls -lh 显示逻辑大小,评估稀疏文件必须看物理占用

数据来源与参考

  • man 1 fallocate(util-linux 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌