Windows10でSSD換装した際に起動しなかった時の対処法

ひな形PCで作ったWin10 21H1のイメージを、ディスクコピー(これDO台 Hi-Speed使用)で複製してHDDの入れ替えて全台キッティングしている中で、なぜか「ある一台のSSD」を接続するとSATAに接続したどんなSSDからもブートできなくなる現象が発生した　→　解決したので　記録に残しておきます。

## 復旧前の状況

- 富士通製デスクトップなので起動時[F12]キーで、起動メニューを表示させる。でも、「Windows Boot Manager」は表示されない
- USBに入れた、GRUB2 で chainload すると、ちゃんとSSDから起動できる
- たぶん、Firmwareかどっかにブート関係のデータがあってそこがおかしい？

## 作業１　USBからブートして、SSDのWin10をchainload
たぶんWindowsPEとかでできるんだろうけど、デバッグしやすそうなのでGRUBを使いました。
（インストールディスクからコマンドプロンプトで、作業１は飛ばせると思います。）

- FAT32フォーマットのUSBドライブを準備 
- https://clonezilla.org/downloads.php
よりUbuntuベースのバージョンから clonezilla-live-20210609-hirsute-amd64.zipをダウンロード
- EFIとboot フォルダのみUSBのルートに全部コピー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242233/f17a48b6-dfb7-3546-3575-49bd432b6202.png)
- X:\boot\grub\grub.cfg を書換

``` X:\boot\grub\grub.cfg 
insmod chain
insmod boot
set default="0"
set root=(hd1,gpt1)
menuentry "Boot" {
  chainloader /EFI/Microsoft/Boot/bootmgfw.efi
  boot
}
``` 


## 作業２　起動したWindowsから bcdeditで Windowsに関係しそうなデータを消す

Administrator権限のあるユーザでサインイン して　コマンドプロンプトを開く。

```
> bcdedit /enum firmware

ファームウェアのブート マネージャー
--------------------------------
identifier              {fwbootmgr}
displayorder            {aaaaaa1f-bbbb-yyyy-zbd0-xxxxxxxxxxxx}
                        {eee8b000-ddc6-yyyy-ze51-xxxxxxxxxxxx}
                        {aaaaaa1d-bbbb-yyyy-zbd0-xxxxxxxxxxxx}
                        {aaaaaa20-bbbb-yyyy-zbd0-xxxxxxxxxxxx}
                        {bootmgr}
timeout                 2

Windows ブート マネージャー
--------------------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume1
path                    \EFI\MICROSOFT\BOOT\BOOTMGFW.EFI
description             Windows Boot Manager
locale                  ja-JP
inherit                 {globalsettings}
default                 {current}
resumeobject            {……省略……}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 30

ファームウェア アプリケーション (101fffff
--------------------------------
identifier              {aaaaaa1d-bbbb-yyyy-zbd0-xxxxxxxxxxxx}
description             診断プログラム

ファームウェア アプリケーション (101fffff
--------------------------------
identifier              {aaaaaa1f-bbbb-yyyy-zbd0-xxxxxxxxxxxx}
description             UEFI: IP4 Realtek PCIe GBE Family Controller

ファームウェア アプリケーション (101fffff
--------------------------------
identifier              {aaaaaa20-bbbb-yyyy-zbd0-xxxxxxxxxxxx}
description             Windows Boot Manager

ファームウェア アプリケーション (101fffff
--------------------------------
identifier              {eee8b000-ddc6-yyyy-ze51-xxxxxxxxxxxx}
description             UEFI: IP6 Realtek PCIe GBE Family Controller

```

本来、{bootmgr}だけなはずなのに、もう一つWindows Boot Managerがあるのが間違いのよう

```
> bcdedit /delete {aaaaaa20-bbbb-yyyy-zbd0-xxxxxxxxxxxx}
この操作を正しく終了しました。
```
消せないときは

```
> bcdedit /delete {aaaaaa20-bbbb-yyyy-zbd0-xxxxxxxxxxxx} /f
この操作を正しく終了しました。
```
これでGRUBが入ったUSBなしで、Windowsのブート（WindowsRE 回復オプション）ができるはず。
できなかったら、Windowsに関係ありそうなidentifierを片っ端から削除。（消しても再起動時に正しいのが自動で認識される。）

```
> bcdedit /enum all /v
```
/v オプションで　{bootmgr}などの実際のidentifierを調べて消す必要もあるかもしれない。

## 作業３　回復オプションじゃなくてちゃんと起動するようにする
回復オプションが起動したら、
オプションの選択で
「トラブルシューティング」→「コマンドプロンプト」を起動する。

Fat32でフォーマットされた、EFI System Partition(ESP)にアクセスできるようにする。

```
> diskpart
DISKPART> select disk 0
DISKPART> list volume
…未割当のFAT32を見つける

DISKPART> select volume 4
DISKPART> assign letter=Z
DISKPART> exit
>
```
これで EFIブートに必要なパーティションにアクセスできる。

参考:https://www.diskpart.com/jp/articles/assign-drive-letter.html

```
> bcdboot C:\Windows /l ja-JP /s Z: /f UEFI
> exit
```
参考:https://qwerty.work/blog/2020/03/windows10-repair-command.php

コマンドプロンプトを抜けると
回復コンソールに、先ほどはなかった
「続行　終了してWindowsに進みます」が表示されたら、成功。

-----

### そもそもは
職場のPC(Win8.1&HDD)が導入から５年半がすぎ、リプレースが近いのだけど
世の中の半導体不足と、「この前変えたばっかりじゃない？」という無理解のため
延命措置としてWin10 21H1 & SSD換装で乗り越えようとした中での出来事でした。

SSDの故障かと思って、新品に交換しても症状が治らなかったり、
調子の悪いSSDのほうを間違ってつないだら、症状が伝搬していってしまって、焦りました。
同じケースはあまりないのかもしれないですが、
まとまった情報がなかったので、メモしました。