我正在用C语言编写一些软件,该软件以递归方式列出给定目录中的所有文件,现在我需要计算内部碎片。

我花了很长时间进行研究,发现ext2的内部碎片仅发生在最后一个块中。 我知道从理论上讲,一个inode编号应该可以获取第一个和最后一个块地址,但是我不知道如何。

我研究了stat()fcntl()和各种方法。 如何从inode编号获得最后一个块地址?

我还发现,一旦有了最后一个块的地址,就可以测试该块的可用空间,这将给我内部碎片。

我知道有一个get_inodeget_block命令,但get_block

===============>>#1 票数:1

我认为您无法通过常规系统调用(例如stat()获得磁盘块的地址。 您可能必须在磁盘上找到原始索引节点(这意味着访问原始磁盘,并且需要提升的特权)并从那里处理数据。

通常,您会找到文件的直接块,间接块,双间接块和三重间接块。 但是,相关的文件系统类型几乎和dodo一样死了(我认为我没有看到这个千年的文件系统类型),所以现在不太可能有太大帮助。

可能会有非标准的系统调用来获取信息,但我对此表示怀疑。

===============>>#2 票数:1

也许您认为过于复杂,但是如果将文件大小除以块大小并取模,则大致可以计算内部碎片。

但这仅在文件为“经典文件”时才有效-稀疏文件或包含大量“其他信息”的文件(例如,巨大的ACL或扩展属性),可能会有所不同。 (我不知道它们的存储位置,但是我可以想象可能有文件系统将它们存储在最后一个块中,从而有效地(但不引起注意)减少了内部碎片。)

  ask by Charlie translate from so

未解决问题?本站智能推荐: