Linux EXT 4:ブロックグループを占有するファイルを一覧表示するには?私はファイルが複数のブロックグループにまたがることができると思います。ブロックグループが与えられたら、その中に含まれるすべてのファイルのパスをどのように列挙できますか?
答え1
大きな困難を経験しています。これe2fsprogsパッケージには、必要な基本事項、特にdebugfs
ファイルシステムを参照し、ブロックグループとファイルの割り当てを表示するために使用できる基本事項が含まれています。以下は、debugfs statsおよびExtentコマンドから抜粋したものです。
debugfs: stats
Group 0: block bitmap at 64, inode bitmap at 80, inode table at 96
28663 free blocks, 5777 free inodes, 3 used directories, 5777 unused inodes
[Checksum 0xe713]
Group 1: block bitmap at 65, inode bitmap at 81, inode table at 596
0 free blocks, 8000 free inodes, 0 used directories, 8000 unused inodes
[Inode not init, Checksum 0x9416]
Group 2: block bitmap at 66, inode bitmap at 82, inode table at 1096
0 free blocks, 8000 free inodes, 0 used directories, 8000 unused inodes
…
debugfs: extents bigfile
Level Entries Logical Physical Length Flags
0/ 1 1/ 1 0 - 62499 120569 62500
1/ 1 1/ 6 0 - 12287 133120 - 145407 12288
1/ 1 2/ 6 12288 - 12499 131524 - 131735 212
1/ 1 3/ 6 12500 - 24575 145408 - 157483 12076
1/ 1 4/ 6 24576 - 24999 131736 - 132159 424
1/ 1 5/ 6 25000 - 30719 157484 - 163203 5720
1/ 1 6/ 6 30720 - 62499 165888 - 197667 31780
これにより、必要な情報をまとめることができますが、ext4ディスクレイアウトロードマップ役に立ちます。
その必要はありませんが、なぜこのようにファイルシステムを見逃したいのか不思議ではありませんが、たぶん本当に知りたくないかもしれません。
コメントに返信を追加するには:
ブロックグループの重要な設計動機は、測定したい検索ペナルティを最小限に抑えることです。つまり、ファイルシステムは空きリスト、inodeテーブル、およびデータブロックメタデータをドライブのブロックグループに配布するため、ヘッドが1つの場合と同様に、ヘッドがエッジからエッジに移動する必要はありません。 FAT ファイルシステムと同じブロックグループです。 NTFSが以前のFATスタイルであるのか、それともBSD-FFSやそれ以降のバージョンなど、よりインテリジェントなのかはわかりません。
必要な比較を実行するより安定した方法は、ドライブパーティションを使用することです。たとえば、ドライブを外部、中間、内部パーティションに分割した場合は、外部パーティションから内部パーティションにコピーして強制的に検索できます。これを強制するためにブロックグループを使用しようとすると、ファイルシステムはドライブアクセスをローカルに維持するように設計されているため、ユーザーの努力に「抵抗」します。
複数のパーティションがある場合でも、システム全体のブロックキャッシュがデバイスドライバと連携して、次のトリックを使用して遠い場所への書き込みを遅らせることを期待できます。エレベーターアルゴリズム。簡単に言えば、システム全体で測定したい正確な現象を最小限に抑えるように設計された多数の最適化を中止しようとしています。また、ドライブコントローラの電子機器がナビゲーション低減ゲームに関連しており、そのほとんどは完全に隠されていることがわかります。
生のデバイスを開き、正しいioctlを使用してドライブが実行したい最適化されていない書き込み操作を実行するように強制することができますが、これらの実験は実際のパフォーマンスとはほとんど関係がなく、ほとんど役に立ちません。この問題が発生した場合は、ハードウェア仕様で製造元の最大ヘッドナビゲーション時間を読み、テストを忘れてしまう可能性があります。あるいは、単にDOSを実行することもできます。
コメントに対する2回目の回答:
fseekテストでは、ブロックキャッシュがユーザーが要求したものよりも多く読み出され、次のビットがすぐに要求されると予想されるため、ヘッドナビゲーション効果が表示されない可能性があります。
もう一度強調すると、システムのすべての部分は、あなたに検索処罰を加えようとするあなたの努力に対応するように設計されています。こうなると、あなたの関心が理論なのか実務なのか聞きたいです。理論的なら、すでに答えを持っていると思います。これが可能な場合は、定義上、実際の負荷を代表しないテストを設計する必要があります。
あなたは実際にどの質問に対する答えを探していますか?新しい質問をしてください。時間が長すぎます。