このブログを検索

2012-08-10

HDD複製(HDDが一部壊れた状態で)

状況

元のHDD
HDD1(MBR:1TB)
Partition1 DELLの管理領域
Partition2 RECOVERY領域
Partition3 Cドライブ
Partition4 Dドライブ

どうやらDドライブ領域にエラーがあるようで
あるファイルをコピーしようとするとWindowsがフリーズする。
そのファイルを削除すると、しばらくするとまた別のファイルがフリーズ要素となる。
HDDメーカーであるSeagateの診断ツールで"9BE4E2E3"というエラーが出ている。
Seagateのサイトで自分のHDDの保証状況を確認すると販売元へ問い合わせろとある。
販売元はDELLで延長サポートやらをつけてまだ保証期間内だったのでDELLの診断ツールを使ってみると異常なし。
とりあえずサポート(チャット)に問い合わせてみたところ
「弊社の診断プログラムで異常と出なければ異常ではありません。これ以上のサポートは有償になります。」といった内容の訳の分からないタライ回しにあう。
※大抵の異常に対して「異常なし」と返す診断プログラム作れば儲かりまくり!?

役に立たない。もう二度とDELLでは買わない。と言い残してチャットを去り、
しょうがないのでHDDを購入することにした。
今の機種"DELL Studio XPS 7100"にはHDDをが2つ付けられるみたいなので
CドライブとDドライブを物理的に分けてみることにした。
というわけで、、、

複製先のHDD(予定)
HDD1(MBR:500GB)
Partition1 DELLの管理領域
Partition2 RECOVERY領域
Partition3 Cドライブ

HDD2(MBR:1TB)
Partition1 Dドライブ

こんな感じにしてみる。


まず、もともとのPartition4つは"Acronis True Image Home 2011"を使ってバックアップをとった。
基本的にパーティションのバックアップをとったが、Dドライブだけはエラーがあるようなのでファイル単位でバックアップをとった。
後々バックアップをディスクイメージとしてマウントしたりできるのでとても便利

で、それを復元したいけど、TrueImageの復元機能を使うと、余った領域を全て最後のパーティションの領域に組み込んでしまうみたいなので別のアプリを使ってみた。

"EASEUS Partition Master 9.1.1 Home Edition"というフリーソフトで
パーティションのコピーを含めた操作が色々行える。

なのでまずTrueImageでディスクイメージをマウントしてドライブとして認識させ、
PartitionMasterで複製先のHDD1に
・Partition1 DELLの管理領域
・Partition2 RECOVERY領域
・Partition3 Cドライブ
を複製した。

同様にHDD2に対してDドライブを複製した。

データの複製という意味ではこれで完了だけど、
このままだとパソコンを起動した際にWindowsを認識してくれない。

今回複製したいHDDは"MBR"というフォーマットが使用されているので
それを前提に説明する。このMBRというのは先ほどのPartitionMasterから確認できる。
また、パーティションはすべて基本領域とする。拡張領域だともっと複雑かも。 http://park12.wakwak.com/~eslab/pcmemo/hdisk/hdisk3.html
まず、HDD(MBR)に記録されている情報は、
|MBR|Partition1|Partition2|・・・|
という感じに、先頭に管理情報が記録されている。
ここの中身はWikipediaを見るとわかるけど
ブートマスターレコード
ブートストラップローダというセクションがあり、そこに起動のためのプログラムがインストールされている。
パソコンは最初にHDDのブートストラップローダにアクセスして起動プログラムを実行する仕組みになっている。
パーティションの複製だけではここがうまく設定できていない。

今回試してはいないが、恐らく複製しなくてもWindowsの回復コンソールを使えば起動プログラムをインストールできる。
ちなみにWindows7だとコントロールパネルのバックアップ作成→システム修復ディスクの作成で回復用CDが作成できる。
ただ今回のこのDELLマシンからだと、システム修復ディスクを作成しても、なんと起動できないw
エラーコード 0x4001100200001012 が出てしまう。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1452430939

本来ならWindows7のインストールディスクでもいいらしいが、DELLにはそんなものついてこない。
で、次の候補として、Windows7やServer2008 R2の評価ディスクがある。
これはココからダウンロードできるはずなのだが、なぜかできない。
他にも困っている人がいたのでやり方が悪いわけではなさそう。
http://social.technet.microsoft.com/Forums/ja-JP/w7itprogeneralja/thread/85c8543b-42c1-4da2-ac67-304754da2dc6/

torrent使えば野良リカバリディスクも手に入るっぽいけど怪しくて使えない。
手詰まりか!?っと思ったが、幸い自分は学生であるため、Microsoftのドリームスパークというプログラムに参加していて、そこからWindows Server 2008 R2 64bit 正規品がダウンロードできた。
それを使って今回の問題に対処した。

