TestDiskでデータ復元をした話（わかりやすいやり方解説付き）

# はじめに
この記事は[WSL上からCドライブの中身を飛ばしかけた話][例の記事]の続編となる記事です。
とはいえ、前の記事を読まずともこの記事の内容自体は独立しているのでご心配なく。

----

皆様は意図せず大事なデータを消し飛ばした、という経験はあるでしょうか。
Windowsには"ごみ箱"というありがた～い機能がありますが、それすら通り越して完全に削除してしまったデータ。
この記事を読んでいるという事は、そういったデータを、少しでもいいから、なんとしてでも復元したいと思っている事でしょう。

そんなあなたに朗報、データを**無料で**復元できる方法、**あります**。
（※完全復元はできません、完全復元を求めている方は大人しく有料ツールでも使いましょう。）

# この記事の主な対象者
- 誤って大事なデータを吹き飛ばしてしまった方
- 無料でデータ復元をしたい方
- 興味本位でWSL上にて破壊コマンドを打ってしまった方

## 事故紹介
今回も自分の解釈と偏見に基づいた記事を書きます。

#### 状況解説
[こちらの記事][例の記事]にある通り、興味本位で破壊コマンドを打ってしまった筆者。
少しでもいいから無料でデータを復元したいと思い、探し出したのがTestDiskでした。
本記事では、私が昔行ったTestDiskでのデータ復元方法をご紹介します。

# 本題
無料ツールである[TestDisk][TestDisk]を使用した記事になります。その他の復元ツールは知ったこっちゃありませんので他の記事を当たってください。

以下のページからダウンロードできます。

https://www.cgsecurity.org/wiki/TestDisk_Download

軽くこのツールの解説をしますと、主に失われたパーティションを復元したり、起動しないディスクを起動可能にするための、データリカバリーツールとのことです。(公式wikiより)

今回は、このTestDiskにおまけ程度について来る、データ復元を使います。

### そもそもデータ削除(論理削除)とは
ごみ箱の中に入っているデータは、見ての通り削除されているわけではありません。あくまで、削除候補というだけです。
さて、「ごみ箱を空にする」ボタンを押した時、その瞬間にデータがHDDやSSD上から吹き飛ぶのでしょうか。

答えは**NO**です。

一般に、ごみ箱を空にした瞬間、そのデータには削除フラグが立ちます。削除フラグが立っているデータは、ユーザーから見えませんが、データとしてはまだ残っているわけです。

:::note warn
ただ、元のデータそのまま残っているかと言われればそうでもなく、特に大きなサイズのデータは断片化されていたりと、かなりごちゃごちゃな状態で保管されているようです。完全なデータ復元ができないというのはこれが理由。
:::

そして、容量がパンパンになった時、削除フラグが立っているデータの部分を使って新しいデータに書き換えます。
これが表面上では、削除して空いた領域に新たにデータが入ったように見えるわけですね。

ストレージは書き換えるたびに寿命が減っていきますので、このように論理削除にて疑似的な削除を行っている、ということらしいです。

そのため、ディスクの中のデータを直接覗き込み、削除フラグをポイっと外してしまえば、元通り(とまではいきませんが)使えるようになるというわけです。
もちろん、既に書き換えられた後は無理ですが。

----

### 復元しよう
理論だけ語ってもなんですし、実際に復元してみたいと思います。
なお、昔見つけたこちらの記事を参考にしています。

https://pctrouble.net/software/testdisk.html


#### １．起動
TestDisk、起動すると以下のような画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727917/179f8805-65bc-a780-f0da-dec83532cc2a.png)
logファイルはその名の通り操作履歴を示すファイルで、Createであれば新規ログを作成、Appendであれば元あるログに追記を行う形となります。
今回は、新規でやっていきますのでCreateを選択します。
TUIですので、基本はキーボードのみ、[Enter]キーと矢印キーで操作していきます。

#### ２．ディスク選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727917/b99c584a-eb67-5444-04ad-5d95c4da1253.png)
お次は操作したいディスクを聞かれますので、正しいものを選択します。
今回はSDカード内のデータを復元していきます。

#### ３．パーティションテーブル種別選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727917/c9b3a1a3-e93f-f20b-b1e6-d0e1ec521c2f.png)
こちらではパーティションテーブルの種別を選択します。
Windows8以降の一般的なストレージであれば、EFI GPTになるようです。
基本的には、デフォルトで選択されていたものを利用すれば問題ありません。

#### ４．操作選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727917/5460d0e8-1020-6c40-c409-3c9e3263f72b.png)
こちらの画面では、当該ディスクに対する操作を選択できます。
パーティションの復旧など、TestDiskの主用途であれば一番上のAnalyseを選択しますが、今回の目的は削除されたデータの復元ですので、その下のAdvancedを選択します。

