CD-ROM起動でハードディスクからファイルを救出 |
||
YAMAMORI Takenori ●yamamori |
LinuxなどのOSのインストールCD-ROMは,実際のインストールだけでなく, ハードディスクからのファイルの救出にも使用することができます. その方法を順に説明します.
RedHat系Linuxでは,インストーラの起動後,実際のインストールを行なわずに 仮想コンソールを切替えてシェルの画面を表示することができます. RedHat系Linux以外のOSでも,たいていインストーラの途中でシェルに抜ける手段が 用意されているはずです.
具体的には下図のように,「インストールの種類」の選択画面あたり,または この画面で「カスタム」を選んだあとの「ディスクパーティションの設定」あたりまで インストーラを進め,ここで[Ctrl]+[Alt]+[F2]を押して, シェルの画面に切替えるとよいでしょう.
[Ctrl]+[Alt]+[F2] | [Ctrl]+[Alt]+[F7] | |
---|---|---|
シェルの画面に切替え ←←←←←←←←←←← |
ここではX上で動作する通常のインストーラを起動していますが, ブートローダのプロンプトで「boot: linux text」と入力して テキストモードで起動しても基本的には同じです.
なお,テキスト画面からは[Ctrl]なしで[Alt]+[F2]で仮想コンソールに切替え られますが,[Alt]は左の[Alt]キーしか使えないので注意してください.
インストーラの途中でシェルに切替えるのではなく, 最初からレスキューモードで起動するという方法もあります. RedHat Linux 9などのLinuxのインストーラの起動時に, ブートローダのプロンプトに対して,
boot: linux rescue
と入力すると,レスキューモードで起動できます.
レスキューモードでは,[Ctrl]+[Alt]+[F2]で切り替わる仮想コンソール上の シェルだけでなく,[Ctrl]+[Alt]+[F1]のメインのテキスト画面上に 直接シェルが起動します.
レスキューモードでは,さらにネットワークインターフェイスの 設定画面が出たり(RedHat 9の場合),ハードディスク上に存在する Linuxのパーティションを自動的に見つけて/mnt/sysimageにリードオンリで マウントしてくれたりします.
なお,レスキューモードでも言語の選択ができますが,ここで日本語を選ぶと, RedHat 9ではフレームバッファコンソールの動作が遅過ぎ, RedHat 8.0ではインストールCD-ROM自身をマウントできないという問題があるため, ここでは英語モードを使用するのが無難でしょう.いずれにしても, 通常モードでインストーラを起動してシェルの画面に切替える方法を知っていれば, 結局レスキューモードと同様の作業はできるため, とくにレスキューモードでの起動にこだわる必要はないでしょう.
シェルの画面になったら,救出するハードディスクのパーティションを リードオンリでマウントします.
マウントポイントはどこでも構いませんが,ここでは「mkdir /a」で インストーラのRAMディスク上に/aというマウントポイントを作成することにします. なお,レスキューモードで起動した場合は/mnt/sysimageに, すでに自動的にマウントが行なわれている場合があります.
この時点では,インストーラの進行状況によっては/dev/hda1,/dev/hda2,...などの デバイスファイルがまだ作成されていない可能性があります. 救出するハードディスクのパーティションに対応するデバイスファイルがない場合は, mknodコマンドで作成してください.たとえば/dev/hda3を作成する場合は,
# mknod /dev/hda3
とします.このmknodコマンドはインストール用の特別なバージョンであり, hda3のようにデバイスファイル名を指定するだけでよく, デバイスのメジャー番号,マイナー番号などを指定する必要はありません.
なお,現在認識されているハードディスクのパーティションの情報は, 「cat /proc/partitions」とコマンド入力して表示することができます.
ハードディスクのパーティションが,Linuxで通常使用するext2またはext3の ファイルシステムならば,
# mount -r /dev/hda3 /a
としてマウントできます.mountコマンドには「-r」オプションを付けて リードオンリにします.マウントできれば/aディレクトリの下に 救出するべきファイルが見えるはずです.
このほか,WindowsのFATのファイルシステムも,mountコマンドで マウントできます.ファイルシステムタイプは自動判定されますが, 念のため「-t vfat」オプションを付けた方がよいでしょう.
なお,インストールCD-ROMの環境ではFreeBSDやSolarisなどの ファイルシステムのマウントには対応していません.これらのパーティションから ファイルを救出する場合は,後述のように KNOPPIXを使う とよいでしょう.
ここで,救出するファイルをセーブするための別のハードディスクをマウントします. 同じハードディスクの別パーティションでも可能ですが, できれば別のハードディスクにセーブした方が安全です.
新品のハードディスクの場合は,マウントの前にあらかじめ, 次のようにファイルシステムを作成しておいてください. ここでは,セーブ先としてSCSIのハードディスクを使用するものとします.
# mknod /dev/sda ← デバイスファイルが無ければ作る # fdisk /dev/sda ← fdiskコマンド内でsda1のパーティションを作成 # mknod /dev/sda1 ← デバイスファイルが無ければ作る # mke2fs /dev/sda1 ← sda1にext2のファイルシステムを作成
準備ができたら次のようにしてハードディスクをマウントします.
# mkdir /save ← マウントポイントを作る # mount /dev/sda1 /save ← セーブ先のハードディスクを読み書き可でマウント
これでファイル救出の準備は整いました.まずは,最初からファイルシステム全体を コピーするのではなく,その中でもとくに重要なファイルのみを先にセーブするように してください.これは,ハードディスクの一部のセクタが物理的に損傷している 可能性があるためです.損傷したセクタを含むファイルにアクセスすると, 重要なファイルのセーブが終る前に,デバイスドライバレベルでシステムが 固まってしまう危険性があります.
重要なファイルとは,具体的にはシステムの運用状況によって異なりますが, 各ユーザのホームディレクトリ以下,/etc以下の設定ファイル,/var/spool/mailの メールスプール,/var/logのログファイルなどでしょう. 個別のファイルのセーブは,次のようにcpコマンドなどを使って行なえばよいでしょう.
# cp -p /a/home/username/my_file /save
次に,ファイルシステム全体をセーブします.これには,いわゆる「tar | tar」や 「dump | restore」コマンドを使うこともできますが,ここではGNU cpに「-ax」 オプションを付けて,次のように簡便にセーブを行なうことにします. (コラム「cp -ax の意味は?」参照)
# cp -ax /a/. /save
ここで,コピー元のディレクトリを,/aや/a/ではなく, /a/.と,最後にドットを付けて指定していることに注意してください. こうしないと/saveの下にaというディレクトリ自体がコピーされてしまいます.
ファイルーのセーブが終ったら,最後にセーブ先のハードディスクを 次のように忘れずにumountしてください.
# umount /save
このあと,[Ctrl]+[Alt]+[Del]を押してマシンをリセットすることができます.
ファイル救出用の別のハードディスクを用意できない場合は, ネットワーク経由で別のマシンにセーブすることができます. その手順を順に説明します.
まずはネットワークインターフェイスを立ち上げる必要があります. これは,インストーラをレスキューモードで起動した場合は, 途中の設定メニューによってすでに完了しているでしょう. それ以外の場合は,
# ifconfig eth0 192.168.1.250
のようにifconfigコマンドにIPアドレスを指定してネットワークを立ち上げます. eth0に対応するネットワークカード用のモジュールは,自動認識ですでに modules.confに書き込まれているはずです.(インストーラ上では/etc/modules.conf ではなく,/tmp/modules.confとなる場合があります)
デフォルトルートの設定が必要な場合は,
# route add default gw ルータのIPアドレス
とコマンド入力してください. なお,インストールCD-ROM環境にはnetstatコマンドがないため, ルーティングテーブルを表示する場合は「netstat -rn」の代わりに 「route -n」コマンドを使用してください.
DNSについては/etc/resolv.confを設定すれば使えるようになりますが, 緊急時の使用ということもあり,DNSは設定せず,IPアドレスのじか打ちを基本と 考えた方がよいでしょう.
ここで,前述の別ディスクへのセーブと同様に,まずは重要なファイルのみを 個別にリモートマシンにセーブします.
これには,ftpまたはscpコマンドが使えます. scpを使う場合は次のようにコマンド入力します.
# scp -p /a/home/username/my_file username@192.168.1.123:/tmp
この例では,/a/home/username/my_fileというファイルを,192.168.1.123という IPアドレスのマシンの/tmpディレクトリの下にコピーしています. なお,インストールCD-ROMの環境でRSA認証を行なうのは困難であるため, 通常のUNIXパスワードを使った認証を行なうことになります.
次にファイルシステム全体をセーブします. これにはtarコマンドを使うとよいでしょう. 具体的には次のようにコマンド入力します.
# cd /a # tar clvf - . | ssh username@192.168.1.123 'gzip > /tmp/backup.tar.gz'
この例では,/aにマウントされている救出元のハードディスク全体を tarでアーカイブし,それをsshで192.168.1.123というIPアドレスのマシン上の /tmp/backup.tar.gzというファイルに圧縮してセーブしています. sshでリモートで実行するコマンドは,シングルクォート(' ')でくくる必要があります. セーブ先のリモートマシン側でgzipを使っていますが,圧縮の必要がなければ gzipをcatに変更し,ファイル名は*.tarとしてください.