2010-05-24 26 views
1

我在Linux和需要了解的任何的两件事情的自由空间映射的块图:Linux的 - 我怎么知道给定的文件和/或分区

1)如果我有一个在Linux下的分区上的某个文件系统上的常规文件是否有一种方法可以知道该文件在用户空间占用的驱动器上的一组物理块?或者至少是文件系统集群的集合?

2)有没有办法获得有关给定文件系统的整个可用空间的相同信息?

在这两种情况下,我明白如果有任何可能的方式来提取这些信息,它可能是完全不安全和活泼的(在我看到它们并以某种方式对它们采取行动之间,这些组块之间会发生任何事情)。我也不想要一个必须知道很多关于每个文件系统的实现。

回答

1

这是不可能的文件系统无关的方式。文件系统甚至不一定建立在块设备之上(简单的例子:NFS)。

ext2ext3ext4可以使用ext2fslib库,其中包括在e2fsprogs分布。

+0

我正在处理的磁盘映像存储为常规文件,并为他们有一个虚拟块设备,类似losetup。我需要的数据是从环形磁盘映像上的文件/分区中收集的。所以我总是有一个块设备,即使后备文件映像通过NFS存储。但无论如何,我明白你的观点,即不知道具体文件系统的细节是不可能的。 – 2010-05-24 09:31:35

3

至少你的第一个问题,它可能在一个独立于文件系统的方式。从my answer to a serverfault question复制:

一种简单的方式来获得块列表(而不必从分区像debugfs答案阅读)是使用FIBMAP IOCTL。我不知道有任何这样做的命令,但写一个很简单;一个快速的谷歌搜索给了我an example of FIBMAP use,这正是你想要的。一个好处是它可以在任何支持bmap操作的文件系统上工作,而不仅仅是ext3。

一个更新的(也是更高效的)备选方案是FIEMAP ioctl,它也可以返回有关范围的详细信息(对ext4有用)。

不幸的是,我不知道任何类似的自由空间。我只知道FITRIM,它告诉底层块设备放弃对应于文件系统空闲空间的块。

+0

谢谢你的回答!我很久以前就问过了,尽管我最终发现了FIB/FIEMAP,但我仍然需要实现一个库来解析所有支持的文件系统格式以找出可用空间范围:( – 2011-11-10 12:27:43

+0

)引用中链接的FIBMAP示例可能是最这个页面上提到的有用的工具 - 它会转储任何文件的分配块列表。 – duskwuff 2013-01-19 02:14:09

1

A filefrag命令行工具让我们来看看分配的文件。它使用先前答案中提到的F​​IEMAP/FIBMAP ioctls。如前所述,这是依赖于文件系统的。不知道除ext2/3/4之外是否还支持这些ioctls。

我不确定报告的物理值是指磁盘的开始还是指向块设备(分区或逻辑卷)的开始。我有感觉它可能是后者。调用位于同一磁盘上但位于不同分区的一堆文件会告诉它。

dumpe2fs命令将报告空闲块。它又是特定于ext2/3/4文件系统的。块号似乎与分区有关。