2010-05-24 98 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文件系統的。塊號似乎與分區有關。