#### ５．パーティション選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727917/91e92e25-3e24-44a9-bbeb-98821b92d19f.png)
こちらの画面ではパーティションの選択を行います。
今回はSDカードですので単一パーティションですが、Cドライブなどはシステムパーティションを含むため、以下の画像のように複数あるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727917/f2736ce4-020e-70d8-9399-411bbbb4c3af.png)
こちらのリスト、左から「パーティション名」、「開始位置」、「終了位置」、「サイズ」、「パーティションの種類」の順になっています。
一番サイズが大きいBasic data partitionである、3番目のMS Dataがメインのデータパーティションであると分かります。

:::note info
正しくないパーティションだと下部に[Undelete]メニューが出てこないので、すぐわかるかと思います。
:::

上下キーで正しいパーティションを選択したら、今度は左右キーでUndeleteメニューを選択して中に入ります。

#### ６．データ一覧画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727917/5765d22b-4a0f-f692-9d2b-baa96e211a65.png)
こちらが削除されたデータを含む、データ情報の一覧となります。
各行の一番左にdとついているものはディレクトリ(フォルダ)で、-となっているものがファイルになります。
そして白文字のものが現存するデータ、赤文字のものが削除フラグが立っているデータです。
ディレクトリの中に入る場合は[→]キー、前のディレクトリに戻る場合は[←]キーで出ることができます。

さて、ここからは根気勝負です。
消し飛ばしたデータを、この大量のデータ群の中から探し出していきます。
列は左から「ファイル情報」、「不明」、「不明」、「サイズ」、「作成日時」、「ファイル名」となっているので、これを手掛かりにファイルを当たっていきます。過去の削除履歴が全部残ってるので割と厄介です。
基本的には上下キーでファイルを探していくことになりますが、PageUpキーやPageDownキーを使えば、高速スクロールも可能です。(Cドライブ程のデータ量だとほとんど意味を為さないですが。)

#### ７．データ選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727917/d38e70b7-f552-4ea8-c327-381f4ec7be97.png)
目的のデータを見つけたら、[:]キーを押して選択します。
選択されたデータ(ディレクトリ・ファイル)は緑文字に変化します。

:::note warn
階層を移動するとリセットされますので、復元作業はディレクトリ毎に行ってください。
また、ディレクトリを丸ごと選択すると正しく復元できない可能性が高いので、それぞれディレクトリの中に入ってからファイル毎に選択する事を推奨します。
:::


#### ８．データコピー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727917/f9c7d1b9-6272-813b-da61-cf746f3a1745.png)
全てのデータを選択し終えたら、[Shift]+[C]を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727917/071f3c5a-375a-fa92-6f14-8ef9871126a7.png)
すると、上図のようにコピー先を問われるので、コピー先のディレクトリまで持って行きます。
こちらもデータ一覧画面同様、[←]キーで一つ上の階層に出ることが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727917/80d58c2c-610c-51f8-d8d8-77c6c99f1073.png)
今回はDドライブ直下へコピーすることにします。

コピー先のディレクトリを表示した状態で、もう一度[Shift]+[C]を押せば、コピー完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727917/485042ff-9552-7dcf-62eb-a1e178081409.png)
データコピーの内訳は、ファイル一覧の上部に緑文字ないし赤文字で表示されます。
今回は4ファイル全て復元に成功したようです。

#### ９．データ確認
全ての作業が終われば、[Q]キーを押してデータ選択画面から抜け、[Quit]メニュー＞[Quit]＞[Quit]でTestDiskが終了します。
さて、データを確認してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727917/9783db2f-da79-4b05-3aaf-81bec63ce547.png)
今回復元したファイルですが、2ファイルは無事復元できたものの、残り2ファイルは復元できなかったようです。
このような形で、気まぐれに復元できるファイルと復元できないファイルがあるみたいです。

# まとめ
ここまで一通り細かいやり方を解説してきましたが、実際に昔数GB単位で復元した時は、体感４割ぐらいのデータを復元出来た記憶があります。

- ファイル削除は基本的に論理削除で、削除してしまった直後ならまだ舞える
- 無料ツールTestDiskのUndeleteメニューで、一部ファイルは復元できる
- ごみ箱って実はありがたい機能
- **そもそも誤ってファイルを削除しないのが一番、削除前にちゃんと確認しよう**
- **くれぐれもWSL上でLinux破壊コマンドなどを打ったりしないように。好奇心は猫を殺す(定期)**

あくまで、これは自分なりのやり方ですので、もしもっと良い方法を知ってる方は、是非記事を書いていただけると幸いです。コメント欄に書き込んでいただければ、喜んで紹介・再現実験させていただきます。

ということで、皆様も良いTestDiskライフを！


[例の記事]: https://qiita.com/Seyanaga/items/d9f8ab78668f7e53d0dc
[TestDisk]: https://www.cgsecurity.org/wiki/TestDisk