2014/02/25

HDD換装四苦八苦

 密林でHGSTの内蔵用HDDを買って、Win7ノートのHDD換装を試みたのだが、これがまたややこしいの何のって…
 以下、ちょっとした備忘録を。



 先ず換装元のノートPCについてだが、HP製(2010年春モデル)でOSはWin7Pro、しかも32bit仕様という、今となってはかなり貴重なブツである。
 7200rpmで500GBのHDD(Seagate製のST9500420AS)を積んでて、結構速めのマシンではあるのだが、色々溜め込む性分故に手狭になってきた為、この際HDDの換装に初挑戦してみるかと。

 先ずは密林でHGST製のノート用HDD(Travelstar 7K1000。7200rpmで1TB。型番はメーカーシートだとHTS721010A9E631/0J22428、密林や価格.comでは0S03565)とHDDケースを購入し、HDDをケースに入れて外付け化。次にフリーのパーティションエディタ(Minitool Partition Wizard)を使ってディスクをコピー。未割当の領域が出るのでデータ領域を拡張してやって、仕込完了。
 早速PCバラしてHDD載せ換えて電源入れると、見事にWin7が起動。よっしゃ終わったー、ちゃーんと問題なく容量増えてるかなー?、とマイコンピュータを開いてみれば、

「……あれ? リカバリ領域消えてね?(滝汗)」

 まさかのリカバリ領域消失。というか、どうもリカバリ領域のパーティションが認識されていないっぽい。……あー、やっぱりそう来たかあ……

 実の所、これは想定の範囲内だったりした。今回換装を試みたマシンはHDDにリカバリ領域を持っていたため、500GBを1TBへと容量を増加させることで何らかの不具合が出るのではないかと思っていたのである。元々500GBのHDDに合わせてパーティションを区切ってあった以上、ソレを変えてしまったら容量不一致による認識異常でも起こるんじゃないか、と。そしたら案の定というか、すんなりとは行かなかったわけで。
 一応購入時にリカバリメディアはしっかり作って冷暗所で保存してあるし、抜いたHDDを速攻でフォーマットとかしてないから大丈夫なんだけど、やはり目指すは環境の完全復元な訳で。なので、今回の自分と似たケースのHDD換装をネットでちょいと調べてみることにした。

 その結果、色々出てくる出てくる。そしてやはりというか、リカバリ領域があるHDDの換装、しかも容量の変化を伴う換装はかなり難しいことが発覚。うーん、どうしたものか…
 取り敢えず、新しく載せ換えたHDDのままで一度リカバリメディアからリカバリを実行してみた……ところで、ふと閃いた。

「……このままリカバリを終わらせたら、出来たデータ領域のパーティションに旧HDDのデータ領域のパーティションを上書きして移植、というのはどうだろう?」

 要するに問題は、データ領域以外の普段ユーザーが触らない部分のパーティションや中身が「メーカーが設定したように」維持されていれば良い訳で。なら、先ずは新しいディスクに「メーカーの意向に添う比率で」パーティションを区切らせて、ソレを壊さないようにしつつデータを移してやればいいのではないか、……と考えた次第。

 何はともあれ先ずはリカバリである。この備忘録をちまちまと記述している間にリカバリは終了し、Win7が起動。先ずはWin7の復元機能の無効化でもしておこうと設定を弄る。
 ……が、エラーが出て設定が完了出来ない。あー、此処でもHDD容量変わった齟齬が出てるなー、と思いながら一度キャンセルして、もう一回設定を変更すると今度は変更出来た。よし次、とWindows Updateを実行しようとしたところ、……うん、出来なくなってる。

 ぶっちゃけこれも予測していたことで、要はHDDの規格が変わったことによるアクシデントである。詳細はAFTディスクとインテルのIRSTでググれば出るが、古いのに対し新しい規格は物理セクタの最低値が512バイトから4096バイトになった、つまり区切り方が8倍にデカくなったという話。セクタがデカくなった分ヘッドが細々動かなくなってパフォーマンス上がるらしいが、デメリットとしてHDD換装時にリカバリが出来なくなるとかWindowsUpdateが出来なくなるとか色々面倒らしい。
 今回仕入れたHGSTのHDDは新品だから無論と言うかバッチリAFT仕様のヤツで、一方換装元のST9500420ASは非AFTディスクだったもんだから、それがどうもダメだったようで。

