ext4スーパーブロックの復元

ext4スーパーブロックの復元

私のLVにext4ファイルシステムがあり、誤ってパーティションを縮小しましたが、パーティションが小さすぎて破損しました。パーティションを元のサイズに再拡張した後、LVに新しいext4 FSを配置しました。現状ではudevデバイスファイルも提供されていないからです。

以前のスーパーブロックを復元する必要があります。まだどこかに良いバックアップがあることを願っています。

どうやって見つけることができますか?できますか?

testdisk群れを見つけたようですが、そのうち何も動作しません。

答え1

運が良く、パーティションにバックアップスーパーブロックがあるかもしれません。ファイルシステムの作成に使用したオプションを覚えている場合(たとえば、デフォルトを使用した場合)、次のようにバックアップの場所を見つけることができます。

sudo /sbin/mkfs.ext4 -n <original_options> <device>

これは-n非常に重要です。これは「模擬実行」オプションであり、ディスクには何も書き込まれません(実験中にディスクを安全な場所に捨てることはまだ良い考えかもしれません。私はあなたがこれを行ったと仮定します)。

元のオプションが覚えていなくても、上記のオプションは最終候補リストを取得しようとする価値があります。

次に、各候補スーパーブロックに代替-o ro,sb=<n>スーパーブロック(および読み取り専用)を使用するようにマウントしてみましょう。成功すると、一部のファイルを回復できます。

候補スーパーブロックのいずれも正常なインストールを許可しない場合、最後の努力は次のオプションを-S使用して新しいスーパーブロックを作成することですmkfs.ext4スーパーブロックとグループ記述子のみが作成されます。これは、すべてのスーパーブロックとバックアップスーパーブロックが破損して最後の手段回復方法が必要な場合に役立ちます。「私はできます。いいえ完全パーティションバックアップなしでこれを行います。

答え2

まず、データの回復中にディスクへの書き込みが行われないように、ディスクが読み取り専用であることを確認してください。

ext4スーパーブロックは、inode数、ブロック数などによって内容が大きく異なるため、見つけるのが難しいです。ただし、検索できるマジック署名0xEF53(16ビット)があります。正しい位置が見つかった場合、スーパーブロックの先頭(したがって総inode数)は、56バイト(16進数で0x38バイト)の前に配置する必要があります。

0xEF53の多くのインスタンスを見つけることができますが、スーパーブロックで他の可能な値をチェックしてそれを識別できます。

以下はext4スーパーブロック値テーブルです。https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#The_Super_Block

ディスク全体のイメージに対して16進エディタを使用すると、結果が表示されることがあります。

ext4スーパーブロックに似たデータを取得するためにプログラムを作成するか、誰かに費用を支払うことでこれを行うこともアイデアかもしれません。 (たとえば、オペレーティングシステムが「Linux」なので、オフセット72(0x48)の32ビット数は0でなければなりません。)

頑張ってください。

関連情報