ICTの水たまり

top > 実験と雑記(ブログ) > 2022/12/22 Windows Vistaを復活させた話

Windows Vistaを復活させた話

記事の目次

前話

2009年から使っていた私物のノートパソコンが,2016年に,無線LANが不調になった.のちに ハードディスクから異音がするようになった.ハードディスクの寿命は普段使い程度のもので保証期間が2から3年の製品が多い. 7年も使っていればハードディスクが不調になるのも当然である.処理能力の向上もあって新たなパソコンを 購入し普段使いとしたが,しばらくして旧式のゲームが動作不良であることに気づいた.原因は旧式ゲームが 古いライブラリに依存しているため.旧製品で生で動作した方が合うのである.

その乗り換えパソコンもまた乗り換えるこの頃,ふとドライブ乗り換えをやってみようと思ったところ, 様々(つまづ)ののち起動に成功したので記すことにする.

ドライブの移動

元のパソコンは中央処理装置,いわゆるCPUにIntelのCore 2 Duoを, 補助記憶装置には約320GBのハードディスクを搭載したノートパソコンである.

補助記憶装置の載せ替えにあたり,まず気にしたのは物理的規格である. 裏蓋を開け確認したところ,物理的規格は2.5インチ SATA ハードディスクドライブ(HDD)であった. 秋葉原に時々行く友人に頼み,2.5インチ SATA ソリッドステートドライブ(SSD)を購入してもらった. 購入したSSDを受け取り,載せ替えた.もともとあったHDDはどうしたかというと, 2.5インチ用ハードディスクケースにつなぐことでUSB ハードディスクとして使えるようにした. とはいえ異音がする状態のハードディスクであるから,ほぼ使えないのである. データを消去せずに取っておいたのがのちに幸運であった.

データの移動

補助記憶装置を物理的に交換するだけでは中身は移行されない.移行させるには手動で複製が必要である. しかしながら簡単なファイルの複製(コピー)だけではシステムは動作できない. また,320GBのハードディスクから240GBのSSDへの以降ではすべてのデータは複製できない. 今回はおおもとの領域構成(カタカナ語でパーティション構成)の関係でなんとかなった.

データの移行作業に当たり、Ubuntu のインストール用USBフラッシュメモリを使用した. Ubuntuは基本ソフトウェア(OS)の一つであり、無保証ながらも無料で使用できる. インストール用USBフラッシュメモリの作成方法は略する.

Ubuntu インストール用USBフラッシュメモリを挿し,USBメモリからの起動を試みた. 上手くいけば紫色の画面になり,そこで何か鍵盤(キー)入力をすることで 試用するかインストールするかその他の操作をするかを選ぶメニュー画面に行くことができる. 「試用する」を選び,一時的なLinux環境を得た.

Ubuntuの試用環境には,Gparted というパーティション編集ソフトウェアがある. これを用いてパーティション構成とLinux上でのドライブのパスとを得る. 結果は表1のとおり.

表1:もとのハードディスク パーティション
linux上のデバイス名ファイルシステム大きさ属性備考
/dev/sdc1ntfs1.00 GiBdiag何用のドライブか不明.
/dev/sdc2ntfs100.00 GiBbootシステムドライブのはず.
/dev/sdc3ntfs181.08 GiB データ用に使用していたはず.
/dev/sdc4ntfs16.00 GiBdiagおそらく回復用パーティション

データ用パーティションから必要なデータはほぼすべて別のハードディスクに移行させていたはずなので,これは複製しないことにする. これをもとにSSDにパーティションを表2のように作っていく.

表2:移行先のSSDのパーティション
linux上のデバイス名ファイルシステム大きさ属性備考
/dev/sda1ntfs1.00GiB (1,024MiB) diag
/dev/sda2ntfs100.00GiB (102,400MiB) bootシステムドライブにする.
/dev/sda3ntfs16.00GiB (16,384MiB) diag※2参照

linux には,ddというファイルを複製したり変換したりするコマンドがある.これを用いてデータを複製する. 1GBのパーティションをコピーするコマンドはコード1である.

コード1:第一領域の複製
# sdc1からsda1へコピー
ubuntu@ubuntu:~$ sudo dd if=/dev/sdc1 of=/dev/sda1 conv=sync,noerror
2097152+0 レコード入力
2097152+0 レコード出力
1073741824 Bytes(1.1GB, 1.0GiB) copied, 39.6174 s, 27.1MB/s
# 1GBあたり1分程度かかったと思う.ほぼシーケンシャルアクセスだろう.

コード1と同様にして,16GiBの回復用領域を複製しようとしたが失敗した. 結果をコード2に示す.