(後から色々見て分かったが、そもAFTディスクへの換装後ではリカバリディスクからのリカバリすら不可能というケースが結構あるっぽい。自分の場合リカバリディスクからのリカバリは何故か普通に出来ていることを考えると、今回買ったAFTディスクのセクタサイズがメーカーシートによるところの512e、つまり512エミュレーションというタイプだったのが功を奏したかも? 因みにMicrosoftのKB2510009を参照すると分かるが、厳密にはWin7がサポートしているセクタサイズは論理512物理4096で、論理物理の両セクタで4096をサポートしているのはWin8以降だそうな)

 対策はIRSTのインストールとWindowsUpdateに対するパッチ当てというか初期化というか。前者はインテルのHPに行って落としてインストールするだけ、後者はWINDOWSフォルダ内のSoftwareDistributionフォルダの名前変えてしまう(edb.chkとedb.logの初期化?)か.batファイルでパッチ当てするかで治療可能。再起動噛ませてやればWindowsUpdateが出来るようになった。よっしゃ。
(個人的に、IRSTのインストールファイルとWindowsUpdateに対するパッチはUSBに入れてリカバリ後すぐに出して使えるようにしておくのが無難と思われる)

 一応念の為にWindowsUpdateを実行してみると、……わーお、144個! 初期状態からだとこんなにアップデートせにゃならんのか……でも取り敢えず実行。一時間くらい掛かったけど一応144個のアプデが終了。この時点で、換装後にリカバリしてもアレコレやればWindowsUpdateが概ね上手く行くことが分かったので、アプデ実験は此処迄に。
 続けて、HDDリカバリが出来るかどうか試してみたのだが……出来ない! くそう、やっぱ容量変わっちゃダメかー、と思わず凹みそうになるのを堪えて、取り敢えずパーティションを見てみると、

「――ちょ、(換装後のHDDから)リカバリ領域消えてるじゃんよ……!?」

 ナンテコッタイ、リカバリ領域自体が綺麗サッパリ存在していなかった。いやでも待て、工場出荷時に戻すとか言ってたよなHPさんよ。これどー見ても出荷時とちゃうやんけ。それとも何か、リカバリディスクからのリカバリだと強制的にこうなってしまうのか? んなアホな…

 リカバリ領域をどうにかして使えるように出来ないか色々調べてみたのだが、これがまた中々難しい。というか今度は似たような症例が見当たらない。それでも根気よく調べていると、…………どうやら、MBRを弄る必要があると分かってきて思わず溜息。
 おいおいMBRかよ、あーでもPartition WizardにMBR修復コマンドあったなあと思ってディスクブート版を起動してみる。効果無し。チクショウどないせーっちゅーねんとひたすらググる。要はMBRまで移植出来れば良い訳で、じゃあそんな我がニーズに応えてくれるイカしたフリーソフトはどこだと探してみれば…………何とか引っ掛かってくれた。EaseUS Todo Backupである。
 どうやらこのソフト、やろうと思えばセクタバイセクタでの超精密なクローニングが出来るヤツらしい。加えてパーティションアライメントも調整してくれる(本来はSSD向けの機能)らしく、フリーながら妙に高機能で頗る評判が良い。

 ならばコイツで試してみるかと、早速クローニングを実行。すると、…………おぉ! 進捗表示にMBRをコピーしているとの旨が! ナイス! そのまま続行。
 クローン完了後、HDDを載せ替えて起動してみる。……ん!? 何かエラーコード(0xc000000e)が出てOSが立ち上がらない。一応Windowsのダイアログ(Windowsブートマネージャー)なのだが、ちょっと予想外だったのでビックリ。試しにWin7の修復ディスクを使ったら一発で直ったので、恐らくはSSD向けに最適化するオプションを使った弊害か(後で一番先頭のパーティションの開始オフセットを見たら4096だったので、MBR辺りにズレが生じたのだろうか?)。
 Win7が立ち上がったのを確認して、先ずはWindowsUpdateをチェック。……うん、ちゃんと動く。問題無し。此処で一旦シャットダウンして、次はHDDリカバリが出来るかどうか。メーカーロゴでEsc押して、F11押してリカバリプログラムを呼び出――――せねえ! ぬおおおお、またか、またダメなのかこんちくしょう!

 ダメ押しでもう一回実験を試みる。今度はSSD向けに最適化するオプションを使わずにクローニング。完了後、再び載せ換えて起動――――はい? また0xc000000eが出てきたよ? どゆこと? ……あれか、MBRコピったは良いけどやっぱり容量不一致(PBRのズレ?)で駄目と言うことか? あーもう面倒くせえ。修復ディスクでサクッと直す。
 そのままWin7立ち上げて、オフセットを確認。4096じゃなくてオリジナルと同じ数字。よしOK。一回シャットダウンし、電源入れてHDDリカバリを呼び出してみる。

