Category:
Linux
手違いで大事なシェルスクリプトを消してしまった。extundelete をすぐに掛けたが、検出されない。困った。…というようなシチュエーションに遭遇。
最終的に、「頑張って発掘メソッド」により回復できたのでメモしておきます。当たり前と言えば当たり前のこと、なのですが。
まず、失われたシェルスクリプト中の覚えている箇所 (もちろん、できるだけユニークな部分) を頼りにデバイス全体で grep します。その際、--text を指定してテキストファイルとして検索するモードにします。また --byte-offset を指定することでオフセットを出力するようにします。
当然ながら、extundelete のように inode を判別してデータを読んでいるわけではなく、ただ単に連続した領域を切り出しているだけなので、この方法で救出されたファイルは内容が正しいことも欠損していないことも保証されていません。あくまで「無いよりマシ」レベルだし、失われたファイルが大量にあるときは無理ですが、まぁ今回は命拾いしましたよということで。
最終的に、「頑張って発掘メソッド」により回復できたのでメモしておきます。当たり前と言えば当たり前のこと、なのですが。
まず、失われたシェルスクリプト中の覚えている箇所 (もちろん、できるだけユニークな部分) を頼りにデバイス全体で grep します。その際、--text を指定してテキストファイルとして検索するモードにします。また --byte-offset を指定することでオフセットを出力するようにします。
# grep --text --byte-offset "MY_FLAG" /dev/sda1それっぽい断片が見つかったら、後はデバイスから dd コマンドでオフセットの周辺を取り出すだけ。念のため、of= は違うデバイス上にしておきましょう。(if と of を取り違えると本当に取り返しがつかないので注意。)
4250072111: MY_FLAG="yes"
# dd if=/dev/sda1 of=/dev/shm/recovery.bin bs=1 skip=4250060000 count=50000取り出されたファイルからゴミを削ればできあがり。化石発掘のようですね。
当然ながら、extundelete のように inode を判別してデータを読んでいるわけではなく、ただ単に連続した領域を切り出しているだけなので、この方法で救出されたファイルは内容が正しいことも欠損していないことも保証されていません。あくまで「無いよりマシ」レベルだし、失われたファイルが大量にあるときは無理ですが、まぁ今回は命拾いしましたよということで。