Linux Tips

削除したファイルを復活するには

北浦訓行
2001/10/18

 Linuxで一度削除してしまったファイルを復活するには、いろいろと困難な問題がある。最も大きな要因は、Linuxがマルチユーザー、マルチタスクシステムである点だ。削除したファイルを復活させようと思っても、別のプロセスが削除したファイルの領域を使ってしまう可能性があるのだ。従って、ここで紹介する方法で復活を試みても、元に戻すことができない場合もある。

 ここでは、「Hello!!!」という内容のhello.txt(11bytes)を削除して、復活してみる。

 誤ってファイルを削除した場合は、速やかにランレベル1に移行する。以下のように、suコマンドでrootユーザーになり、telinitコマンドを実行する。

$ su - ←rootになる
Password: ←rootのパスワードを入力
# telinit 1 ←ランレベル1に移行
(省略)
sh-2.04 # ←ランレベル1でのプロンプト

 次に、HDをリードオンリーでマウントし直す。こうすれば、削除したファイル領域にほかのプロセスがデータを上書きしてしまうことがなくなる。

sh-2.04 # mount -o remount,ro /dev/hda1 ←hda1をリードオンリーでリマウント

 ファイルの復活作業を始める前に、もう1点注意しなければならないことがある。それは、削除したファイル領域を保護するために/dev/hda1をリードオンリーにしたことだ。もし、ルートディレクトリ(/)をhda1にしていたら、ルート以下にはデータを書き込めない。削除したファイルの復活は、削除したiノードからファイルをコピーする作業になるので、ファイルを書き込めるメディアが必要となる。

 もし、/bootや/usr、/homeなどのディレクトリごとにパーティションを分けているなら(それが推奨される方法)問題はないのだが、1つのパーティションに全ディレクトリをまとめているのであれば、(ファイルサイズの制限はあるが)FDやMOなどのリムーバブルメディアに保存するのが簡単だ。ここでは、FDにコピーするものとして、FDDをマウントする。

sh-2.04 # mount /mnt/floppy

 いよいよ実際にファイルを復活させる作業に入る。削除したファイルを復活するには、mc(GNU Midnight Commander)というファイラ(ファイル操作ソフト)を使う。最近のGNOMEがインストールされているディストリビューションなら、mcはたいていインストール済みなので(LASER5 Linux 7.1、Red Hat Linux 7.1、Turbolinux 7 Workstation、Vine Linux 2.1.5で確認)、そのままmcコマンドを実行すればいい。

sh-2.04 # mc

 インストールされていない場合は、http://www.gnome.org/projects/mc/にあるリンクから最新版のソースファイルをダウンロードしてインストールしておく(誤消去する前にインストールしておく必要がある)。その際には、configureのオプションで「--with-ext2undel」を指定しなければならない(ソースファイルで配布されているプログラムをインストールするにはを参照)。

 mcが起動したら、[F9]キーを押してプルダウンメニューを表示する。メニューの中に[Undelete files]という項目があるので、これを選択する。

[Undelete files]は、日本語化されているmcでは[ファイルの復活]という項目になっている(画像をクリックすると拡大表示します)

 復活させるファイルが入っているデバイス名を入力する画面になるので、「hda1」とか「hdb2」といったデバイス名を入力する。その際、「/dev/」を入力する必要はない点に注意が必要だ。入力したら、[Enter]キーを押す。

デバイス名を入力する画面。ここでは「hda1」と入力した(画像をクリックすると拡大表示します)

 復活可能なファイル(実際にはiノード)の検索が始まり、しばらくすると画面の右側にiノードの一覧が表示される。ここで表示されるファイルの名前は単なる数字の羅列なので、ファイル名からは消去したファイルを探すことができない。ファイルサイズと最後に修正した日付から類推するしかない。

復活可能なiノードの一覧。数字の羅列なので、ファイル名からは復活したいファイルを特定できない(画像をクリックすると拡大表示します)

 この時点では、ファイルをポイントするカーソルは画面の左にあるので、それを画面右に移動しなければならない。[Tab]キーを押すと、カーソルが画面右に移動する。[↑]キーや[↓]キーを使って復活したいファイルを探す。目的のファイルが見つかったら、それを選択(カーソルをそのファイルに移動して、反転表示させる)してコピーする。[F5]キーを押すと、ファイルのコピー先などを入力する画面が表示されるのでコピー先を入力する。

ここでは、FDにhello.txtというファイル名でコピーするので、「/mnt/floppy/hello.txt」と入力(画像をクリックすると拡大表示します)

 筆者の環境では、FDを指定するとコピー先のファイルの所有者を変更できないという旨のエラーメッセージが表示されたが、しばらく待っているとFDへのコピーは終了したので、エラーメッセージのダイアログでは[Abort]を選択した。

 ファイルの一覧表示の画面に戻ったら、[F10]キーを押してmcを終了する。試しに、FDにコピーしたhello.txtを表示してみると、無事復活していた。

FDにコピーしたhello.txtの内容を表示してみた。ちゃんと復活している(画像をクリックすると拡大表示します)

 ファイルが復活できたら、「shutdown -r now」でLinuxを再起動しよう。

Linux Tips Index



 Linux Squareフォーラム Linux Tipsカテゴリ別インデックス
インストール/RPM ブート/ブートローダ
ファイル操作 環境設定
ユーザー管理 コンソール/ターミナル
X Window System セキュリティ
トラブルシューティング 他OS関係
ネットワーク ハードウェア
Webサーバ Samba
GNOME KDE
OpenOffice.org エミュレータ
ソフトウェア そのほか/FAQ
全Tips公開順インデックス Linux Tips月間ランキング
Linux Squareフォーラム全記事インデックス

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間