「――――立ち上がらん、だと……?」

 ――駄目!? これでも駄目か!? 駄目なのか!?
 …………あーいかん、テンションがガクッと落ちてきたぞ……



 ……HDD買って届いてからかれこれ三日間、あーでもないこーでもないとHDDを着けたり外したりしていたわけだが、いい加減疲れてきてしまった。
 いっぺんHDDを元に戻して、ちょっと考察タイム。

 先ず疑問なのは、

・リカバリディスクからのリカバリは出来る

 ということ。
 つまり、リカバリプログラム自体は今回換装を試みたAFTディスクに対しても働くと言うことだ。勿論、そのままではWindowsUpdateが出来ないからIRSTのインスコとかしなきゃならんけど、それは些末な問題だろう。
 そうすると、

・換装後のHDDからはリカバリ領域からのリカバリが不可能

 何故こうなってしまうかが一番の問題なわけで。
 それに、

・HDDを換装してリカバリディスクからのリカバリを行うとリカバリ領域が復元されない(工場出荷時のディスク構造にならない)

 これも疑問。尤も、HDDの容量変わるんだから工場出荷時にはどうあがいたって戻るわけないのだが、リカバリ領域まで消えるというのは流石に妙というか。
(後で調べてみると、同じHP製のPCでもリカバリディスクからのリカバリでリカバリ領域が消される場合と消されない場合がある模様。リカバリシステムの新旧によるものか?)

 考えられる要因は、

・リカバリ領域の読み出しにはリカバリ領域の開始オフセット値などが換装前と一致していなければならない

 HDDの先頭からのオフセット値を数えていって、同じトコからリカバリ領域が始まっていないと駄目、なんて場合である。この備忘録を記述している時点ではパーティションサイズを一切弄らないクローニングは未だやったことが無いので、一度検証してみようと思っている。
 ただ、この場合でもセクタ基準でチェックが掛けられていたらアウトだが。それもよりによって物理セクタだったら手の打ちようがない。

・HDDの固有IDやシリアルが一致していなければならない

 もしホントにこれが理由だとしたらHP鬼畜過ぎる。購入時のハードウェア構成じゃないとリカバリ領域が使えないと言うことだが、そこまでやるかなあというか。