と、その前に、複製元HDDでbootパーティションがどこにあるのか調べておく必要が有る。
windowsのディスク管理やPartitionMasterでもわかるとは思うが、OEM領域のためか表記が少し違うため、 念の為今回はLinuxから確認した。
ディスク起動できるLinux、Knoppixを使う。
サイトからisoをダウンロードしてきてDVDに焼く。
複製元と複製先のドライブを装着し、Knoppixを起動。
※なぜか画面描画がおかしくてフリーズした感じだったけど触れば動いた
左下の黒いコンソールアイコンをクリックしコンソール起動。
$ parted -l
これで各HDDとそのパーティションがわかる。
どうやら複製元HDDでは、リカバリ領域にbootフラグが立っている。
ここで、複製先HDDではbootフラグがたっていなかったため、複製先HDDを操作する。
$ sudo parted /dev/sdx
※parted -lの結果でxの部分がかわる、複製先を選択
複製元リカバリ領域のパーティション番号を調べ(今回2)
> print
> set 2 boot on
> q

これで複製元と同じパーティションにbootフラグがたった。
Windowsのブートの仕組みはXPまでとVista以降とで異なり、
Windows7では
パソコン起動→MBR領域→bootパーティションの bootmgr ファイル(他にも?)→Windowsパーティション という風に辿っている。
あとはこのbootmgrファイルが正しければ起動するはず。

ためしにこの状態で複製先HDDのみを装着して起動してみたが無理だった
(試行錯誤しすぎてエラー内容不明)

これを修復するには
bootrec.exe、bcdedit.exe、bcdboot.exeが必要だが、
bootrec.exeだけはインストール済みのWindowsには入っておらず、
回復コンソール等でしか使えないコマンドになっている。
そのため、ここで2008R2のディスクを使う。
複製先HDDのみを装着状態で、2008R2のインストールディスクを起動する。
日本語を選択した後、「コンピューターを修復する」を選択。
システムイメージを使うかきかれるので使わない方(上)を選択する。
するとコマンドプロンプトを起動できるようになるので起動する。
x:\sources\>というプロンプトが開始されたので、
> cd x:\windows\system32
ここでまずやるべきらしいコマンドを実行する
> bootrec /fixboot
> bootrec /fixmbr
※何をしているのか詳細不明
これで直るケースもあるらしいので一旦確認
> bcdedit
device などが Unknownになっていて(試したら)起動できない状態であった。
次にやるべきコマンドを実行し、
ブートするシステムのエントリーを再構築するコマンドを実行する。
> bootrec /rebuildbcd
するとWindows 7 を検知してエントリーに追加するかきかれるのでYes
確認するとUnknownが消えてE:とつくようになった
>bcdedit
この状態で一旦再起動して起動できるか試してみる
が・・・BOOTMGR is Missingと出てしまった。

このエラーメッセージはパーティションの先頭に記載されているメッセージで、bootmgrファイルが見つからない時に表示される。
つまり、MBRまでは正常に読み込んでいるけど、bootパーティションのbootmgrに異常があるということになる。
先ほどのrebuildbcdはそこをうまいことしてくれるんじゃないかといいたいが、さらに次の対処となるコマンドを実行する。
これはWindowsフォルダからブートエントリー情報を抽出して、指定のドライブに出力するコマンド。

その前に、ドライブレターを知る必要があるので調べる。
DISKPARTがインストールされているのでそれを使う。
> diskpart
diskpart> list disk
これでディスク一覧が出る。サイズ等で区別できるならここでドライブレターが判明する。
わからなければさらに、ドライブを選択してパーティション情報表示できる。
diskpart> set disk [0-?]
diskpart> list partition

今回はリカバリ領域がDドライブ、windows領域がEドライブだった
つまり、EドライブのWindows情報を、Dドライブのbootmgrに出力する必要がある。
> bcdboot e:\windows /l ja-JP /s d:

これでこれ以上ない対策をしたことになる。
再起動してみると・・・起動!
以上でDELLのHDDの複製換装でした。保証外になると思うのと手順はあまり理解していない部分もあるので注意です。

ちなみに、記事にはできるだけ結果論を書いてあるけども、
試行錯誤の段階でWindowsPEを作成しました。
WindowsPEっていうのはKnoppixのWindows版みたいなもの。
なんだかんだでWindowsの方がリカバリ作業がやりやすい箇所もあるため1つもっておいたほうが心強い。 http://kiki2.suppa.jp/pe2/winpetch.htmのWinPe-tch Mini
を使えばとりあえず簡単に作れる。Directの方が高機能だけど作ってみるとWindows Boot Mangerでエラーが出た。
Windows7インストールイメージがあれば、回復環境(WindowsRE)も作成できるらしいが未確認。
PEにはbootrecがついてなく、REにはついてくるそうです。そういう意味で今回は真の意味で助けにはならなかった。


【送料無料】Acronis True Image Home 2012Plus
【送料無料】Acronis True Image Home 2012Plus
価格:9,080円(税込、送料別)
Acronis True Image Home 2012 Plus Academ -
Acronis True Image Home 2012 Plus Academ -
価格:6,610円(税込、送料別)

1 件のコメント:

  1. 大変お世話になっております。
    EaseUSのTeiと申します。

    御サイト上で弊社の製品をご紹介頂きありがとうございました。
    図図しいお願いだと承知いたしましたが、上記の記事で
    言及されたEaseUS Partition Masterに日本語公式ページのリンクの
    http://jp.easeus.com/partition-manager-software/free.htmlを
    挿入いただくことは可能でしょうか。

    お忙しい中ご無理申し上げまして誠に恐縮ではございますが、
    ご検討のほどよろしくお願い申し上げます。

    返信削除