73125


[管理者用初期化URLを踏んでWebサービスのデータをふっとばした話 -
Qiita](https://qiita.com/HirotoKagotani/items/181052eb85b686783806)

上記の記事を読んでいました。そこでは、 `rm` してしまったファイルたちを、いろいろやって復旧させた作業の内容が記されています。

ここでふと疑問に思ったのが、どうして ext4 だと `rm` してしまったファイルたちは、復旧可能なのでしょうか?

また、記事中で復旧できなくなるのを防ぐために、ひとまずいろいろなプロセスを止めてディスクI/Oを防いでバックアップを取った、みたいな記述があったのですが、ここで逆に、どのタイミングになるとこれらファイルたちは復旧不可能になってしまうのでしょうか?


CC BY-SA 4.0
2021-01-06T14:22:35.747
73123
2021-01-08T06:12:23.973
2021-01-06T16:46:24.923
3060
754
question
linux filesystems
ext4 で `rm` してしまったファイルやディレクトリが、復旧できるのは何故でしょうか?


「`ext4` だから復旧できた」ではなく、「`extundelete` を使って復旧した」方に注目してみましょう。

参照しているページから参考リンクを順に辿っていくと、例えば以下のページで解説があり、extundelete では **"
パーティションのジャーナルを元に復旧を試みている"** 事がわかります。

[extundeleteによる削除済みファイルの復元方法](http://exlight.net/linux/extundelete/index.html)

> ### より深い理解のために（上級者向け）
>
> (前略)  
>
> しかし，ext4/ext3では，inode上のファイル本体を格納していたブロックのアドレスやファイルサイズの情報がすべてクリアされてしまうのです．したがって，未割りあてになっているinodeを強引に読んで目的のファイルを復元してしまうという方法がとれません．
>
>
> そのため，ext4/ext3では，(1)ファイルの特性を使って復元するか［例えばJPEGファイルは仕様上0xFFD8ではじまって0xFFD9で終わることがわかってるため，この情報を頼りに復元することができます］，(2)ジャーナルのログエントリを利用して復元するかの2通りしかなく，かつ，いずれもext2の場合より復元できる確率も低く，精度も悪くなります．

なお、[extundelete](http://extundelete.sourceforge.net/)
の配布ページにも同じような内容が記載されています。

> extundelete uses information stored in the partition's journal to attempt to
> recover a file that has been deleted from the partition.
>
> (訳)  
>  extundelete では、パーティションのジャーナルに格納されている情報を使用して、パーティションから削除されたファイルの回復を試みます。

extundelete でも復旧が難しくなるタイミングは、元のファイルで使用していた inode
が追跡できなかった、もしくは別のファイルで上書きされてしまったタイミング、ではないでしょうか。

[Ubuntu で $ rm ~/.bashrc を実行してしまった](https://blog.fenrir-
inc.com/jp/2017/10/resurrected_rm_files.html)

> ただし、 inode が重複したりして追跡が出来なかったようなファイルは、最新の inode
> で復活されるので、目的のファイルが復活されない場合もあります。


CC BY-SA 4.0
2021-01-06T16:44:37.697
73125
2021-01-06T16:44:37.697
3060
73123
answer


回答にあらず単なる補足

この辺の話はブツが真にハードディスク（磁気メディア）である場合に限定です。いわゆる SSD
フラッシュメモリデバイスである場合には「ファイルの削除」がファイルシステムの論理データの上書きで済まずに真に Trim
つまりフラッシュメモリセルの消去を伴う場合があって、そうなるとファイル削除は即データ喪失になります。データが電気的消去済みなので復活のさせようがないわけです。  
リードオンリーにマウントしなおして作業をしている最中であっても OS や操作員のあずかり知らぬところで SSD のメモリコントローラが wear
leveling を行うこともあり得ます。そのため OS
上は書き込まない設定にしたつもりでもコントローラが同一論理セクタ番号を異なるフラッシュメモリセルに再マップする（＝データ喪失する）ことがありえます。なので
SSD では削除してしまったファイルの復旧は絶望的です。

上記のごとく `extundelete` でも原理的に復旧できないことがありうるので、そもそも消えてはならない・消えては困るデータは **別装置に**
バックアップしておくことが重要であるというのが教訓でしょうか。


CC BY-SA 4.0
2021-01-08T06:12:23.973
73156
2021-01-08T06:12:23.973
8589
73123
answer