Linuxの詳細スパースファイル情報

Linuxの詳細スパースファイル情報

一部のブロックのみが割り当てられたスパースファイルがあります。

~% du -h --apparent-size example
100K    example
~% du -h example
52K     example

ファイルのどのブロックが実際に割り当てられたかを知りたいです。割り当てリストまたはファイルの脆弱性リストを取得するために使用できるシステムコールまたはカーネルインターフェイスはありますか?

単にゼロからなる十分に長い文字列(GNU cp、rsyncなどで使用する方法)をチェックするだけでは機能しません。

~% cp example example1  
~% du -h example1 
32K     example1

実際に割り当てられた他のゼロシーケンスを検出します。

ベストアンサー1

持つSOに同様の質問があります。これ現在承認されている回答渡す@ephemientioctl以下を使用することをお勧めfiemapします。linux/Documentation/filesystems/fiemap.txt。文書の引用:

fiemap ioctl は、ユーザー空間がファイル範囲マッピングを取得する効率的な方法です。 fiemapは、ブロック固有のマップ(bmapなど)ではなく範囲のリストを返します。

これがあなたが探している情報のようです。ファイルシステムのサポートもオプションです。

fiemapをサポートするファイルシステムは、構造体にコールバックを実装する必要があり->fiemap ますinode_operations

あなたのための支持SEEK_DATASEEK_HOLE主張lseekソラリスで言及Linux 3.1に従って追加されましたマニュアルページだから、あなたもそれを使用することができます。このバージョンはfiemap ioctl古いように見えるため、現在は異なるLinuxバージョン間でより移植性が高くなる可能性があり、lseekSolarisが同じオペレーティングシステムを使用している場合は、異なるオペレーティングシステム間で移植性が高くなる可能性があります。

おすすめ記事