Arch Linuxとsystemd-bootでデュアルブート

systemd-bootでArch Linuxを2つ、カーネルを分けて起動させる方法と記録。

早い話がEFIパーティション/boot にバインドマウントさせるだけなのでArch Wikiを見たほうが正確です。ソース情報はこちら。

EFI システムパーティション - ArchWiki

この方法を使うと最初にインストールしたArchがバインドマウントを使っていなくても、新しくインストールするArchでバインドマウントを使えば分けられるので中々いいです(まだカーネルのアップデートとかはしてないのでわからないところもありますが...)。

インストール前の状態

  • Arch Linuxがインストール済
  • systemd-bootを使っている
  • 追加でインストールするためのパーティションは分割済

インストール手順

基本的には普通のArchインストールの手順に従います。

uryoya.hatenablog.com

この記事の「パーティションのマウント」の箇所を以下の手順に変更。

# mount /dev/sdX /mnt  # Xはルートシステムを入れるパーティションのもの
# mkdir /mnt/boot
# mkdir /mnt/esp
# mount /dev/sdY /mnt/esp  # EFIシステムパーティション。
# mkdir /mnt/esp/EFI/arch # 「arch」は任意の名前でOK。ここを後で `/boot` にバインドマウントする。

ここからさらに「システムの設定-chroot」まで進めたら、 /boot の中にインストールされたものを全て /esp/EFI/arch に移動する。

mv /mnt/boot/* /mnt/esp/EFI/arch/

そしてバインドマウントをする。

# mount --bind /esp/EFI/arch/ /boot

以下を /etc/fstab に追加してバインドマウントを永続化。

/esp/EFI/arch /boot none defaults,bind 0 0

後は普通の手順でインストールを続けます。最後にブートローダのインストールが待ち構えていますが、既にsystemd-bootは有効になっているので今インストールしたイメージを起動するための設定ファイルを追加します。

/boot/loader/entries/<filename>.conf を編集。 <filename> は任意。バインドマウントするために作ったディレクトリと同名にするのが無難?

title    Arch Linux
linux   /EFI/arch/vmlinuz-linux
initrd  /EFI/arch/intel-ucode.img
initrd  /EFI/arch/initramfs-linux.img
options root=PARTUUID=[PARTUUID] rw

後はchroot環境から抜けて、マウントを外して再起動すればEFIのメニューに新しいエンドポイントが追加されてるはず。