Linux 快速文件空间分配:fallocate 命令详解
前言
以前通过我这边初始化虚拟机会使用dd进行磁盘空间占用使其达标(zf项目有要求),但dd实际太慢了,下面就开始使用fallocate。
fallocate 是一个高效的文件预分配工具,可以快速为文件分配磁盘空间,而不需要实际写入数据。
主要优势
| 优势 | 说明 |
|---|---|
| 速度极快 | 直接通知文件系统分配空间,无需实际写入 |
| 节省时间 | 毫秒级完成,GB级文件秒速搞定 |
| 节省I/O | 不进行实际的磁盘写操作 |
| 预留空间 | 预先保留存储空间,避免运行时不足 |
| 支持稀疏文件 | 可以创建包含空洞的文件 |
# 例子:
fallocate -l 3G ./csapps_data01.log
基本语法
fallocate [选项] 文件名
常用选项详解
| 选项 | 描述 | 示例 |
|---|---|---|
-l, --length SIZE |
指定要分配的字节数 | -l 3G |
-o, --offset OFFSET |
从文件的指定偏移量开始分配 | -o 1G -l 2G |
-n, --keep-size |
保持文件大小不变(仅填充数据) | fallocate -n -l 10G file |
-p, --punch-hole |
打孔操作,释放指定范围的空间 | -p -o 1G -l 2G |
-d, --dig-holes |
检测文件中的空洞 | -d file |
-z, --zero-range |
将指定范围的字节归零 | -z -o 0 -l 5G |
使用案例
案例1:快速创建3GB日志文件
[root@host56 test]# fallocate -l 3G ./csapps_data01.log
[root@host56 test]# ll
总用量 3145728
-rw-r--r-- 1 root root 3221225472 1月 7 10:07 csapps_data01.log
[root@host56 test]#
案例2:指定偏移量分配空间
# 从第1GB处开始,再分配2GB空间
fallocate -o 1G -l 2G ./myfile.log
案例3:保持文件大小,填充数据
# 分配10GB空间,但文件显示大小不变
fallocate -n -l 10G ./sparse_file
案例4:创建多个大文件
# 快速为数据库预分配空间
for i in {1..5}; do
fallocate -l 100G ./data_$i.bin
done
案例5:打孔释放空间(稀疏文件)
# 释放第1GB到3GB的空间
fallocate -p -o 1G -l 2G ./large_file
性能对比

注意事项
# 需要足够的磁盘空间
fallocate -l 1T ./huge.log # 确保磁盘有1TB可用空间
# 某些文件系统可能不支持
# ext4, XFS, Btrfs, F2FS: ✅ 支持
# NFS, FAT32: ❌ 不支持
# 查看文件系统类型
df -T