EFIパーティションを吹き飛ばしたときにやること(Windows w/ Arch Linux)


最近Arch Linuxのインストール中に# rm -r /boot/*をよくやらかすので対処方法を記録しておきます。

環境

  • EFIブート
  • /boot にEFIパーティションがマウントされている
  • /boot/grub/ にGRUBがインストールされている
  • Arch Linux
  • Windows 10

手順

Windows REを用意する

  • 別のWindows PCで「回復ドライブ」を実行してUSBメモリにイメージを書き込む
  • Windowsのインストールディスクで代用する(重い・遅い)
  • なんとかして回復パーティションを起動する(望み薄)

Windows REのコマンドプロンプトでコマンドを実行する

> dir C: # ターゲットとなるWindows環境がC:にマウントされていることを確認する(されていなかったらdiskpartでassign)
> diskpart

--- DiskPart ここから ---

> list disk       # ディスクのリストを確認する
> sel disk 0      # EFIパーティションがあるディスクを選択
> list part       # パーティションのリストを確認する
> sel part 1      # EFIパーティションを選択
> assign letter=a # ドライブレターを割り当て(いまどきFDドライブがついたPCを使っている場合はH:あたりに割り当てる)
> exit

--- DiskPart ここまで ---

> mkdir A:\EFI\Microsoft\Boot                            # ブートローダーを格納するディレクトリを作る
> xcopy /s C:\Windows\Boot\EFI\*.* G:\EFI\Microsoft\Boot # ブートローダーの基本データをコピー
> cd G:\EFI\Microsoft\Boot                               # ブートローダーのディレクトリに移動
> bcdedit /createstore BCD
> bcdedit /store BCD  /create {bootmgr} /d "Windows Boot Manager"
> bcdedit /store BCD /create /d "Windows 10" /application osloader # ここでGUID(UUID)が表示される。選択して右クリックでコピー
> bcdedit /store BCD /set {bootmgr} default {<GUIDをここに挿入>}
> bcdedit /store BCD /set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi
> bcdedit /store BCD /set {default} device partition=c:
> bcdedit /store BCD /set {default} osdevice partition=c:
> bcdedit /store BCD /set {default} path \Windows\System32\winload.efi
> bcdedit /store BCD /set {default} systemroot \Windows
> exit # 終了

起動確認

BIOS(UEFI?)の起動メニューを表示してWindows Boot Managerを選択して起動を実行する。

GRUBの設定

無事起動が確認できたらLinuxに戻る。
以下を実行。

$ sudo grub-mkconfig # 30_os_proberあたりを見てWidows Boot Managerが認識されていることを確認する。
$ sudo grub-mkconfig -o /boot/grub/grub.cfg # 設定ファイルを書き込み

最終確認

再起動してLinux、Windows両方を起動できることを確認する。

参考