[an error occurred while processing this directive]
日経Linux
   
click
   
トップ | 最新号 | メール配信 | 年間購読 | 日経Linuxとは | 広告掲載企業へのリンク&資料請求

2006年5月号
定価:1490円
4月8日(土)発売

最新号
日経Linuxは毎月8日発売(地域によって発売日が異なります)


ITProサイト内検索


 
大事なファイルをうっかり消去してしまいました。すぐ気が付いたのですが,何とか復活させることはできないでしょうか。
削除直後であればmcやdebugfsコマンドで復活できる可能性は高いのですが,確実ではありません。あらかじめ「ゴミ箱」を用意するなどして,不用意にファイルを削除しないような工夫をしておきましょう

Linuxで使用しているExt2ファイル・システムは,削除したファイルを復活させるための仕組みを基本的には用意していません。そのため,簡単かつ確実にファイルを復活させる方法はありません。ただし,ファイルを削除した直後なら高い確率で復活させることができます。ファイル復活にはいくつかの方法がありますが,最も簡単なのがmc(GNU Midnight Commander)というファイラ(ビジュアル・シェル)を利用する方法です。以下ではその方法を紹介します。

まずは書き込み不可に

ファイル復活で最も重要なのは,復活させようとするファイルがあるパーティションを即座に書き込み不可にすることです。Linuxのようなマルチユーザー/マルチタスクのOSでは,他のユーザーやプロセスがファイル・システムに変更を加える可能性が常にあります。ハード・ディスク上のデータが上書きされてしまうと復活できなくなりますから,できるだけ早くパーティションを書き込み不可にしなければなりません。削除したファイルが/homeパーティションにあったとすると,mountコマンドを使って,

# mount -o remount,ro /home

とすれば,読み出し専用で再マウントされ,書き込み不可になります。

mcを使ったファイルの復活

多くのディストリビューションでインストールされているmcは,ファイル復活機能が有効になっています。そこで,通常はそのままこれを使用すれば良いのですが,万一,ファイルの復活機能が有効になっていないmcがインストールされている場合は,mcを自分でコンパイルする必要があります。

mcのコンパイルには表1の2つのアーカイブが必要です。アーカイブ入手後,図1のようにmcをインストールしてください。

こうしてインストールしたmcをroot権限で起動します。「コマンド」メニューに「ファイルの復活」という項目が追加(写真1)されていますので,これを選択し,適切なデバイス名を入力します。削除されたiノードの一覧が表示されますので,削除された時間やサイズなどを手掛かりに目的のファイルを探してください。それらしいファイルが見付かったら,これを他の書き込み可能なパーティションにコピーします。コピーする際に元のファイル名に戻せば,ファイルが復活します。

Ext2の削除取り消し属性

Ext2ファイル・システムでは,ファイルに削除取り消し属性を設定できるようになっています。あらかじめこの属性を設定しておくと,ファイルを削除しても確実に復旧可能になるとされています。ただし,この属性は実際には未実装で,これを利用しているコマンドやアプリケーションはほとんどありません。http://amadeus.uprm.edu/~undelete/に対応モジュールがありますが,あまり活発には開発されていないようです。

うっかり削除を無くすために

このようにExt2ファイル・システムでは,いったん削除したファイルの復活は不可能ではありませんが不確実で面倒なものです。重要なファイルを誤って削除しないよう,あらかじめ対策を施しておくようにしましょう。

対策としては次の方法があります。

(1)パーミッションの設定

ファイルの書き込み権限を外すとファイルは削除できなくなります。重要なファイルは,

$ chmod -w daijifile

として保護しておきましょう。ファイルの所有者であっても,ファイルを削除しようとすると次のように確認が求められるようになります。

$ rm daijifile
rm: daijifile: override protection 444 (yes/no)? no

(2)ゴミ箱の利用

MacOSやWindowsではファイルはすぐには削除されず,ゴミ箱に保存されます。LinuxでもKDEやGNOMEなどのデスクトップ環境にはゴミ箱が用意され,うっかり削除を防止できるようになっています。

コマンド・ラインでも,例えばrmコマンドを図2のようなシェル・スクリプトと置き換えることで,ゴミ箱に相当する機能を利用できるようになります。ファイルは削除されるのではなく,ホーム・ディレクトリのgomibakoというディレクトリに移されます。

(3)-iオプションの利用

rmコマンドを使用するときに-iオプションを付けるようにすると,本当にそのファイルを削除しても良いかを確認するメッセージが表示されます。

$ rm -i file
rm: remove file (yes/no)? no

オプション指定が面倒な方は,エイリアスを設定しておくと良いでしょう。

$ alias rm="rm -i"

このようにすると,rmコマンドを実行すると必ず-iオプション付きの動作をするようになります。ただし,エイリアスの利用はお勧めできません。エイリアスを利用した環境に慣れ過ぎると,エイリアスを設定していない環境で作業する際にミスを犯しやすくなるからです。

大事なファイルを削除する場合には,ワイルド・カードを使用せずに,完全なファイル名を指定するように心掛けることも重要です。

(回答者:渡辺 智)

表1 mcコンパイルに必要なファイル(アーカイブ)
  ソフト名 URL
mc ftp://ftp.kddlabs.co.jp/X/GNOME/stable/sources/mc/など
e2fsprogs ftp://sunsite.sut.ac.jp/pub/archives/linux/sunsite- unc/system/filesystems/ext2/など

 
$ tar zxvf e2fsprogs-1.18.tar.gz
$ cd e2fsprogs-1.18
$ ../configure --enable-elf-shlibs
$ make
$ cd lib/ext2fs
$ su
# make install
# exit

$ tar zxvf mc-4.5.51.tar.gz
$ cd mc-4.5.51
$ ./configure --with-ext2undel
$ make
$ su
# make install
# exit
 
図1 mcのインストール
configureスクリプトに「--with-ext2undel」オプションを必ず付けてください。

   
写真1 mcのメニューから「ファイルの復活」を選択
この項目がない場合は,mcを自分でコンパイルする必要があります。

 
#!/bin/sh
GOMIBAKO=$HOME/gomibako
if [ ! -d $GOMIBAKO ]
then
      mkdir -p $GOMIBAKO
fi
for i
do
      mv $i $GOMIBAKO
done
 
図2 ゴミ箱を利用するためのrm代替スクリプト
このスクリプトを/bin/rmと置き換えると,削除したファイルがホーム・ディレクトリのgomibakoに保存されます。


[an error occurred while processing this directive]