web-dev-qa-db-ja.com

部分的な画像とそれらのセクターのリストを持つ大規模な断片化されたファイルを再構築する

失敗した3TB HDDからできるだけ多くのデータを回復しようとすると、次のようになりました。

  • 私は2つの小さな損傷領域と約100の不良セクタを識別したHDセンチネルで表面スキャンをしました(カウントが16であった前に)。
  • それから 私はどのファイルが悪いセクターの影響を受けたかを特定しましたさまざまなメソッド
  • これらのファイル(6つの大きなビデオファイル)を特別なフォルダに移動し、重要な順序を減らすことで、残りのファイルとフォルダをコピーしました。すべてのUnimportant .emlファイルを除いて、すべてが正常にコピーされ、これはすでに識別された不良セクタの近くに位置していました。
  • それから私は残りのファイル(オンラインではなく、バックアップがないテレビ放送)を最大限に活用するための最も安全な方法でDdrescueを使用することです - しかし、私が持っていた空のHDDだけが500GBでしたから、私はすべてをイメージすることができませんでした。これらのファイルの中には、これらのファイルのいくつかが大量に断片化されています(それぞれ6000から12000の断片がそれぞれ、同時にダウンロードされました。私は彼らが占領されたセクターを抽出することによってそれらを回復することができませんでしたが、通常はMFTとすべてのシステムファイルをすべて含む最初の10GBとそれらのファイルが見つかった4つの領域をイメージングすることによって、 WinHexまたはR-Studioを使用して、画像から簡単に抽出します。

しかし残念なことに、私は全体のMFTを手に入れませんでした:それのいくつかは(私が後者にしたパーティションの完全なnfi.exeリストを調べると判断したので)200gbのマークの周りにあり、そして3番目のチャンクがありますパーティションの最後、3TBマークに近い。私は復旧試行中にHDDの状態が急速に悪化するとは思わなかった(今は12000人以上の再割り当てセクターと9000ペンス中のセクターと数時間後に、数時間後に、...)、私は予防措置を講じませんでした。私ができるときにWinhexからMFTを保存する。今、Ddrescueを使って痛いほど遅くなってきました、私はおそらくMFT全体を得ないでしょう。また、WinHexでその部分的なイメージを開くと、物理デバイスを調べたときに作成された同じボリュームスナップショットを使用します。これをクリックすると、正しいサイズと日付が表示されます。セクターですが、まだそれらを抽出することはできません(0バイトのファイルのみが抽出されます)、明らかに、ボリュームスナップショットに割り当てられたセクターに関するすべての必要なデータが含まれていないため、WinHexはその時点でMFTに頼っているようです。どちらも作業してください。

しかし、私はそれらの6つのファイルを含むデータの塊の良い部分を回復しました、そして、私は彼らが占有しているセクター/クラスターの詳細なリスト(3つの異なるツールで入手しました:nfi.exe、recuva、HD Sentinel)を持っています。さて、自動スクリプトを使用して、その情報でそれらのファイルを再構築する方法を教えてください。 (手動でこれを行うのは不可能な作業です。)

DDRESCUEを使用すると、-i(入力位置)-o(出力位置)と-S(入力サイズ)スイッチを使用できますが、プロセスを自動化し、何千ものコマンドを一度に実行できますか。

Windowsでは、コマンドラインツールを知っています dsfo これは、このようなコマンドを使用して任意のソースから宛先ファイルにデータを抽出できます。

dsfo [source] [offset] [size] [destination]
 _

DSFOコマンドのリストを作成するには、CalcとTEDNotepadの組み合わせでセクター/クラスタのリストを編集できますが、何千ものチャンクを作成できます。一歩でこれを行うためのより良い方法はありますか?



編集 :

だから私はこのようなものに提示されているHD Sentinelによって生成された、これらのファイルの1つのクラスタ/セクターのリストを取りました。

R:\fichiers corrompus\2017_07_2223_58 - Arte - Pink Floyd - The Dark Side of the Moon Live.mp4
Total Size: 883 787 365 bytes   Position: 0     Attributes: Arc
Number of file fragments: 6040
VCN: 0  LCN: 516530293  Length: 4288    sectors: 4132506536 - 4132540839
VCN: 4288   LCN: 516534613  Length: 16  sectors: 4132541096 - 4132541223
VCN: 4304   LCN: 516534645  Length: 64  sectors: 4132541352 - 4132541863
VCN: 4368   LCN: 516534725  Length: 16  sectors: 4132541992 - 4132542119
VCN: 4384   LCN: 516534757  Length: 48  sectors: 4132542248 - 4132542631
VCN: 4432   LCN: 516534853  Length: 32  sectors: 4132543016 - 4132543271
VCN: 4464   LCN: 516534901  Length: 16  sectors: 4132543400 - 4132543527
VCN: 4480   LCN: 516534933  Length: 48  sectors: 4132543656 - 4132544039
VCN: 4528   LCN: 516535013  Length: 16  sectors: 4132544296 - 4132544423
...
VCN: 215760 LCN: 568126709  Length: 9   sectors: 4545277864 - 4545277935
 _

最初のフィールドはおそらく「仮想クラスタ番号」(統合ヘルプの詳細な説明が見つかりませんでしたが、とにかく、統合ヘルプの詳細な説明はありません)、この値は明らかにファイルの開始に対するクラスタ番号を表します。 2番目の値は「論理クラスタ番号」でなければならず、パーティションの開始に対するクラスタ番号です(下記を参照してください。最初に、この値はデバイス全体に対するものであったと考えています)。第3の値は各断片の長さを表し、クラスタ内で測定された。それらの3つの値は私の意図と目的に十分です。

TEDメモ帳にインポートし、「ツール」>「行」>「列、数字」機能、選択列2,3,1を区切り文字として使用しました。

LCN: 516530293  Length: 4288    VCN: 0
LCN: 516534613  Length: 16  VCN: 4288
LCN: 516534645  Length: 64  VCN: 4304
LCN: 516534725  Length: 16  VCN: 4368
LCN: 516534757  Length: 48  VCN: 4384
LCN: 516534853  Length: 32  VCN: 4432
LCN: 516534901  Length: 16  VCN: 4464
LCN: 516534933  Length: 48  VCN: 4480
LCN: 516535013  Length: 16  VCN: 4528
...
LCN: 568126709  Length: 9   VCN: 215760 
 _

次に、タブとスペースを区切り文字として計算し、クラスタ番号(= LCN * 8 * 512)から入力オフセットを計算するための列を追加しました(= LCN * 8 * 512)、クラスタ内の長さ(= LENGTH *)からの長さの長さをバイト単位で計算します。 8 * 512)そして最後にVCN値(= VCN * 8 * 512)から出力オフセットを取得する(= vcn * 8 * 512)、他のすべての行に式を貼り付け、追加の列を削除した、「LCN:」Ddrescue/Media/sdb1/st3000dm001-2.dd/media/sdb1/201707222358.mp4 -i "" "-s"で "-s"を置き換え、 "vcn:"を "-o"で置き換えました...
[。ね。今これを持っています(各ファイルに6000~12000行がある以外)。

ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115708080128 -s 17563648 -o 0
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115725774848 -s 65536 -o 17563648
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115725905920 -s 262144 -o 17629184
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115726233600 -s 65536 -o 17891328
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115726364672 -s 196608 -o 17956864
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115726757888 -s 131072 -o 18153472
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115726954496 -s 65536 -o 18284544
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115727085568 -s 196608 -o 18350080
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2115727413248 -s 65536 -o 18546688
...
ddrescue /media/sdb1/ST3000DM001-2.dd /media/sdb1/201707222358.mp4 -i 2327047000064 -s 36864 -o 883752960
 _

だから、Knoppix Live Systemでこの巨大なシリーズのコマンドを実行する最も簡単な方法は何ですか? Linuxには、Windowsのコマンドプロンプトのバッチスクリプトと同等のものがありますか?

(私はP2Pネットワーク上でその特定のファイルを見つけることができましたので、このメソッドが完璧であるかどうかをテストすることを可能にし、それがそうであればダメージのレベルを評価することを可能にします。他の5人のためのそのような運はしません。断片化されているので、データが1つのチャンクとして抽出できました。

1
GabrielB

だから私はそれらのDdrescueスクリプトを実行しました(最初にそれらを "chmod + x"コマンドで実行可能ファイルを作成してから./name_of_the_script):

- 最初にコマンドが機能しませんでしたが、Ddrescueはエラーのみを与えました。パラメータは、入力ファイルと出力ファイルの名前の前に配置されるようにスクリプトを再度編集しなければなりませんでした。その後、コマンドは次のように見えました。

ddrescue -P -i 2115843346432 -s 17563648 -o 0  ST3000DM001-2.dd 201707222358.mp4
ddrescue -P -i 2115861041152 -s 65536 -o 17563648  ST3000DM001-2.dd 201707222358.mp4
ddrescue -P -i 2115861172224 -s 262144 -o 17629184  ST3000DM001-2.dd 201707222358.mp4
ddrescue -P -i 2115861499904 -s 65536 -o 17891328  ST3000DM001-2.dd 201707222358.mp4
ddrescue -P -i 2115861630976 -s 196608 -o 17956864  ST3000DM001-2.dd 201707222358.mp4
ddrescue -P -i 2115862024192 -s 131072 -o 18153472  ST3000DM001-2.dd 201707222358.mp4
...
ddrescue -P -i 2327182266368 -s 36864 -o 883752960  ST3000DM001-2.dd 201707222358.mp4

(Total size of that file : 883787365, or 883789824 with the slack space.)
(“-P” stands for “preview”, “-i” for “input position”, “-s” for “size”, “-o” for “output position”.)
(The paths could be omitted as the scripts, the image file and the expected output files were all in the same directory.)
 _

- 最初に最初の試行は正しいMP4ヘッダーなしで読めないファイルを作成しました。どうして ?ハードディスクSentinelによって提供されるリストは、物理/絶対セクタ番号を与えるが論理の論理( - === - )クラスタ番号(WinHexでイメージファイルを開くことによって確認)そのため、入力オフセット計算(パーティションオフセットは264192セクタ、または129MB)に264192 x 512を追加しなければなりませんでした。

- それからそれはうまくいった。それはたった数分かかり、最後に読みやすい5つのビデオファイルを作成しました、それは彼らの予想される内容を持ちます - 私はそれらを完全に見ていませんでしたが、それでも完璧なようです。

enter image description here

(私はこれをMemory CardからLiveで実行しているセカンダリコンピュータにすべてを作成し、TeamViewerをWindows 7上のマイプライマリコンピュータからコマンドさせ、またスクリプトファイルを簡単に転送できるようにしました。そのような目的で、まあ、それはうまくいきます!:^ P)

- もちろん、その部分的な画像には読めないセクターがあるため、破損した部品があります。どうやって、すぐにそして確実にどこにあるのかを知ることができますか?上手...
[。]私はDdrescueの "Generate"モードを使用するというアイデアを持っていました。これは、出力を解析し、完全に空のセクターが未読のセクターであることを考えると、「?」とマークされた、 「+」とマークされている。 DDRESCUEは入力ファイルと出力ファイルを期待しているので、出力ファイルのみが実際にそのモードで解析されているため、このコマンドでダミー入力ファイルを作成しました。これは1MBしかコピーしませんが、サイズを出力ファイルのサイズに拡張します(時間とスペースを節約する):

ddrescue -s 1048576 -x 883789824 201707222358.mp4 201707222358copy.mp4
 _

それから私は "generate"コマンドを実行しました:

ddrescue -G 201707222358copy.mp4 201707222358.mp4 201707222358-generate.log
 _

それから私はDdrescueViewでそれらのファイルを開きました:

enter image description hereenter image description here

(6つのファイルのうち3つのファイルは上記の最初のもののように真剣に損傷しています。単一のDDRESCUEコマンドで)

それから私は片手で片手で自分自身を守っていましたが、私はバックアップなしで数ヶ月間毎日3tb HDDを毎日使っていましたが...(最初は一時的なものだけを保存することになっていました私は他のHDDに部屋を作っているでしょうが、予想以上に時間がかかりました。ディックジョーンズが言ったように、グリッチ」。)

2
GabrielB