ふるつき

私は素直に思ったことを書いてるけど、上から目線だって言われる

すぐWindows Boot Loader を吹き飛ばす

ラップトップにしてもデスクトップにしても、そんなにたくさんマシンを持っているわけではないので一つのラップトップを常用しているわけです。基本的にはLinux/Unixの世界で生きて行きたいんだけど(今は Arch Linux) Office とか VS とか HSP とかを使いたくなるとき、あるいはゲームをしたいときなんかはやはり Windows に頼らざるを得ないわけで、結果としてデュアルブートをやっています。

デュアルブートの話をすると必ずといってよいほど、VirtualBoxVMWareでの仮想化やWSLを持ち出されるのですが、私のマシンはメモリもそんなにないし*1、それよりも HDD だしで仮想化ではちょっと遅すぎるかなという感じだし、 WSL がしたいわけじゃなくて LSW がしたいわけです。Windows で i3WM が動くなら考える。


そのうえ、私はよく環境をぶち壊します。多くの理由としては「起動が遅くなってきた気がするからお掃除」です。こういうときArchを再インストールするんですが*2、必ずといってよいほど Windowsブートローダを吹き飛ばしてWindowsを起動できなくなります。今日はこれの復旧の話。

grub で Arch linuxWindows の両方を起動できるようになることを目標にしてます。

以下に手順を箇条書き。いろんなサイトの情報を集めたやつです。ちなみに私のマシンは UEFI 対応の64bit ラップトップで、GPT で *** されています*3

  1. 他のWindowsマシンでWindowsのインストールUSBを作ります。ISOを落としてきてddとかで焼いたやつでうまく行ったためしがない。
  2. Windowsを起動するとアップグレードするかクリーンインストールするか的な Yes/No ダイアログが出ますがクリーンインストールの方を選択します(おそらく「いいえ」の方)。
  3. 「コンピュータの修復」的な選択肢が左下に生えるのでこれをクリックします。「復旧」っぽい選択肢に進むと「コマンドプロンプト」が現れるのでこれをやります。
  4. こんな感じのコマンドで
> diskpart
DISK> list vol
いろいろ出る。私はEFIのボリュームは 100MB ということにしているのでそれを目印にしています。
DISK> sel vol 4
DISK> assign letter=G:    # かぶらなければ何でもいい
DISK> exit
> cd /d G:\EFI\  # 本来はここに Microsoft ってディレクトリがあるが当然ない
> bootrec /Rebuildbcd
> bcdboot D:\Windows /s G: /f ALL  /l ja-JP

bootrec にはそれなりに時間がかかり、 G:\EFI\Microsoft\Boot\BCD が作られます。これに満足して終わってはいけない。次の bcdboot もしっかり実行しておいてください。当然、これの引数のドライブレターは各自の環境に合わせること。

  1. exit を何回かやってPCの電源を切り、つけなおします。多分Windowsが調子にのってWindows Boot loader がデフォルトで起動されるようになってしまったので、起動オプションから 「EFIファイルで起動」みたいなのを見つけてきて grub のファイルから Arch を起動します。
  2. arch で sudo os-prober として Windows が見つかることを確認したら、 grub の設定をもう一回やるというか、つまり↓をやります。
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub
# grub-mkconfig -o /boot/grub/grub.cfg

例によって --efi-directory なんかは各自の設定に合わせてください。ここまでやると grub のエントリに Windows Boot Loader が追加されるはずです。

  1. PCを再起動して BIOS/UEFI の設定で Windows Boot Loader よりも grub が優先的に起動されるようにします。

ここまでできたら多分OK、ひとしごとおしまい。

*1:8GBです。今の人権ラインは16GBだな?

*2:他に良い方法があれば教えてください

*3:ここに入る文字列がわからない