linux - 如何从 ext2/ext3 文件系统上的稀疏文件中删除一些 block

标签 linux filesystems

当你写一个稀疏文件时,ext2/ext3 文件系统会自动分配 block ,但是当我不再需要它们的一些 block 时,我找不到办法去做。感觉就像在没有 free() 的情况下使用 malloc()。 是否可以“释放”稀疏文件的某些 block ?如果是,怎么办? 不要告诉我将它复制到一个新文件。它太无聊了,需要大量磁盘空间。

最佳答案

从 Linux 2.6.38 开始,有一个标志 fallocate称为 FALLOC_FL_PUNCH_HOLE 应该做你想做的,即在任意位置释放文件空间。

fallocate(fd, FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE, offset, len);

将在描述符 fd 指示的文件中打一个洞。空洞将从 offset 开始,长度为 len,均以字节为单位。实际上只会删除整个 block ,部分 block 将被清零。

关于linux - 如何从 ext2/ext3 文件系统上的稀疏文件中删除一些 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1265192/

相关文章:

ruby - 如何全局使用单用户的 RVM 安装?

linux - linux 中的无密码基于 key 的身份验证不起作用

c - 如何在 Linux 中以编程方式获取磁盘名称(如 "/dev/sda"或 "/dev/sdb")?

objective-c - 移动后找到文件

java - 如何判断 Linux 机器上的目录是否在 Java 中挂载了外部文件系统?

android - osmdroid 的用户代理

linux - 如何修复此虚拟主机设置?

linux - ping 脚本和日志输出并用 grep 剪切

c++ - 如何确定文件何时完成复制以供进一步处理?

c# - 通过 C# 确定字符串是否为有效文件路径