CD-ROM起動でハードディスクからファイルを救出 |
||
YAMAMORI Takenori ●yamamori |
KNOPPIX(下図)を使ってファイルの救出を行なうこともできます. KNOPPIXはそもそも通常のLinuxとして使用できるため, インストールCD-ROMのような限られた環境とは違って ファイルの救出作業をより楽に行なうことができるでしょう.
KNOPPIXは,起動時にハードディスクのswapパーティションを自動的に検出して, swapとして使用する可能性があります.このため,
boot: knoppix noswap
と,オプションを付けて起動し,swapの使用を禁止してください. とくにハードディスクにSolarisのパーティションがある場合は, パーティションIDが「Linux Swap」と同じ0x82になっているため,注意してください.
ファイルの救出作業のほとんどはroot権限が必要です. KNOPPIXでrootになるには,「sudo -s」コマンドを実行してください. パスワードは聞かれません.あるいは, [Ctrl]+[Alt]+[F2]などで仮想コンソールを切替えれば, 最初からrootのシェルが起動しているため,これを利用することもできます. そのほか,KNOPPIXのメニューからRoot Shellを選ぶ方法もあります.
KNOPPIXでは,起動時に接続されているハードディスクのパーティションが 自動的に検出され,それらに対応して/etc/fstabが作成されるとともに, マウントポイントのディレクトリが/mnt/hda1, hda2,...などの名前で作成されます. したがって,救出するハードディスクが/dev/hda3ならば,単に,
# mount -r /dev/hda3 (または # mount -r /mnt/hda3)
とすればマウントできます.前述の例と同様,「-r」オプションだけは コマンドラインで付加します.
Linux以外のファイルシステムもマウントできます. この場合はmountコマンドに適切なオプションを付ける必要があります. たとえばFreeBSDやSolarisのファイルシステムをマウントするには次のようにします.
FreeBSDのパーティションをマウントする場合: # mount -r -t ufs -o ufstype=44bsd /dev/hda5 /mnt/hda5 Solarisのパーティションをマウントする場合: # mount -r -t ufs -o ufstype=sunx86 /dev/hda5 /mnt/hda5
なお,FreeBSDのBSDパーティションやSolarisのスライスは, fdiskの論理パーティションと同様にデバイスが割り当てられます.(†注) たとえば,hdaのハードディスクの場合はhda5, hda6,...という順になります.
救出したファイルを別ディスクにセーブする方法は,基本的には前述の インストールCD-ROMで起動した場合 と同じです.KNOPPIXではfstabは自動的に作成されているので,セーブ先のハードディスクは,
# mount /mnt/sda1
のようにしてマウントできます.このあと,まずは重要なファイルのみ個別にセーブし, つづいて次のようにファイルシステム全体をセーブしてください.
# cp -ax /mnt/hda3/. /mnt/sda1
ネットワーク経由でのセーブも,基本的には前述の インストールCD-ROMで起動した場合 と同じです.DHCPが使える環境では,すでにIPアドレスやDNSの設定が 行なわれているでしょう.それ以外の場合は,ifconfigコマンドほかを使って 手動でネットワークを設定してください.
まずは重要なファイルを個別にftpまたはscpコマンドを使って転送します. そのあと,ファイルシステム全体を次のようにしてセーブします.
# cd /mnt/hda3 # tar clvf - . | ssh username@192.168.1.123 'gzip > /tmp/backup.tar.gz'
救出するハードディスクのパーティションをマウントできない場合は, とりあえず,
# od -c /dev/hda3 | less
などとして,デバイスの先頭セクタ付近をodで表示して様子を探ることができます. 何らかの内容が表示される場合は,少なくともハードディスクの読み込みは 行なわれていることになります.そこで,十分な空き容量のある別のファイルシステムを /mnt/sda1にマウントしてから,
# dd if=/dev/hda3 of=/mnt/sda1/backup.dd
のようにして,/dev/hda3デバイス全体をbackup.ddというイメージファイルとして セーブします.このイメージファイルは,あとで,
# mount -r -t ファイルシステムタイプ -o loop backup.dd /mnt/tmp
として,再度マウントを試してみることができます.
それでもマウントできない場合は,
$ strings -a backup.dd
として,ファイルシステム中に含まれるASCIIテキスト部分だけでも救出することが できるでしょう.ただし,すでに削除済みのファイルの断片も拾ってしまい, 順番も元のファイルどおりではなくなってしまいます.