CD-ROM起動でハードディスクからファイルを救出

 
  YAMAMORI Takenori ●yamamori@kt.rim.or.jp

●KNOPPIXを使う方法

KNOPPIX(下図)を使ってファイルの救出を行なうこともできます. KNOPPIXはそもそも通常のLinuxとして使用できるため, インストールCD-ROMのような限られた環境とは違って ファイルの救出作業をより楽に行なうことができるでしょう.

knoppix-s.gif

○KNOPPIXの起動時の注意

KNOPPIXは,起動時にハードディスクのswapパーティションを自動的に検出して, swapとして使用する可能性があります.このため,

  boot: knoppix noswap

と,オプションを付けて起動し,swapの使用を禁止してください. とくにハードディスクにSolarisのパーティションがある場合は, パーティションIDが「Linux Swap」と同じ0x82になっているため,注意してください.

○rootになるには

ファイルの救出作業のほとんどは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以外のファイルシステムのマウント

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,...という順になります.

†注
FreeBSDではfdiskパーティションのことを「スライス」と呼び, Solarisではfdiskパーティション内のSolarisのディスクラベルで分割された パーティションのことを「スライス」と呼んでいるため混同しないように 注意してください.
○別ディスクにセーブ

救出したファイルを別ディスクにセーブする方法は,基本的には前述の インストール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テキスト部分だけでも救出することが できるでしょう.ただし,すでに削除済みのファイルの断片も拾ってしまい, 順番も元のファイルどおりではなくなってしまいます.


To『CD-ROM起動でハードディスクからファイルを救出』[index]


このページは、技術評論社 Software Design 2003年8月号、『システムが起動しない!非常時のデータ確保術』の原稿を元に、Web 用に再構成したものです。
To 謎の処理系 SunOS 4.1.4 [Home]
yamamori@kt.rim.or.jp