Windows10のUEFIブートローダーを修復してみた
先日Windows10 Pro x64を再インストールしたところ何故かUEFIブートローダー(Windows Boot Manager)がLinuxを入れている方のSSDに入ってしまい、それを取り外した際にWindowsが起動しなくなったのでUbuntuのLiveDVDとWindowsのインストールメディアを使って修復してみたのでメモ。
構成
SSD1にはWindows、SSD2にはArch Linuxという構成で運用していたが、SSD1の中身を全て削除した上でパーティショニングを全てWindowsのインストーラーに任せてWindowsのインストールをしたところSSD1にはEFI領域が作られず勝手にSSD2の方のEFI領域にブートローダーが入ってしまった模様。
パーティションを弄る
Windowsのdiskpartコマンドがあまりにも使いづらいので今回はUbuntuのLiveDVD上のGPartedを使ってパーティションを操作します。
最終的には上記のようなパーティション構成にしたいので
- Windowsが入っている領域を100MB縮小し、右に寄せる
- 元々あった16MBのMSRパーティション(Microsoft予約パーティション)を消す
- 100MBのFAT32パーティション(EFIパーティション)を作り、boot,espフラグを付ける
- EFIパーティションの後ろに16MB分のパーティションを作成し、clearedでフォーマットし、msftresフラグを付ける
作業完了後にはこんな感じになるはずです。
パーティションの縮小と移動に1時間程要するのでお茶でも飲みながらのんびりやりましょう。
UEFIファームウェアからWindows Boot Managerを消す
UbuntuのLiveDVDのターミナルを立ち上げ、root権限で
[root@HogeHost ~]# efibootmgr
BootCurrent: 0002
Timeout: 2 seconds
BootOrder: 0002,0000,0017,0001,0018,001A,001B,001C,0019,0021
Boot0000* Windows Boot Manager
Boot0001 grub
Boot0002* rEFInd Boot Manager
Boot0010 Setup
Boot0011 Boot Menu
Boot0012 Diagnostic Splash Screen
Boot0013 Lenovo Diagnostics
Boot0014 Startup Interrupt Menu
Boot0015 Rescue and Recovery
Boot0016 MEBx Hot Key
Boot0017* USB CD
Boot0018 USB FDD
Boot0019* NVMe0
Boot001A* ATA HDD0
Boot001B* USB HDD
Boot001C* PCI LAN
Boot001D* IDER BOOT CDROM
Boot001E* IDER BOOT Floppy
Boot001F* ATA HDD
Boot0020* ATAPI CD
Boot0021* PCI LAN
efibootmgr -B -b 0000
Windows Boot ManagerはBoot0000に割り当てられているみたいなのでこれを削除します。
EFIパーティションに残骸が残っていると勝手に再登録されることがあるので、Microsoft関連のものは削除しておきます。
(適当にマウントしてEFI/Boot/bootx64.efiとEFI/Microsoft/*を削除)
Windowsインストールメディアを使ってブートローダーを再構築する
Windowsのインストーラーを起動後、"コンピューターを修復する"からコマンドプロンプトを起動します。
X:\Sources>diskpart DISKPART>list disk ディスク 状態 サイズ 空き ダイナ GPT ### ミック ------------ ------------- ------- ------- --- --- ディスク 0 オンライン 2794 GB 0 B * ディスク 1 オンライン 931 GB 5120 KB * ディスク 2 オンライン 232 GB 0 B * ディスク 3 オンライン 111 GB 0 B *
Windowsが入ってるディスクを選択します。ここでは例として2を選択します。
DISKPART>select disk 2
ディスク選択後、パーティションのリストを出力しドライブレターを割り当てます。
DISKPART>list part Partition ### Type Size Offset ------------- ------------------ ------- ------- Partition 1 システム 100 MB 1024 KB Partition 3 予約 16 MB 101 MB Partition 2 プライマリ 232 GB 117 MB
この場合だと1番目のパーティションがEFIパーティション、2番目のパーティションがWindowsが入っているパーティションになります。
DISKPART>select part 1 DISKPART>assign letter=S DISKPART>select part 2 DISKPART>assign letter=C
CドライブにするとわかりやすいのでCに割り当ててますが、既に割り当てられている場合もあるでしょう。その時は、
DISKPART>list vol DISKPART>select vol 4 DISKPART>remove letter=C
のようにドライブレターの割り当てを解除すればおkです。もしくは別の割り当てられていないドライブレターに割り当てましょう。
ドライブレターを割り当てたらexitでdiskpartを抜けます。
X:\Sources>bcdboot C:\Windows /s S: /f UEFI
最後にbcdbootコマンドでブートローダーのインストールとUEFIファームウェアへの登録をします。
BCDboot のコマンド ライン オプション
コマンドライン引数についてはMSDNの方参照お願いします。
問題無さそうならコマンドプロンプトを閉じてPCを再起動しましょう。