0. 概要
クラッシュしたHDDから新しい正常なHDDにディスク単位でコピーする方法です。
6のあとにパーティション単位で再度コピーすればもっと便利かもです。
(2007年10月14日)
1. CDブートできるLinuxの用意
cfdiskとddが使えればOKです。
KNOPPIXでも良いですし、他のディストリビューションのインストールCDでも良いです。

KNOPPIXだと、10/14現在の最新は
CD版が"knoppix_v5.1.1CD_20070104-20070122+IPAFont_AC20070123.iso"で、
DVD版が"knoppix_v5.1.1DVD_20070104-20070122+IPAFont_AC20070123.iso"ですかね。
今回の目的であればCD版で十分です。念のためRing Serverへのリンクをはっておきます。
Ring Server(TENBIN)(R)
Ring Server(DNS Balance)(R)
2. HDDの用意
コピー元HDD(壊れたもの)とコピー先HDD(新しいもの)、そして適当なi386システム(CPU、メモリ、M/B、ディスプレイ、キーボード、マウス、etc)を用意します。
当たり前ですが、サイズは"コピー元 < コピー先"となるように。
3. CDブート
2台のHDDをつないでCDブートしましょう。

KNOPPIXの場合はブート時に`knoppix noswap dma 1'と入力してランレベル1(シングルモード)、DMA有効で起動するのが問題も少なくおすすめです。
boot: knoppix noswap dma 1
起動後、日本語表示がうまくいかないことも多いかと思うので、日本語KNOPPIXの場合等はLANG環境変数をunsetしておくと良いかも、です。
# unset LANG
4. cfdiskコマンドによるディスク(パーティション)の確認
# cfdisk (デバイス名)
上記コマンドでパーティションやサイズが確認できますので、どのデバイス(HDD)にどのデバイスが割り当たっているか、そしてサイズ(総バイト数)とセクタサイズがいくらかを確認します("u"キー数回でセクタ表示に切り替えられます)。
ATAの場合は、IDE0のマスタが"/dev/hda"、スレーブが"/dev/hdb"、IDE1のマスタが"/dev/hdc"、スレーブが"/dev/hdd"となっているはずです。
SATA(&SCSI / USB)の場合はつながっているデバイスの状態で名前が変わるみたいですが、 "/dev/sda"、"/dev/sdb"、"/dev/sdc"、"/dev/sdd"あたりを確認すれば良いかと。

以降は、コピー元を"/dev/sda"、コピー先を"/dev/sdb"と仮定して説明します。
# cfdisk /dev/sda
(情報を確認)
# cfdisk /dev/sdb
(情報を確認)
5. ddコマンドでコピーする。
cfdiskコマンドで確認したサイズをもとに、以下のコマンドを実行し、そして終わるまで待ちます。
セクタ数は総バイト数をセクタサイズ(普通は512バイト)で割ったものになります。
200GB程度であれば時間は6時間くらいでしょうか(←勘です。出典なし)。
# dd if=/dev/sda of=/dev/sdb bs=512 count=(セクタ数) conv=noerror,sync
(完了するまで待つ)
6. エラー修復
コピー先のHDDを稼働しているシステムに接続し、エラーチェックをかけます。
エラーチェックはWindowsXPであれば「自動的に修復」、「不良セクタの回復」をチェックして実行してください。
起動ドライブとして使用しようと思っている場合はMBRの復旧も必要かも知れません。
7. データ読み出し
エラーチェック後、内容を読み出せば復旧完了です。
読み出せないデータもあるとは思いますが、別の手段を模索するなりあきらめるなりしましょう。。
X-1. 参考
Manpage of CFDISK(C)
Manpage of DD(D)
KNOPPIX Japanese edition(K)
2002/11/07 自宅(1) 「復活の日: FreeBSD ディスククラッシュ事件総括」(O)
[mixi] Linuxディスクとの闘い(O)
クラッシュしたディスクからのデータ復旧(準備編) (suisui weblog)(O)
壊れたHDDからデータを取出す方法 - ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き -(O)
わんこ日記(2005-05)(O)
hdd dd conv noerror sync - Google 検索(G)