簡體   English   中英

Linux - 我如何知道給定文件的塊 map 和/或分區的可用空間 map

[英]Linux - How do i know the block map of the given file and/or the free space map of the partition

我在 Linux 上,需要知道以下兩件事之一:

1) 如果我在 Linux 下的分區上的某個文件系統上有一個常規文件,有沒有辦法從用戶空間知道該文件在驅動器上占用的物理塊集? 或者至少是文件系統的集群集?

2)有沒有辦法獲得關於給定文件系統的整個可用空間的相同信息?

在這兩種情況下,我都知道如果有任何可能的方法來提取此信息,它可能是完全不安全和活潑的(在我看到它們並以某種方式對它們采取行動之間,這些塊集可能發生任何事情)。 我也真的不想要一個必須對每個文件系統都了解很多的實現。

至少對於第一個問題,可能以與文件系統無關的方式出現。 我的答案復制到serverfault問題

一種獲取塊列表(無需像debugfs答案那樣從分區中讀取)的簡單方法是使用FIBMAP ioctl。 我不知道要這樣做的任何命令,但是寫一個命令很簡單。 快速的Google搜索為我提供了FIBMAP用法的示例 ,它確實可以滿足您的需求。 一個優點是它可以在支持bmap操作的任何文件系統上運行,而不僅僅是ext3。

FIEMAP ioctl是更新(更有效)的替代方法, FIEMAP可以返回有關范圍的詳細信息(對ext4有用)。

不幸的是,我對空閑空間一無所知。 我只知道FITRIM ,它告訴基礎塊設備丟棄與文件系統的可用空間相對應的塊。

Filefrag命令行工具讓您查看文件的分配。 它使用前面的答案中提到的F​​IEMAP / FIBMAP ioctl。 如前所述,這取決於文件系統。 不確定除ext2 / 3/4以外的其他功能是否支持這些ioctl。

我不確定所報告的物理值是指磁盤的開始還是塊設備(分區或邏輯卷)的開始。 我覺得可能是后者。 調用位於同一磁盤上但位於不同分區中的一堆文件將告訴您。

dumpe2fs命令將報告可用塊。 同樣,它特定於ext2 / 3/4文件系統。 塊號似乎與分區有關。

以文件系統無關的方式是不可能的。 文件系統甚至不一定建立在塊設備之上(簡單示例:NFS)。

對於ext2ext3ext4您可以使用ext2fslib庫,該庫包含在e2fsprogs發行版中。

對於許多文件系統類型,選項--domain of partclone.[fstype]可以 output 塊 bitmap。 +標記使用的塊范圍,參見https://github.com/Thomas-Tsai/partclone/issues/174

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM