web-dev-qa-db-ja.com

HDの最初からやり直した後のext4パーティションの回復

誤ってddを使用して、外部ディスクの最初の208 MBに書き込みました。私が書いたのは、それ自体のパーティション(Debian nestinstaller)なので、現在表示されているのは、古い(現在破損している)ext4パーティションではなく、別の小さなパーティションです。これは私が従うことができるツールとアドバイスを制限します。

私の計画は、testdiskを使用してパーティションテーブルを再作成し、次に説明されているようにバックアップスーパーブロックですべてを修正することでした here 。最初の208 MBは失われますが、そこにある他の300 GBのデータと比較すると大丈夫です。次のようなもの:

mke2fs -n /dev/sdb1   # doesn't work because sdb1 is the 208MB new partition
testdisk ...          # used this to create new correct partition table
mke2fs -n /dev/sdb1   # now works fine, get backup superblock positions
e2fsck -b backup_position -y /dev/sdb1 # returns many errors hence the -y

しかし、何も回復できませんでした。私はtestdiskを使用して、以前のものと一致する新しいパーティションテーブルを作成しました。次にe2fsckを実行すると、さまざまなエラーが発生します。その後ファイルシステムを取得しましたが、完全に空で、ファイルはありません。

Lost + foundディレクトリにはファイルがいっぱいですが(回復したと思います)、ファイルだけでなく、ディレクトリツリーも回復する必要があります。ファイルが何であるかを知るために、ファイル名と以前のディレクトリが必要です(顕微鏡画像、質量分析データなど。名前とディレクトリがなければ、それらは何も意味しません)。

まったく同じHDをもう1つ取得し、ddを使用してHD全体のコピーを作成したので、何も失うことなくリカバリを実験できます。何かアドバイス?

8
carandraug

ようやくこれを修正しました。記録のために、ここに私がやった方法があります。私が見つけた解決策の一部 here そしてそれはファイルシステムの作成に使用された設定を知ることを含みます(私はデフォルトを変更しなかったと確信しています)。

基本的に私は最初に実際にあったものを反映するようにパーティションテーブルを修正する必要がありました(これにはtestdiskを使用しましたが、partedcfdiskまたはfdiskが機能するはずです結構です)。間違ったパーティションを削除して、ディスク全体を正しいCHS値でカバーする単一のext4タイプのパーティションに置き換えました。

残りは主に最初のリンクからです(詳細についてはそれを読んでください)が、基本的にはmke2fs -n /dev/xxxを実行してスーパーブロックのバックアップの位置を見つけました。次に、ディスクの末尾に最も近い最後のバックアップ(ディスクの先頭にあるバックアップのみがddで上書きされていた)を使用してfsckを実行しました。これは多くのエラーを生成しましたが、fsckには-yオプションがあります(-aとは異なります)。

$ Sudo e2fsck -a -b backup_block_number /dev/xxx

ファイルが表示されなかったため、これはうまくいかなかったと思いましたが、実際にはすべてlost+foundディレクトリに保存されていました。

したがって、最終的にはファイル名とディレクトリ構造を維持しながら、ほとんどのファイルをサルベージしました。これが将来的に他の人を助けることを願っています。

7
carandraug