【发布时间】:2012-01-18 00:26:18
【问题描述】:
我正在用 C 语言编写一些软件,它会递归地列出给定目录中的所有文件,现在我需要解决内部碎片问题。
我花了很长时间研究这个,发现ext2上的内部碎片只发生在最后一个块中。我知道从理论上你应该能够从 inode 编号获得第一个和最后一个块地址,但我不知道如何。
我已经研究过stat()、fcntl() 和各种方式。如何从 inode 号中获取最后一个块地址?
我还发现,一旦我有了最后一个块的地址,我就可以测试该块中有多少可用空间,这会给我内部碎片。
我知道有一个get_inode 和一个get_block 命令,但除此之外一无所知!
【问题讨论】:
-
检查
filefrag实用程序的工作原理。 linux.die.net/man/8/filefrag 说它使用 FIEMAP 或 FIBMAP - 它是 ioctl 的 -
谢谢,我现在正在尝试寻找 filefrags 代码,看看它是如何做到的......
-
Ollie,它是 e2fsprogs 的一部分,路径是
/misc/filefrag.c。此实用程序是 linux 特定的,可能不适用于某些 FS(支持 EXT2/3/4)