ブロックデバイスでどのファイルが特定のブロックを占めているかを知りたいです。
この手順では、少なくともLVMでext4暗号化をサポートする必要がありますが、他のストレージシステムでこれを実行する方法も説明してください。
だから私は次のようなものを探しています:
# whichfile /dev/sda 123456789
/var/log/syslog
可能:
# whichfile -v /dev/sda 123456789
Debug: Block 123456789 is in partition /dev/sda6
Debug: /dev/sda6 is part of LVM /dev/kubuntu-vg/root
Debug: /dev/kubuntu-vg/root is LUKS encrypted
Debug: Decrypted device is: /dev/mapper/kubuntu--vg-root
Debug: Block 123456789 on /dev/sda is block 98765432 on /dev/mapper/kubuntu--vg-root
Debug: File system is: ext4
Debug: Block 98765432 contains inode 2345678
Debug: Inode 2345678 is var/log/syslog
Debug: Mount point is: /
/var/log/syslog
編集する:
@Mark Plotnickは、暗号化されていないブロックデバイスからinodeまで部分的なソリューションを提供します。これは正しい方向に進むステップです。
別の部分的な解決策:inode - >ファイル名(ext4):
sudo debugfs -R 'ncheck 23456789' /dev/unencrypted_ext4_fs
より一般的です(遅いですが、おそらくすべてのinodeベースのファイルシステムにのみ適用可能です):
sudo find /mountpoint-for-device -xdev -inum 23456789
答え1
通常、ファイルシステムの各データブロックに関連付けられたメタデータがないため、必要なものを取得するには、通常、特定のブロックを含むパーティションを使用してファイルシステム全体をナビゲートし、各ファイルブロックを分析する必要があります。良いファイルブロックを見つけてください。
また、ブロック、論理ブロック、物理ブロック、セクタ...(512b、1k、4k)の意味を定義し、次の特殊なケースを処理する必要があります。
- ブロックには、複数のファイル(ufsなどのフラグメントを使用するファイルシステム)の一部が含まれています。
- ブロックにはログが含まれているため、1つ以上のファイルの一部を含めることができます。
- ブロックは複数のファイルによって共有されます(重複排除ファイルシステム)。
- ブロックは、さまざまなファイルシステム(スナップショット/複製ファイルシステム)に属するさまざまなバージョンのファイルで共有されます。
- ...
それにもかかわらず、さまざまなファイルシステムの実装にアルゴリズムを使用し、内部構造を分析するのに時間を費やす必要があります。