増設した直後は起動し (未フォーマットの状態)、Windows が起動後「ディスクの管理」でドライブを初期化し、シンプルボリュームを追加した。
そのあと再起動したら起動しなくなった。具体的には起動時に「オプションの選択」画面となり「続行」が表示されない状態。起動させることができないので「トラブルシューティング」するしかない。
「トラブルシューティング」からいろいろやったがダメ
- 「スタートアップ修復」→何も起こらない。ログのパスも表示されない
- 増設したSSDを外してみる → はずしてもダメで、つけたりはずしたり全パターンやったがダメ
- これが結構ひどくて、現状復帰というのが不可能に
- 「コマンドプロンプト」でなんとかする
- まずオペミスで起動ファイルが消えてないから確認する。→ あった
- しかしドライブレターがおかしい
- なぜかわからないが、このコマンドプロンプト上だと起動ディスクのドライブレターがCではなくFになっている
ディスクが生きているし、回復画面は出るので、Windows Boot Manager までは起動して、Windows Boot Loader が起動できないということのようだ。結局、こうなると修復コンソールのコマンドラインから以下を行うとなおる。
まず修復対象のシステムパーティション(EFIボリューム)を見つける。
> diskpart DISKPART> list volume # 同じディスクのボリュームが近くに表示されるみたいなことはないので # 勘で見つけるしかない DISKPART> select volume 6 ボリューム 6 が選択されました。 DISKPART> assign letter B DiskPart はドライブ文字またはマウント ポイントを正常に割り当てました。 DISKPART> exit > B: > cd \EFI\Microsoft\Boot # バックアップを一応とっておく > copy BCD BDC.bak > bcdboot f:\windows /l ja-jp /s b:
bcdboot これは「ソース」を「f:\windows」として、ロケールを ja-jp とし、システムパーティション(ESP)として b: を指定している。
これでBCDというブートに必要なファイルが作りなおされる。
コマンドプロンプトからディスクにアクセスする方法
一度 diskpart を起動すると、それだけでドライブレターが割り当てられるみたい。割り当てられたら普通に cd や dir で見れる。もしかして間違えてフォーマットしていないか? ということの確認はできる。
ref.
- https://wiki.tk2kpdn.com/windows-11-repair-bcd-and-system-files/
- https://bluediamond.jp/information/2020/09/bootrec-rebuildbcd.html
- https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/bcdboot
- https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/mountvol
原因は? ドライブレターが問題?
結構調べたがよくわからなかった。前述した F: というドライブレターは回復コンソール上のコマンドプロンプトの話なので、Windows起動前であり、ここで違っていても、そこまでおかしくない。Windows起動後はレジストリエントリからドライブレターを解決するが、この段階だとまだレジストリは読まれていないはずだからだ。
まず BCD ってなんだ
BCD (Boot Configuration Data) は Windows Boot Manager で使われる設定ファイルであり、実体としては小さいレジストリファイル形式のデータベースである。
起動状態の Windows の BCD は bcdedit コマンドで見ることができる (管理者権限が必要)。ただし raw な情報を出力する方法はなく、「親切な」情報しか表示されない。なのでトラブルシューティングにはとても使いにくい。
BCD を bcdedit で見ると、device というパラメータには partition=c: とか書かれている。が、実際は partition=c: という内容が BCD に記録されているわけではない…… 現在実行中の環境のドライブレターなどを参照してそれっぽく表示している。レターの割当をなくしたりすると partition=\Device\HarddiskVolume1 みたいな形式になったりする。
BCD は Windows Registory 形式 (バイナリ) なので、Linux 向けのツールとかで、なんやかんやして読める状態のテキストファイルである .reg 形式になおすと、以下のようになっている。
11000001 というのが device にあたるエントリ。内容は、たぶんディスクの GUID やパーティションのGUIDが書かれている。
[\Objects\{6f0fb257-f0af-11ee-a710-b12de9d2818d}\Elements\11000001] "Element"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,06,00,00,00,00,\ 00,00,00,48,00,00,00,00,00,00,00,67,5e,ec,72,84,4c,7f,4d,a5,74,08,9e,22,5c,\ 38,fc,00,00,00,00,00,00,00,00,6e,22,e2,de,e4,ec,50,40,bb,b7,79,4a,a3,72,c7,\ 8d,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
疑問: GUID で指定されているなら、増設したぐらいでおかしくならなくない?
そうなんだよな~ 結局なんでなのかはわからなかった。BCD の差分とか眺めてみたけどわからない。
起動しなくなるのは割とショックがでかいので勘弁してほしい。