読者です 読者をやめる 読者になる 読者になる

opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

UEFIでWindowsとArchLinuxのデュアルブートをやってみたよ

1年間貯金したお金でようやく新しいPCを組むことができた。今までは全部完成品を買っていたけど今回が初めての自作。メモリを間違えてDDR3を買うというトラブルがあったのは内緒。(もっと目立つように書いててほしいものだ。まあ誰が悪いって自分が悪いが...)
今日はそんなPCにWindowsとArchLinuxをデュアルブートした話。タイトルの通り完全にUEFIでどちらもブートした。間違えたところや悩んだところだけ大まかにメモする。

マザボASUS H170M-PLUSを使った(参考までに)。

マザボUEFI BIOSの設定について

この設定についてはマザボによって異なるので一概にこうとは言えないが、ポイントとしては

  • セキュアブートをOFF
  • CSMの設定でUEFIのみで起動するようにする

ArchLinuxのInstall ISOもそうだが、最近のWindowsはマシンがUEFI対応ならUEFIで起動・インストールしようとする。CSMの設定によっては旧来のBISO式のセットアップが優先され、それで起動してしまうことがあるのでそうならないように注意。それでインストールしてしまった場合、再インストールする以外にUEFI方式に変換する方法はないようだ。

Windowsをセットアップ

きちんとUEFI形式でWindowsをセットアップする。パーミッションを分ける画面でESPなどのパーミッションが作られないようであればレガシーモードで起動していると思われるのでUEFI BIOSの設定を見直す必要がある。

インストールは通常の手順通り行うが、デュアルブートのためのもう一方のOSが入るストレージ分は容量を開けておくと良い。

また、セットアップ後にすぐにWindows認証せず、デュアルブート環境が完全に構築されてからWindows認証を行うことをおすすめする。Windows認証には回数に上限があるようなので、何度も認証するようなことになれば自動認証できなくなり、電話するしかなくなる。(昔WindowsXPを何度も再インストールしてその状態になったことがある)

ArchLinuxのセットアップ

ArchLinuxのセットアップは概ね通常の手順通りで良い。ただしブートローダにはsystemd-bootと呼ばれる標準搭載のものを使うと良い。grubでもできなくはないが、こちらのほうが圧倒的に簡単な気がする。systemd-bootは標準で入っているので最近のisoファイルを利用しているならば追加でインストールする必要はない。また、"/boot"はESPパーティションをマウントするべき。

$ mount /dev/sdaX /mnt/boot # ただし/dev/sdaXはESP

systemd-bootの詳細はArchWikiを参照

systemd-bootは書いているようにWindowsUEFIのBoot Managerを自動で発見し認識するようなので、先にWindowsを入れていれば特に設定をしなくてもWindowsを起動できる。また、archlinuxのエントリーはデフォルトではないので手動で書く必要がある。

systemd-bootのストレージへのインストールは次のようにする。

$ bootctl --path=/boot install

これ1つですべてインストールができる(設定ができるとは言っていない)
efibootmgrで確認すればわかるが、優先順位もsystemd-bootが最優先に自動的に変更される。

次はArchWikiにもあるように"$esp/loader/loader.conf"を設定する。

default archlinux
timeout 3

今回はデュアルブートが前提なので、ブートするOSの選択肢を出すためにtimeoutを設定する。また、デフォルトは初期状態では適当な記号が入っているが上のようにarchlinuxとした。

続いて、"$esp/loader/entries/archlinux.conf"を作成して以下のように記述する。以下は一例なのでまるまるコピーしても動かない。
また、ファイル名が先ほどのloader.confのdefaultで指定される名前になるので、ファイル名とdefaultの値は一致させておく。

title          Arch Linux
linux          /vmlinuz-linux
initrd         /initramfs-linux.img
options        root=PARTUUID=*********************** rw

アスタリスクのところは以下のコマンドで調べる。

$ blkid -s PARTUUID -o value /dev/sdaX # /dev/sdaXはルートパーティション

うちの環境はルートパーティションの暗号化を行ったので、optionsは更に以下のようになった。

options cryptdevice=PARTUUID=<PARTUUID>:<mapped-name> root=UUID=<luks-UUID> quiet rw

この辺はすべてArchWikiの抜粋だが、少しわかりにくかったので追記しておく。 まず、上のPARTUUIDは先ほどのblkidコマンドのようにすることで調べることができる。これは純粋に"/dev/sdaX"のように暗号化済みの直のルートパーティションを指定する。
次の"root=UUID...."のUUIDはwikiにもあるように「復号化済み」すなわち/dev/mapper以下に配置されるようなスペシャルファイルのUUIDを記述する。つまり以下のようなコマンドで調べる。

$ blkid -s UUID -o value /dev/mapper/hogehoge

hogehogeは人によって異なる。ルートパーティションのディスクを暗号化する場合は、mkinitcpio.confの設定も行う必要があるが、これはwiki通りで悩まずできるので割愛する。

それと、今回のPCは全部SSDで構成しているのでArchLinuxの場合は手動でTRIMを有効化したりする必要がある。しなくても動くけどSSDを傷めつけることになると思うので入れたほうがいい。

終わり

再起動後にメニューが表示され、WindowsとArchLinuxの両方が起動できることが確認できたら終了となる。
ここまでできて初めてWindowsの認証やドライバのインストールをするのが多分一番効率がよくて安全だと思う。

Firefox ブラウザ無料ダウンロード