コード2:第三領域(回復用領域)の複製(失敗)
# sdc4からsda3へコピー
ubuntu@ubuntu:~$ sudo dd if=/dev/sdc4 of=/dev/sda3 conv=sync,noerror
dd: 'dev/sda3' に書き込み中です: デバイスに空き領域がありません
33554433+0 レコード入力
33554432+0 レコード出力
17179869184 bytes (17GB, 16GiB) copied, 604.476 s, 28.4 MB/s

16GiBの領域に対して16GiBの領域を作って複製したから問題はないと思っていたが,どうも 大きさが違うようである.改めてGpartedを開き,パーティションを選んで右クリックから「情報」を見ると, 元の領域は 16,385 MiBであった.複製先の領域は 16,384 MiBで作成したため領域が足りないと怒られたわけだ.

ならば複製先のパーティションの大きさを変更する指示を出せばよいと考え,Gpartedに指示をしたがどうもうまくいかない. NTFS のサイズ変更に失敗する.複製先のパーティションは使えないデータになってしまっているのだから,消去して,改めて 再作成することにした.

このことに気が付いたのは,コード3の実行中であった. コード3実行時はハードディスクのエラーなどが起きたために何回か同じコマンドをやり直している. 成功例のみ示す.

コード3:第二領域(システム領域)の複製
# sdc2 からsda2 へコピー
ubuntu@ubuntu:~$ sudo dd if=/dev/sdc2 of=/dev/sda2 conv=sync,noerror, bs=1024k
102400+0 レコード入力
102400+0レコード出力
107374182400 bytes (107GB, 100GiB) copied, 3298.04 s, 32.6MB/s

100 GiB の複製には100分かかると思っていたが,一時間弱で済んでびっくりした. この複製が終わってから,複製先の第3領域を 16,385 MiBで再作成し,コード4を実行した.

コード4:第三領域(回復用領域)の複製(成功)
# sdc4からsda3へコピー
ubuntu@ubuntu:~$ sudo dd if=/dev/sdc4 of=/dev/sda3 conv=sync,noerror bs=512k
dd: 'dev/sda3' に書き込み中です: デバイスに空き領域がありません
32770+0 レコード入力
32700+0 レコード出力
17180917760 bytes (17GB, 16GiB) copied, 506.61 s, 33.9 MB/s 17179869184 bytes (17GB, 16GiB) copied, 604.476 s, 28.4 MB/s

記事を書きながら振り返ると,コード2コード4 は4MiB の差異,レコード数が全然違う.総複製容量はブロックサイズ × レコード数 であり, bsパラメータを指定したことでレコード数が減っただけに過ぎない.4MiB の差異は理由不明.

データを移したことで動作する…はずであったが,実際には正しく動作しなかった. 記事が長くなってきたので一区切りとする.

BCDの修復

データをそっくりそのまま移せば動作すると思い,Ubuntuのインストール用USBメモリを抜いて 電源を入れると,以下のような画面になった.

Windowsブートマネージャのエラー画面
Windowsブートマネージャ
Windowsが起動できませんでした。最近のハードウェアまたはソフトウェアの変更
が原因の可能性があります。 問題を修正するには次の方法があります。

 1. Windowsインストールディスクを挿入してコンピュータを再起動します。
 2. 言語の設定を選んでから、[次へ]をクリックします。
 3. [コンピュータの修復]をクリックします。

このディスクがない場合は、システム管理者またはコンピュータの製造元にお問い合わ
せください。

  ファイル:¥Windows¥system32¥winload.exe

  状態: 0xc000000e

  情報: アプリケーションが見つからないか壊れているため、選択されたエント
      リをロードできませんでした。

ここからは細かい話が続くが,興味のある方はお付き合いください.

当該ノートパソコンは,起動情報セクタから起動する,従来のBIOSである. BIOSは,補助記憶装置のマスターブートレコード (MBR)と呼ばれる領域から,プログラムを読み込み実行する. MBRの大きさは小さいため,「OSを読み込むプログラム」を読み込むプログラムに なっていることが多い.Windowsブートマネージャが動作しているということから,MBR 領域は正常に動いていると推測した.

Windowsにはセーフモードという起動モードがあるが,それにも到達していないことから,起動ができない. インターネットで調べてみたところ,正常に起動するWindows上でbcdeditというコマンドを 動かさないといけないらしい.内蔵済みSSDを取り外すのは面倒である.さらに調べたところ, Windowsのインストールメディアから修復用コマンドプロンプトを起動することでも使えそうであった. たまたまWindows 8のインストールディスクがあったので,一か八か,試してみることにした.

OSのインストール開始画面にて、「今すぐインストール」を押さず, 「コンピュータの修復」,「トラブルシューティング」,「詳細オプション」,「コマンドプロンプト」の順に つつくと,コマンドプロンプトが起動する.

bootrec /RebuildBcdと入力することで,BCD情報を再生成できた. bootrecコマンドの詳細は,bootrec /?と入力することで確認できる.