LoginSignup
3
4

More than 3 years have passed since last update.

削除したデータを復旧する(絶対に)

Last updated at Posted at 2019-12-19

0. 概要

年末の忙しい時期にハードディスクのデータが全て消えるという体験はしたことがありますか?
先輩として忠告しておくと凄い悲しい気持ちになります。

そこで、頭記にもある意気込みでデータ復旧をしていったので、備忘録として残しておきます。

1. 前提条件

まず置かれている状況。

1.1. 状況

初めに、rm -rf *を実行します。
目的とするソースコードやファイルが全て消えたことを確認してからがスタートラインです。

この状況から概ね以下の方法をとるでしょう。
- 急いでやってしまったマシンをシャットダウンする
- 他のPCでLinuxのライブUSBを作成
- LinuxのライブUSBでやってしまったマシンを起動する
- ライブOSからやってしまったマシンのディスクをfdisk -lで見て確認
- 後は、TestDiskext4magicforemostextundeleteを駆使してファイルを復旧

普通なら、ここまですれば凡そのファイルは復旧されます。
しかしながら、この場合でも頑なに復旧を拒まれる場合があります。

1.2. 条件

ここで現状の条件をまとめておくと、

  • TestDiskext4magicforemostextundeleteでファイルを復旧できない
  • ディスク自体は物理的に破損していない
  • ハードウェアRaid 1+0
  • ext4のファイルシステム
  • 問題発生後すぐにシャットダウンしたのでinodeが切れているだけで論理的にはファイルが残っていそう
  • データ復旧業者に断られる

最後は、データ復旧業者にお願いしたところTestDiskext4magicforemostextundeleteで復旧出来ない場合は、相当やってしまっているので無理ですと言われ、
どうしてもお願いしますと価格交渉したところ、最低でも100万円からですと言われました。

2. データを復旧する

まず物理的に逝ったわけではなく、インデックスが外れてしまっただけで目的とするファイルはディスク中の情報の海にいると仮定します。
そこでまずは、RAIDがややこしいのダンプして1つのファイルにします。その次にファイルを復旧させていきたいと思います。

dump

以下でダンプをする。

# 対象のディスクを確認する
$ sudo fdisk -l
> sda1
# ダンプする
$ dd if=/dev/sda1 of=./dump.img bs=512M

これで1つのファイルになった。

今回、復旧させたいのは主にソースコード。
そして、そのソースコードは多分、このダンプファイルのどこかにいる。

recover

ダンプファイルが1テラくらいあり、どこに何のデータがあるかなんてまるで見当もつかない。
そこで、ソースコードの1部を想像して、あるテキストのバイナリコードがあるところを引っ張ってくるようにする。
そう、Grepを使う。

grep -i -a -B[size before] -A[size after] 'SEARCH_TEXT' DEVICE > OUTPUT_PATH

-iはケースセンシティブにしない(大文字小文字を区別しない)
-aはバイナリサーチ

例えば、pythonであれば#!/usr/bin/pythonなんて書かれていたりする。
その場合は、こんな感じで使う。

grep -i -a -B10 -A1000 '#!/usr/bin/python' /dev/sda1 > ./backup.txt

これで地道にソースコードを追っていった結果、部分的に復旧することが出来た。
なお、画像なら画像のヘッダーを同様に検索にかければよい。

因みに\r->^Mで検索を掛ければ大体のテキストを持ってこれる。

部分的にデータは引っ掛かるものの、この部分データから1つのファイルに成型していくのが、地獄の作業。

一先ず、この方法でかけらでも復旧できないようなら諦めた方が良さそう。
データは消さないに限る。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4