別の場所にデータを書き出す方法を取る場合は、まずレスキューパーティションが あるかどうかを確認する必要があります。つまり、復旧したいファイルのコピー を書き出す場所を確保するわけです。おそらく、読者のシステムには複数の パーティションがあり、ルートや /usr、/home は別々のパーティションに分かれていると思います。 このうちのひとつを使っても、全く問題ないはずです。どれかひとつの パーティション上に、新規のディレクトリを作成しましょう。
ルートパーティションしかなくて、すべてをそこに保存している場合は、 若干面倒です。それでも MS-DOS や Windows のパーティションが使えたり、 もしくはカーネルモジュールとして ramdisk ドライバを使えるようには なっているのではないでしょうか? ramdisk を使うには (これは、1.3.48 以降のカーネルであることが前提です) 次のようにします。
# dd if=/dev/zero of=/dev/ram0 bs=1k count=2048 # mke2fs -v -m 0 /dev/ram0 2048 # mount -t ext2 /dev/ram0 /mnt |
これによって 2 MB の ramdisk 領域が作成され、/mnt 上にマウントされます。
少々注意: 読者が kerneld (もしくは、 2.2.x や 2.1.x 以降のカーネルを使っているならその後継である kmod) を使ってカーネルモジュールをロードしている場合、ramdisk 領域 から不揮発性ストレージへのコピーが終了するまで ramdisk のマウントを解除 してはいけません。ramdisk 領域のマウントを解除すると、kerneld はモジュールを (一定時間経過後に) アンロードできるものと思って しまい、さらに実際にアンロードされてしまうと、ramdisk のメモリ領域は カーネルの他の部分に再利用されてしまって、苦労してデータの復旧に費やした 時間が全く無駄になってしまうからです。
Zip や Jaz, LS-120 といったリムーバブル装置を持っているなら、レスキュー パーティションの置き場所として是非利用してください。持っていない場合は、 フロッピーでいきましょう。
他に必要になるのは、パーティションデバイス上から必要なデータを読み出せる プログラムです。いざとなれば dd でも出来るのですが、でも例えば、パーティションの 600 MB 目から 800MB 目までの 領域を読み出そうとするような場合、dd は最初の 600 MB の領域を無視できず、 どうしても頭から読み込もうとしてしまうのです。高速なディスクを使っている 場合でも、これにはかなりの時間が掛かります。この振る舞いをなんとかしようと して、著者は、パーティションの途中にある領域を適切に読み出しできる プログラムを作成しました。fsgrab という名前の プログラムです。このプログラムのソースパッケージは、著者のウェブサイト や Metalab (とそのミラーサイト) にあります。読者がこの方法を使ってくれる ものと仮定して、ここから先は、読者が fsgrab を 持っているものとして説明します。
ただ、復旧しようとしているファイルの大きさがどれも 12 ディスクブロックを 超えない場合 (1 ディスクブロックは通常 1 Kb です)、fsgrab は不要です。
fsgrab が必要だがダウンロードとビルドがイヤな場合は、 fsgrab のコマンドラインを dd のコマンドラインに置き換えて考えてください。例えば、fsgrab のコマンドラインが以下のような場合、
fsgrab -c count -s skip device |
これに相当する dd のコマンドラインは (おそらく処理時間が 余分に掛かりますが) 次にようになります。
dd bs=1k if=device count=count skip=skip |
ここで一応警告しておきます。fsgrab プログラムは、 著者のもとでは完璧に機能しましたが、読者のもとでどのような振る舞いを しようとも著者は一切責任を負えません。実際これは、きちっと設計された プログラムではなく、なんとか処理をこなすだけものにすぎません。免責 に関する詳細は、プログラム付属の COPYRIGHT ファイルに記載された "No Warranty" の章をご覧ください (the GNU General Public License です)。