Linux系统之fallocate详解

fallocate 通过快速分配或释放文件空间来管理磁盘块,无需实际写入数据,比用零填充文件更快。支持的操作包括预分配空间、打洞(创建稀疏区域)、折叠范围等。其核心功能依赖于文件系统的 fallocate 系统调用,适用于支持该功能的文件系统(如 ext4、XFS、Btrfs 等)。

基本语法

fallocate [选项] 文件名

选项

选项描述
-c, --collapse-range折叠范围:从 offset 开始删除指定长度 length 的数据,后续数据前移,文件变小。需指定 -o-l,且不支持 --keep-size
-d, --dig-holes挖掘空洞:将文件中连续的零转换为稀疏区域(空洞),减少磁盘占用。默认覆盖整个文件,隐含 --keep-size
-i, --insert-range插入空洞:在 offset 处插入长度 length 的空洞,并将后续数据右移。需指定 -o-l
-l, --length length指定操作范围的长度(字节),支持单位后缀(如 K, M, G)。
-n, --keep-size保持文件大小:不修改文件的逻辑长度,但可能分配 EOF 以外的块(需后续 truncate 删除)。
-o, --offset offset指定操作范围的起始偏移量(字节)。
-p, --punch-hole打洞:释放指定范围内的空间,后续读取返回零。隐含 --keep-size,支持 XFS、ext4、Btrfs、tmpfs 等。
-v, --verbose显示详细操作信息。
-x, --posixPOSIX 模式:强制使用兼容模式,即使文件系统不支持快速分配,也会完成操作(可能耗时更长)。
-z, --zero-range零化范围:将指定范围内的数据设为零,但仅分配未初始化的块。支持 --keep-size
-V, --version显示版本信息并退出。
-h, --help显示帮助信息并退出。

互斥选项

以下选项不能同时使用:

  • -c(折叠范围)、-p(打洞)、-z(零化范围)。

参数说明

  • 单位后缀
    长度和偏移量支持以下单位后缀:
    • KiB(=1024)、MiB(=1024²)、GiB 等(iB 可省略,如 K 等效 KiB)。
    • KB(=1000)、MB(=1000²)、GB 等。

退出状态

状态码含义
0操作成功。
1操作失败(如权限不足、无效参数、文件系统不支持等)。

示例

示例 1:预分配 100MB 空间

fallocate -l 100M file.txt

示例 2:打洞(释放文件中 512KB 的范围)

fallocate -p -o 1024 -l 512K file.txt

示例 3:折叠范围(删除 100KB 数据)

fallocate -c -o 0 -l 100K file.txt

示例 4:挖掘空洞(将文件中零转换为空洞)

fallocate -d file.txt

示例 5:零化范围(将偏移 512KB 处的 1MB 区域设为零)

fallocate -z -o 512K -l 1M file.txt

示例 6:插入空洞(在偏移 1MB 处插入 2MB 空洞)

fallocate -i -o 1M -l 2M file.txt

注意事项

  1. 权限要求

    • 需要对文件有写权限,且对文件系统有操作权限(如 root)。
  2. 文件系统支持

    • 打洞(--punch-hole:支持 XFS(Linux 2.6.38+)、ext4(3.0+)、Btrfs(3.7+)、tmpfs(3.5+)。
    • 折叠范围(--collapse-range:仅支持 ext4(extent 文件)和 XFS(Linux 3.15+)。
    • 零化范围(--zero-range:支持 ext4(extent 文件)和 XFS(Linux 3.14+)。
  3. 风险提示

    • 折叠范围操作会永久删除数据,需谨慎使用。
    • --keep-size:若文件大小未修改,但分配了 EOF 以外的块,需用 truncate 修复文件长度。
  4. 性能优势

    • 预分配或打洞操作无需实际 I/O,速度远快于 ddtruncate
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值