・AFTディスクではリカバリプログラムが動かない

 実はクローニングしたHDDのリカバリ領域にPartition Wizardでアクティブ属性を付けると、F11でリカバリ領域を読み出せるようになったのだが、リカバリ自体はHDDからじゃ出来ないからディスクを寄越せ、と途中で止められてしまった。
 前述のようにリカバリディスクからのリカバリは可能だったことを鑑みるに、HDDのリカバリ領域からのリカバリを行う場合に限り、非AFTディスクでないとリカバリプログラムが動かないのでは、という可能性を考えた。どうもこのリカバリプログラム、WinPEベースで組まれてるっぽいし、マシンの購入時期的にドライバがAFTディスクに対応してない確率が高いし。
 但し、これはリカバリプログラムを呼び出した後の話。メーカーロゴでEsc押してF11からリカバリ領域をロードするのって処理的にはBIOSがやってるはずで、呼び出した後は兎も角呼び出すまではまたこれと問題が違うのだが。

 少なくともリカバリ領域を呼び出す前に限って言えば、一番の問題はリカバリ領域のセクタ位置とかなのだろうが、…………此処までの備忘録を自分で読み返してみると、何れにしたって非AFT時代のマシンにAFTディスクを換装しようと言うこと自体が間違いだったと言わざるを得ない気がしてきた……orz



 未だ懸念が残っているっちゃ残っているので、後もうちょっと換装を実験してみるつもり。
 差し当たってはパーティションを弄らずにクローニングしてみることだが、さてはて、どうなることやら……(遠目



追記[140226]:

 その後パーティションを一切弄らずにクローニングしてみたところ、…………リカバリ領域の読み出しに成功!!
 つまり、

・リカバリ領域の読み出しにはリカバリ領域の開始オフセット値などが換装前と一致していなければならない

 少なくともウチのマシンのリカバリシステムではこれが原因だったと言うことになる。
 BIOSがリカバリ領域をロードする際チェックしていたのは、リカバリ領域がHDDの先頭から数えてどの位置にあるのか、ということだったのだろう。

 検証として、換装後にCドライブのパーティションをPartition Wizardで拡張してみるとリカバリ領域の読み出しが不可能になった。しかしパーティションサイズを拡張前の数値に戻して、リカバリパーティションの位置を元に戻してやると、問題無くリカバリ領域を読み出せるようになり、HDDリカバリも問題無く実行出来た。

 従って、リカバリ領域を活かしたままHDDの換装を行いたい場合、

・Win7をSP1へアップデートしておき、IRSTのインストールを行っておく

・HDDの「コピー」ではなく「クローニング」を行う

・クローニング時にリカバリパーティションを動かさない(Cドライブの拡張を行わない)

・クローニング後にMBRのエラーが出る(Windowsブートマネージャー、エラーコード0xc000000e)ので、対策としてシステム修復ディスクを予め作っておく

・末尾に生じる未割当の領域はCドライブを拡張してやって埋めても構わないが、HDDリカバリを行う場合はサイズを縮小してリカバリパーティションの位置を元に戻しておく

・リカバリ後はWindowsUpdateが動かなくなるので、事前にIRSTのインストーラとWindowsUpdateのフラグ?修正用バッチファイルをUSBにでも入れてすぐ使えるようにしておく

 これらに気を付ける必要がある。
 まあ最後は念のためというか、一々ダウンロードし直すのが面倒臭いだけでしかないのだが。

 因みに、換装後にWin7が問題無く起動して、リカバリ領域も読み出せることを確認したら、そのまますぐに元々のHDDをフォーマット…………というのはやめた方が良い。一度元々のHDDでHDDリカバリを行い、更にWindowsUpdateを一通り済ませて、その時点でのディスク全体のイメージを作ってバックアップしておくことが望ましい。
 要はリカバリ領域が問題無く読み出せて問題無くHDDリカバリを行えるHDDの構成を、しっかり保存しておこうという寸法である。というか、これだったらHDDリカバリを行わなくてもEaseUS Todo Backupで簡単にリカバリ出来るし、一々WindowsUpdateを進める手間も省ける。

 現在、再びHDDを元に戻して、換装予定のディスクのチェックディスクを行っているところ。
 散々付けたり外したり書き込んだりフォーマットしたりやってたので、一度不良セクタ出てないかしっかり見ておこうかと。

 しかしまあ、五日か四日くらい掛かったけど、取り敢えず問題無く換装出来る目処が立ったので一安心。
 色々知識も得られたし、こういう経験もたまには良いもんですなー。

0 件のコメント: