0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

A disk read error occurred — Win11 24H2 で古いPCが起動しない。直したのは bootmgr だった

0
Posted at

この記事は Zenn にも同じ内容を載せています: https://zenn.dev/suisei498/articles/e273a87ff73f68

2012年のノートPC(NEC LaVie L LL750/HS6)を Windows 10 から Windows 11 24H2 に上げたところ、最初の再起動でこう表示されて止まりました。

A disk read error occurred
Press Ctrl+Alt+Del to restart

再起動しても同じです。検索すると「SSDの故障」「ケーブルの接触」「ブートセクタの修復」がたくさん出てきますが、私の場合はどれでもなく、起動に使うファイル1個を古い版に戻すだけで、Windows 11 がそのまま起動しました。データも消えていません。

同じ症状の人のために、切り分けの順番と、実際にやった手順を残しておきます。

※このPCは Windows 11 の動作要件を満たしていないため、要件チェックを回避するツールでアップグレードしました。Microsoft がサポートしない構成です。同じことをする場合は自己責任で、先にデータを退避してください。

結論:24H2 の新しいブートマネージャが、古いPCの起動方式で動かない

原因は 24H2 で新しくなったブートマネージャ(bootmgr)が、レガシーBIOS+MBR の起動方式では動かないことでした。

  • このPCは2012年の機種で、BIOSにUEFIの項目がなく、レガシーBIOSでしか起動できません
  • アップグレードの最初の再起動で、起動用のパーティションにある bootmgr が 24H2 版に置き換わる
  • その 24H2 版の bootmgr を、このPCの起動方式では読み込めず、「A disk read error occurred」になる

同じ機種の利用者の報告でも、同じ症状が挙がっていました(末尾に出典)。

最初にやったこと(効かなかったもの)

SSDをPCから外し、USBで別のPCにつないで中を調べました。

1. ディスクは読めるか

USB経由では全部問題なく読めました。パーティション形式は MBR、「システムで予約済み」の50MBがアクティブ、その後ろに Windows 本体。起動に使うファイル(bootmgr、BCD、winload.exe)もそろっていて、壊れている様子はありません。

ディスクが読めるなら、まず故障ではない、と考えてよさそうです。

2. 起動の設定(BCD)を見る

bcdedit /store D:\Boot\BCD /enum all

(D: は、別のPCにつないだときに「システムで予約済み」に付いたドライブ文字です)

ここで分かったのは、アップグレードが再起動フェーズの途中で止まっていることでした。新しいOSは $WINDOWS.~BT\NewOS\ に展開済みで、次の起動でセットアップを続ける設定のまま。つまり「最初の再起動で転んだ」状態です。

3. ブートセクタの書き直し → 効かなかった

よく紹介されている修復です。

bootsect /nt60 D: /mbr

「ブートコードを正常に更新しました」と出ましたが、PCに戻すと同じエラーのままでした。ブートセクタは bootmgr を呼び出すところまでの担当で、呼び出された bootmgr 自体が動かないので、ここをいくら直しても変わりません。

(bcdboot での作り直しも試しましたが、アップグレード途中の状態ではエラーになりました。)

直した手順:bootmgr を Windows 10 の版に戻す

アップグレードの途中で止まっている間は、Windows 本体の側にまだ Windows 10 版の bootmgr が残っています。これを起動用パーティションに上書きしました。

SSDを別のPCにUSBでつなぎ、ドライブ文字が次のとおりだったとします。

  • D: = システムで予約済み(起動用・50MB)
  • E: = Windows 本体

管理者の PowerShell で実行します。

# 1. 元の(24H2 版の)bootmgr を控える
Copy-Item D:\bootmgr C:\backup\bootmgr_24h2.bak -Force

# 2. 書き換えられるようにする(システムファイルなので保護されている)
takeown /f D:\bootmgr
icacls D:\bootmgr /grant "*S-1-5-32-544:F"
attrib -r -h -s D:\bootmgr

# 3. Windows 10 版で上書きする
Copy-Item E:\Windows\Boot\PCAT\bootmgr D:\bootmgr -Force

# 4. 属性を元に戻す
attrib +r +h +s D:\bootmgr

# 5. 本当に置き換わったかを確かめる(ハッシュが一致すること)
(Get-FileHash E:\Windows\Boot\PCAT\bootmgr).Hash
(Get-FileHash D:\bootmgr).Hash

私の環境では、24H2 版は 473,364 バイト、Windows 10 版は 420,238 バイトでした。大きさで見分けがつきます。

icacls の *S-1-5-32-544 は「Administrators グループ」のことです。日本語版の Windows でもグループ名の表記に左右されないように、IDで指定しています。

SSDをPCに戻して電源を入れると、アップグレードの続きが始まり、そのまま Windows 11 24H2 で起動しました。ファイルもアプリも引き継がれています。

注意:アップグレードが終わった後は、同じ場所から取れない

上の手順3で使った E:\Windows\Boot\PCAT\bootmgr は、アップグレードが途中で止まっていたから Windows 10 版のまま残っていたものです。アップグレードが完了すると、ここも新しい版に置き換わります。

完了後に再発した場合は、次のどちらかから取り出します。

  • C:\Windows.old\Windows\Boot\PCAT\bootmgr(アップグレード後、一定期間だけ残る)
  • Windows 10 のインストールメディア

私は、うまくいった時点の Windows 10 版と 24H2 版を両方とも別の場所に保存しておきました。

残るリスク:Windows Update で再発しうる

この状態は「レガシーBIOSのPCで、Windows 10 版のブートマネージャから Windows 11 24H2 を起動している」という、正規ではない組み合わせです。

Windows Update が bootmgr を新しい版に書き戻すと、また同じエラーで起動しなくなります。その場合も壊れたわけではないので、同じ手順で戻せば直ります。控えておいた Windows 10 版の bootmgr は消さないでください。

根本的に安定させるなら、次のどれかになります。

  • BIOS に UEFI の項目がある機種なら、UEFI+GPT に切り替える(同じ機種でも、隠しメニューで切り替えられたという報告がありました。私の個体には項目がありませんでした)
  • Windows 10 に戻して使う
  • 買い替え

まとめ:切り分けの順番

  1. SSDを別のPCにつないで読めるかを見る。読めるなら故障ではない可能性が高い
  2. BCD を見て、アップグレードの途中で止まっていないかを確かめる
  3. 古いPC(レガシーBIOS)で 24H2 に上げた直後なら、ブートセクタの修復より先に bootmgr の版を疑う
  4. 直すときは、元の bootmgr を控えてから上書きし、ハッシュで置き換わったことを確かめる

エラーの文面は「ディスクが読めない」ですが、実際に読めなかったのはディスクではなく、新しいブートマネージャを読む力が古いPCになかった、という話でした。

出典

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?