「Systemd-boot」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(文字列「http://www.freedesktop.org/」を「https://www.freedesktop.org/」に置換)
(同期)
3行目: 3行目:
 
[[de:Gummiboot]]
 
[[de:Gummiboot]]
 
[[en:Systemd-boot]]
 
[[en:Systemd-boot]]
[[es:Gummiboot]]
+
[[es:Systemd-boot]]
 
[[ru:Systemd-boot]]
 
[[ru:Systemd-boot]]
 
[[zh-hans:Systemd-boot]]
 
[[zh-hans:Systemd-boot]]
9行目: 9行目:
 
{{Related|Arch ブートプロセス}}
 
{{Related|Arch ブートプロセス}}
 
{{Related|ブートローダー}}
 
{{Related|ブートローダー}}
  +
{{Related|セキュアブート}}
 
{{Related|Unified Extensible Firmware Interface}}
 
{{Related|Unified Extensible Firmware Interface}}
 
{{Related articles end}}
 
{{Related articles end}}
15行目: 16行目:
 
systemd-boot は簡単に設定することができ、Linux カーネルの [[EFISTUB]] や UEFI シェル、grub.efi などの EFI 実行可能ファイルだけを起動できます。
 
systemd-boot は簡単に設定することができ、Linux カーネルの [[EFISTUB]] や UEFI シェル、grub.efi などの EFI 実行可能ファイルだけを起動できます。
   
  +
== インストール ==
{{Warning|systemd-boot は EFISTUB カーネルのブートメニューを提供します。{{Bug|33745}} にあるように EFISTUB カーネルの起動に問題が起こる場合は、[[GRUB]] や [[Syslinux]]、または [[ブートローダー#ELILO|ELILO]] といった EFISTUB を使用しないブートローダーを使ってください。}}
 
   
  +
=== EFI ブートマネージャのインストール ===
{{Note|この記事では [[UEFI#EFI System Partition|EFI System Partition]] (ESP) のマウントポイントを {{ic|$esp}} で示します。}}
 
   
  +
''systemd-boot'' の EFI ブートマネージャをインストールする場合、まず UEFI モードでシステムが起動しているかどうか、[[Unified Extensible Firmware Interface#UEFI 変数|UEFI 変数]]が利用できるかどうか確かめてください。{{ic|efivar --list}} コマンドを実行することでチェックできます。
== インストール ==
 
   
  +
''systemd-boot'' は [[EFI システムパーティション]] (ESP) からしか [[EFISTUB]] カーネルをロードできません。カーネルを最新状態に保つために、ESP は {{ic|/boot}} にマウントすることが'''推奨'''されています。ESP を {{ic|/boot}} にマウントしなかった場合、カーネルと initramfs を ESP にコピーする必要があります。詳しくは [[EFISTUB#他の ESP マウントポイント]]を見てください。
=== EFI ブート ===
 
まず、[[Unified_Extensible_Firmware_Interface#UEFI 変数のサポートを正しく動作させるための必要条件|EFI 変数にアクセスできるかチェック]]して UEFI モードで起動していることを確認してください。また、EFI System Partition が正しくマウントされて、カーネルと initramfs が ESP にコピーされていないと、systemd-boot は他のパーティションから EFI バイナリをロードすることができません。以上のことから systemd-boot を使う時は ESP を {{ic|/boot}} にマウントすることを強く推奨します。ESP を {{ic|/boot}} 以外に作りたい場合、[[#アップデート]] を見て下さい。
 
   
  +
このページでは ESP のマウントポイントを {{ic|''esp''}} として表します (大抵の場合は {{ic|/boot}} です)。
以下のコマンドを実行することで systemd-boot のバイナリがあなたの EFI System Partition にコピーされ、EFI Boot Manager によってロードされるデフォルトの EFI アプリケーション (デフォルトブートエントリ) として systemd-boot が追加されます。UEFI モードで起動していない場合、また、EFI 変数にアクセスできないときは、ブートエントリの作成は失敗します。ただし systemd-boot のバイナリは ESP 内にある EFI バイナリのデフォルトの配置場所 (x64 環境では {{ic|$esp//EFI/systemd/systemd-bootx64.efi}} あるいは {{ic|$esp/EFI/Boot/BOOTX64.EFI}}) にコピーされるので systemd-boot を起動すること自体は可能です。
 
   
  +
ESP が {{ic|''esp''}} にマウントされているとして、{{man|1|bootctl}} を使用して EFI システムパーティションに ''systemd-boot'' をインストールします:
# bootctl --path=''$esp'' install
 
  +
# bootctl --path=''esp'' install
   
  +
上記のコマンドで ''systemd-boot'' ブートローダーが EFI パーティションにコピーされます。x64 アーキテクチャの場合は2つの同じバイナリ {{ic|''esp''/EFI/systemd/systemd-bootx64.efi}} と {{ic|''esp''/EFI/Boot/BOOTX64.EFI}} が ESP に転送されます。そして EFI ブートマネージャによってロードされるデフォルトの EFI アプリケーション (デフォルトブートエントリ) として ''systemd-boot'' が設定されます。
=== レガシーブート ===
 
{{Warning|こちらの起動方法は推奨されません。}}
 
レガシーな OS を起動したいときも systemd-boot をインストールすることは可能です。ただし、起動時に systemd-boot の EFI ファイルを実行するようにファームウェアを設定する必要があります:
 
* EFI シェルを使用する。
 
* ファームウェアのインターフェイスから起動時にロードされる EFI ファイルを設定する。
 
{{Note|Dell の Latitude シリーズなどでは、EFI ブートを設定するために必要な全てがファームウェアのインターフェイスに揃っており、EFI シェルではコンピュータの ROM に書き込みを行えません。}}
 
設定できる場合、インストールは簡単です: EFI シェルやファームウェアの設定インターフェイスを開いて、マシンのデフォルトの EFI ファイルを {{ic|$esp/EFI/systemd/systemd-bootx64.efi}} (i686 環境の場合 {{ic|systemd-bootia32.efi}}) に変更してください。
 
   
  +
インストールしたら、[[#設定]]セクションに進んで ''systemd-boot'' を正しく機能させるために必要なブートローダーを追加してください。
=== アップデート ===
 
   
  +
=== EFI ブートマネージャの更新 ===
systemd-boot (bootctl(1), systemd-efi-boot-generator(8)) はあなたの EFI System Partition が {{ic|/boot}} にマウントされていると予め事前設定されています。新しいパッケージがリリースされたら {{ic|post_install}} スクリプトによって自動的にアップデートされていた、昔の ''gummiboot'' パッケージと違って、systemd-boot では手動でアップデートするようになっています:
 
   
  +
''systemd-boot'' のバージョンが新しくなった場合、ユーザーがブートマネージャを更新する必要があります。手動で行ったり、もしくは pacman フックを使って自動で更新できます。
# bootctl update
 
   
  +
==== 手動で更新 ====
ESP が {{ic|/boot}} にマウントされていない場合、{{ic|1=--path=}} オプションで指定します。例:
 
   
  +
''bootctl'' を使用して ''systemd-boot'' をアップデートしてください。{{ic|path}} パラメータを指定しなかった場合 {{ic|/efi}}, {{ic|/boot}}, {{ic|/boot/efi}} がチェックされます。
# bootctl --path=''$esp'' update
 
   
  +
# bootctl update
== 設定 ==
 
   
  +
ESP を別の場所にマウントしている場合、{{ic|path}} オプションを以下のように指定します:
=== 基本設定 ===
 
   
  +
# bootctl --path=''esp'' update
基本的な設定は {{ic|/boot/loader/loader.conf}} に記述します、3つの設定オプションが使えます:
 
   
  +
{{Note|''gummiboot'' から移行する場合、上記のコマンドを使用してからパッケージを削除してください。パッケージを既に削除している場合、{{ic|1=bootctl --path=''esp'' install}} を実行してください。}}
* {{ic|default}} – 選択するデフォルトエントリ ({{ic|.conf}} を付けない); {{ic|arch-*}} のようにワイルドカードを使うことができます
 
   
  +
==== 自動で更新 ====
* {{ic|timeout}} – メニューのタイムアウト秒数。この値が設定されていない場合、起動中にスペースキーを押した時だけメニューが表示されます。
 
   
  +
{{AUR|systemd-boot-pacman-hook}} パッケージには上記のアップデートを自動化する [[Pacman フック]]が含まれています。パッケージを[[インストール]]すると {{Pkg|systemd}} パッケージをアップグレードしたときに毎回フックが起動するようになります。また、パッケージをインストールする代わりに、{{ic|/etc/pacman.d/hooks/}} ディレクトリに以下の pacman フックを作成することでも自動更新できます:
* {{ic|editor}} - カーネルパラメータの編集を可能にするかどうか設定。{{ic|1}} (デフォルト) は可能になり、{{ic|0}} は無効になります。{{ic|1=init=/bin/bash}} を加えることで root パスワードを回避して root 権限を得ることが出来てしまうため、このオプションは {{ic|0}} に設定することが強く推奨されています。
 
   
  +
{{hc|/etc/pacman.d/hooks/systemd-boot.hook|2=
例:
 
  +
[Trigger]
  +
Type = Package
  +
Operation = Upgrade
  +
Target = systemd
   
  +
[Action]
{{hc|$esp/loader/loader.conf|
 
  +
Description = Updating systemd-boot
default arch
 
  +
When = PostTransaction
timeout 4
 
  +
Exec = /usr/bin/bootctl update
editor 0
 
 
}}
 
}}
   
  +
== 設定 ==
最初の2つのオプションは両方ともブートメニューで変更するこができ、EFI 変数として保存されます。
 
   
  +
=== ローダー設定 ===
{{Note|タイムアウトが設定されてなかった場合、デフォルトのエントリがすぐさま起動します。}}
 
   
  +
ローダーの設定は {{ic|''esp''/loader/loader.conf}} ファイルに保存され、以下のオプションで設定します:
=== ブートエントリの追加 ===
 
{{Note|bootctl は自動的に "Windows Boot Manager" ({{ic|\EFI\Microsoft\Boot\Bootmgfw.efi}}), "EFI Shell" ({{ic|\shellx64.efi}}), "EFI Default Loader" ({{ic|\EFI\Boot\bootx64.efi}}) をチェックします。これらが検出された場合、自動的に適切なエントリが生成されます。ただし、([[rEFInd]] など) 他の EFI アプリケーションは自動検出されないため、カーネルを起動するには、手動で設定してエントリを作成する必要があります。Windows とデュアルブートする場合、Windows のデフォルトオプションである[[Windows と Arch のデュアルブート#高速スタートアップ|高速スタートアップ]]を無効にすることを強く推奨します。}}
 
   
  +
* {{ic|default}} – [[#ローダーの追加]]で定義されるデフォルト選択エントリ。{{ic|.conf}} 拡張子は付けず、{{ic|arch-*}} のようにワイルドカードを使うことができます。
{{Tip|{{ic|1=blkid -s PARTUUID -o value /dev/sdxY}} コマンドを使うことで root パーティションの PARTUUID を確認できます。'x' はデバイス文字、'Y' はパーティション番号に置き換えて下さい。確認するのは root パーティションだけで大丈夫です。$esp は確認する必要がありません。}}
 
  +
* {{ic|timeout}} – デフォルトエントリが起動するまでのメニューのタイムアウト秒数。この値が設定されていない場合、起動中に {{ic|Space}} キーを押した時だけメニューが表示されます。
  +
* {{ic|editor}} - カーネルパラメータの編集を可能にするかどうかの設定。{{ic|yes}} (デフォルト) は可能になり、{{ic|no}} は無効になります。{{ic|1=init=/bin/bash}} を加えることで root パスワードを回避して root 権限を得ることが出来てしまうため、このオプションは {{ic|no}} に設定することが強く推奨されています。
  +
* {{ic|auto-entries}} – {{ic|1}} (デフォルト) に設定した場合は Windows, EFI Shell, デフォルトローダーの自動エントリを表示し、{{ic|0}} の場合は表示しません。
  +
* {{ic|auto-firmware}} – {{ic|1}} (デフォルト) に設定した場合、UEFI ファームウェア設定を起動するエントリを表示し、{{ic|0}} に設定した場合は表示しません。
  +
* {{ic|console-mode}} – UEFI コンソールモードを変更します: {{ic|0}} の場合は 80x25, {{ic|1}} の場合は 80x50, {{ic|2}} 以上の場合はデバイスファームウェアによって提供されている非標準モード。{{ic|auto}} は適切なモードを自動選択。{{ic|max}} は一番解像度が高いモード。{{ic|keep}} (デフォルト) はファームウェアが選択したモードを維持します。
   
  +
利用可能なオプションの完全な一覧は {{man|5|loader.conf}} を参照。
bootctl は {{ic|$esp/loader/entries/*.conf}} にあるブートメニューのアイテムを検索します – 1つのファイルに1つのブートエントリを記述します。利用できるオプションは:
 
   
  +
設定例:
* {{ic|title}} – オペレーティングシステムの名前。'''必須。'''
 
   
  +
{{hc|''esp''/loader/loader.conf|
* {{ic|version}} – カーネルバージョン、同じ title のエントリが複数存在する場合にのみ表示されます。任意。
 
  +
default arch
 
  +
timeout 4
* {{ic|machine-id}} – {{ic|/etc/machine-id}} のマシン識別子、title と version が同じエントリが複数存在する場合にのみ表示されます。任意。
 
  +
editor no
 
* {{ic|efi}} – 起動する EFI プログラム、ESP ({{ic|/boot}}) からの相対パス; 例: {{ic|/vmlinuz-linux}}。このオプションか {{ic|linux}} (下を参照) のどちらか一方が'''必須'''です。
 
 
* {{ic|options}} – EFI プログラムに渡すコマンドラインオプション。任意ですが、Linux を起動する場合 {{ic|1=initrd=''efipath''}} と {{ic|1=root=''dev''}} が最低限必要になります。
 
 
Linux では、{{ic|linux ''path-to-vmlinuz''}} と {{ic|initrd ''path-to-initramfs''}} を指定することができます。この値は自動で {{ic|efi ''path''}} と {{ic|1=options initrd=''path''}} に翻訳されます – この文法は利便性のためにサポートされており機能に違いはありません。
 
 
==== 標準的な root インストール ====
 
 
LVM や LUKS がない root パーティションを使用するエントリの例:
 
 
{{hc|/boot/loader/entries/arch.conf|2=
 
title Arch Linux
 
linux /vmlinuz-linux
 
initrd /initramfs-linux.img
 
options root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660 rw
 
 
}}
 
}}
   
  +
{{Tip|
上の例にある PARTUUID/PARTLABEL は GPT パーティションを識別しています。ファイルシステムを識別する UUID/LABEL とは異なっていることに注意してください。PARTUUID/PARTLABEL には他のファイルシステムでパーティションをフォーマットしなおしても値が変わらないという利点があります。またパーティションにファイルシステムがない (もしくは LABEL をサポートしていない LUKS を使っている) 場合などにも有用です。
 
  +
* {{ic|default}} と {{ic|timeout}} はブートメニューで変更することができ、変更した場合は EFI 変数として保存されます。上記のオプションよりも優先して設定されます。
  +
* 基本的なローダーの設定ファイルは {{ic|/usr/share/systemd/bootctl/loader.conf}} に存在します。}}
   
==== LVM root インスト ====
+
=== ローダの追加 ===
   
  +
''bootctl'' は {{ic|''esp''/loader/entries/*.conf}} からブートメニューのアイテムを検索します – 各ファイルにそれぞれひとつだけローダーを記述してください。利用可能なオプション:
{{Warning|LVM の外に {{ic|/boot}} ファイルシステムを分割しないと systemd-boot を使用することはできません。}}
 
   
  +
* {{ic|title}} – オペレーティングシステムの名前。'''必須。'''
[[LVM|論理ボリュームマネージャ]]を使う root パーティションのエントリ例:
 
  +
* {{ic|version}} – カーネルバージョン、同じ title のエントリが複数存在する場合にのみ表示されます。任意。
  +
* {{ic|machine-id}} – {{ic|/etc/machine-id}} のマシン識別子、title と version が同じエントリが複数存在する場合にのみ表示されます。任意。
  +
* {{ic|efi}} – 起動する EFI プログラム、ESP ({{ic|/boot}}) からの相対パス。例: {{ic|/vmlinuz-linux}}。このオプションか {{ic|linux}} (下を参照) のどちらか一方が'''必須'''です。
  +
* {{ic|options}} – EFI プログラムに渡すコマンドラインオプションまたは[[カーネルパラメータ]]。任意ですが、Linux を起動する場合 {{ic|1=initrd=''efipath''}} と {{ic|1=root=''dev''}} が最低限必要になります。
   
  +
Linux を起動する場合、{{ic|efi}} と {{ic|options}} を使う代わりに以下のオプションが使用できます:
{{hc|$esp/loader/entries/arch-lvm.conf|2=
 
  +
* {{ic|linux}} と {{ic|initrd}} で ESP の適切なファイルの相対パスを指定します。例: {{ic|/vmlinuz-linux}}。この値は自動で {{ic|efi ''path''}} と {{ic|1=options initrd=''path''}} に翻訳されます – この文法は利便性のためにサポートされており機能に違いはありません。
title Arch Linux (LVM)
 
linux /vmlinuz-linux
 
initrd /initramfs-linux.img
 
options root=/dev/mapper/<VolumeGroup-LogicalVolume> rw
 
}}
 
   
  +
''arch_os'' というラベルが付いたパーティションから Arch を起動して Intel CPU の[[マイクロコード]]をロードするローダーファイルの例:
{{ic|<VolumeGroup-LogicalVolume>}} は実際の VG や LV の名前に置き換えて下さい (例: {{ic|1=root=/dev/mapper/volgroup00-lvolroot}})。また、UUID を使うこともできます:
 
  +
{{hc|''esp''/loader/entries/arch.conf|2=
....
 
  +
title Arch Linux
options root=UUID=<UUID identifier> rw
 
  +
linux /vmlinuz-linux
  +
initrd /intel-ucode.img
  +
initrd /initramfs-linux.img
  +
options root=LABEL=''arch_os'' rw}}
   
  +
''bootctl'' は自動的に "Windows Boot Manager" ({{ic|/EFI/Microsoft/Boot/Bootmgfw.efi}}), "EFI Shell" ({{ic|/shellx64.efi}}), "EFI Default Loader" ({{ic|/EFI/BOOT/bootx64.efi}}) をチェックします。また、{{ic|/EFI/Linux}} にカーネルファイルが存在しないかもチェックされます。これらが検出された場合、自動的に適切なエントリが生成されます ({{ic|auto-windows}}, {{ic|auto-efi-shell}}, {{ic|auto-efi-default}})。これらのエントリを手動でローダー設定する必要はありません。ただし、([[rEFInd]] など) 他の EFI アプリケーションは自動検出されないため、Linux カーネルを起動するには、手動で設定してエントリを作成する必要があります。
LVM や LUKS がない root パーティションで使っていた {{ic|1=root='''PARTUUID'''=}} の代わりに {{ic|1=root='''UUID'''=}} を使っていることに注意してください。
 
   
  +
{{Note|
==== 暗号化 root インストール ====
 
  +
* Windows とデュアルブートする場合、Windows のデフォルトオプションである[[Windows と Arch のデュアルブート#高速スタートアップ|高速スタートアップ]]を無効にすることを強く推奨します。
 
  +
* 必要な場合は {{ic|initrd}} で Intel のマイクロコードをロードしてください。例は[[マイクロコード#systemd-boot]] を参照。
root パーティションを暗号化している場合の設定ファイルの例 ([[Dm-crypt|DM-Crypt / LUKS]]):
 
  +
* {{ic|1=blkid -s PARTUUID -o value /dev/sd''xY''}} コマンドを使うことで root パーティションの PARTUUID を確認できます。{{ic|''x''}} はデバイス文字、{{ic|''Y''}} はパーティション番号に置き換えて下さい。確認するのは root パーティションだけで大丈夫です。{{ic|''esp''}} は確認する必要がありません。
 
{{hc|$esp/loader/entries/arch-encrypted.conf|2=
 
title Arch Linux Encrypted
 
linux /vmlinuz-linux
 
initrd /initramfs-linux.img
 
options cryptdevice=UUID=<UUID>:<mapped-name> root=UUID=<luks-UUID> quiet rw
 
 
}}
 
}}
   
  +
{{Tip|
上記の例では UUID を使っています。必要であれば、PARTUUID で UUID を置き換えることもできます。{{ic|<luks-UUID>}} は暗号化を解除した後の実際の root ファイルシステムの UUID を示しています ({{Ic|/dev/mapper/<mapped-name>}})。デバイスの UUID ではありません。[[Dm-crypt/システム設定#ブートローダー]]を見て下さい。
 
  +
* 設定済みのブートエントリは {{ic|bootctl list}} コマンドで確認できます。
 
  +
* サンプルエントリファイルが {{ic|/usr/share/systemd/bootctl/arch.conf}} に存在します。
LVM を使用する場合、cryptdevice 行は以下のようになります:
 
  +
* [[LVM]], [[LUKS]], [[dm-crypt]] などで必要な[[カーネルパラメータ]]についてはそれぞれのページを確認してください。
{{hc|''$esp''/loader/entries/arch-encrypted-lvm.conf|2=
 
title Arch Linux Encrypted LVM
 
linux /vmlinuz-linux
 
initrd /initramfs-linux.img
 
options cryptdevice=UUID=<UUID>:MyVolGroup root=/dev/mapper/MyVolGroup-MyVolRoot quiet rw
 
 
}}
 
}}
 
{{ic|\EFI\arch\grub.efi}} など他の EFI プログラムを追加することもできます。
 
 
==== btrfs サブボリューム root インストール ====
 
 
[[btrfs]] のサブボリュームを root として起動する場合、{{ic|options}} 行を {{ic|rootflags<nowiki>=</nowiki>subvol<nowiki>=</nowiki><root subvolume>}} に変更してください。以下の例では、'ROOT' という名前の btrfs のサブボリュームを root としてマウントしています (例: {{ic|mount -o subvol<nowiki>=</nowiki>ROOT /dev/sdxY /mnt}}):
 
 
{{hc|$esp/loader/entries/arch-btrfs-subvol.conf|2=
 
title Arch Linux
 
linux /vmlinuz-linux
 
initrd /initramfs-linux.img
 
options root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660 rw rootflags<nowiki>=</nowiki>subvol<nowiki>=</nowiki>ROOT
 
}}
 
 
以上のように設定していないと次のエラーメッセージが表示されます: {{ic|ERROR: Root device mounted successfully, but /sbin/init does not exist.}}。
 
   
 
==== EFI シェルや他の EFI アプリ ====
 
==== EFI シェルや他の EFI アプリ ====
161行目: 131行目:
 
EFI シェルなどの EFI アプリケーションを ESP にインストールしている場合、以下のスニペットを使うことができます:
 
EFI シェルなどの EFI アプリケーションを ESP にインストールしている場合、以下のスニペットを使うことができます:
   
{{hc|$esp/loader/entries/uefi-shell-v1-x86_64.conf|2=
+
{{hc|''esp''/loader/entries/uefi-shell-v1-x86_64.conf|2=
 
title UEFI Shell x86_64 v1
 
title UEFI Shell x86_64 v1
 
efi /EFI/shellx64_v1.efi
 
efi /EFI/shellx64_v1.efi
 
}}
 
}}
   
{{hc|$esp/loader/entries/uefi-shell-v2-x86_64.conf|2=
+
{{hc|''esp''/loader/entries/uefi-shell-v2-x86_64.conf|2=
 
title UEFI Shell x86_64 v2
 
title UEFI Shell x86_64 v2
 
efi /EFI/shellx64_v2.efi
 
efi /EFI/shellx64_v2.efi
 
}}
 
}}
  +
  +
=== /EFI/Linux のカーネルの準備 ===
  +
  +
カーネル・初期 RAM ディスク (initrd)・カーネルコマンドライン・{{ic|/etc/os-release}} をひとつのファイルにまとめた特殊なカーネルファイルとして ''/EFI/Linux'' が検索されます。セキュアブートするために簡単にファイルに署名することができます。
  +
  +
{{Note|{{ic|systemd-boot}} は ID を生成して自動的にエントリを追加するために {{ic|os-release}} ファイルに {{ic|VERSION_ID}} または {{ic|BUILD_ID}} のどちらかを必要としますが、Arch の {{ic|os-release}} には含まれていません。どちらかを記述したコピーを作成するか、スクリプトで自動的に生成するようにしてください}}
  +
  +
使用したいカーネルコマンドラインをファイルに記述して以下のようにバンドルファイルを作成してください:
  +
  +
{{hc|Kernel packaging command:|2=objcopy \
  +
--add-section .osrel="/usr/lib/os-release" --change-section-vma .osrel=0x20000 \
  +
--add-section .cmdline="kernel-command-line.txt" --change-section-vma .cmdline=0x30000 \
  +
--add-section .linux="vmlinuz-file" --change-section-vma .linux=0x40000 \
  +
--add-section .initrd="initrd-file" --change-section-vma .initrd=0x3000000 \
  +
"/usr/lib/systemd/boot/efi/linuxx64.efi.stub" "''linux''.efi"}}
  +
  +
生成した {{ic|''linux''.efi}} ファイルには任意で署名することができます。
  +
  +
{{ic|''linux''.efi}} は {{ic|''esp''/EFI/Linux}} にコピーしてください。
   
 
=== ハイバネーション ===
 
=== ハイバネーション ===
175行目: 164行目:
 
[[サスペンドとハイバネート]]の記事を参照してください。
 
[[サスペンドとハイバネート]]の記事を参照してください。
   
  +
=== パスワードで保護されたカーネルパラメータエディタ ===
== ブートメニュー ==
 
   
  +
{{ic|password}} 設定オプションをサポートしている {{AUR|systemd-boot-password}} をインストールすることもできます。{{ic|sbpctl generate}} を使ってオプションで指定する値を生成できます。
=== キー一覧 ===
 
  +
  +
''systemd-boot-password'' は以下のコマンドでインストールしてください:
  +
  +
{{bc|1=# sbpctl install ''esp''}}
  +
  +
カーネルパラメータを編集する前にパスワードの入力が求められるようになります。
  +
  +
== ブートメニューのキー一覧 ==
   
 
メニューの中では以下のキーが使われます:
 
メニューの中では以下のキーが使われます:
200行目: 197行目:
 
== トラブルシューティング ==
 
== トラブルシューティング ==
   
==== efibootmgr を使って手ントリを追加する ====
+
=== BIOS モードで起後にイール ===
  +
  +
{{Warning|こちらの起動方法は推奨されません。}}
  +
  +
BIOS モードで OS を起動したいときも ''systemd-boot'' をインストールすることは可能です。ただし、起動時に ''systemd-boot'' の EFI ファイルを実行するようにファームウェアを設定する必要があります:
  +
* EFI シェルを使用する。
  +
* ファームウェアのインターフェイスから起動時にロードされる EFI ファイルを設定する。
  +
  +
設定できる場合、インストールは簡単です: EFI シェルやファームウェアの設定インターフェイスを開いて、マシンのデフォルトの EFI ファイルを {{ic|''esp''/EFI/systemd/systemd-bootx64.efi}} (32ビット環境の場合 {{ic|systemd-bootia32.efi}}) に変更してください。
  +
  +
{{Note|Dell の Latitude シリーズなどでは、EFI ブートを設定するために必要な全てがファームウェアのインターフェイスに揃っており、EFI シェルではコンピュータの ROM に書き込みを行えません。}}
  +
  +
=== efibootmgr を使って手動エントリを追加する ===
   
 
{{ic|bootctl install}} コマンドが失敗した場合、{{Pkg|efibootmgr}} ユーティリティを使って EFI ブートエントリを手動で作成することができます:
 
{{ic|bootctl install}} コマンドが失敗した場合、{{Pkg|efibootmgr}} ユーティリティを使って EFI ブートエントリを手動で作成することができます:
   
# efibootmgr -c -d /dev/sdX -p Y -l /EFI/systemd/systemd-bootx64.efi -L "Linux Boot Manager"
+
# efibootmgr -c -d /dev/sdX -p Y -l "\EFI\systemd\systemd-bootx64.efi" -L "Linux Boot Manager"
   
  +
{{ic|/dev/sdXY}} は [[EFI システムパーティション]]に置き換えてください。
=== Windows をアップグレードした後にメニューが表示されない ===
 
   
  +
{{Note|EFI イメージのパスでは区切り文字としてバックスラッシュ ({{ic|\}}) を使用します。}}
Windows 8 から Windows 8.1 にアップグレードした場合などに、ブートメニューが表示されなくなることがあります:
 
* Secure Boot (UEFI 設定) と Fast Startup (Windows の電源オプション設定) が両方とも無効になっていることを確認してください。
 
* Windows Boot Manager よりも Linux Boot Manager が UEFI で優先されていることを確認してください (Hard Drive Disk Priority などの UEFI 設定)。
 
   
  +
=== Windows をアップグレードした後にメニューが表示されない ===
{{Note|Windows 8.x 以上 (Windows 10 も含む) では、起動するたびにインストールした UEFI のエントリが上書きされてしまい、Windows が一番優先して起動されます。たとえ UEFI のファームウェアでブートの順番を変えたとしても、一度 Windows 10 を起動してしまえばそれで Windows が一番上に戻ります。マザーボードの 'Change Boot Option' キーが何なのか知っておいて下さい。}}
 
Windows 8.x 以上で、設定したブートの順番を守るようにさせたい場合、Windows のグループポリシーを入力して起動時にバッチファイル (.bat) を起動するようにしてください。Windows 上で以下を実行:
 
* 管理者権限でコマンドプロンプトを開いて下さい。そして {{ic|bcdedit /enum firmware}} と入力します。
 
* 説明に "Linux" と付いているファームウェアアプリケーションを探して下さい。例: "Linux Boot Manager"。
 
* 括弧も含めて Identifier をコピーします。例: {{ic|<nowiki>{31d0d5f4-22ad-11e5-b30b-806e6f6e6963}</nowiki>}}。
 
* gpedit から ローカルコンピュータポリシー-> コンピューターの構成-> Windows の設定-> スクリプト(スタートアップ/シャットダウン) を開いて "スタートアップ" を選択してください。"スタートアップのプロパティ" という名前のウィンドウが開きます。
 
* "スクリプト"タブの、追加ボタンを押して下さい。
 
* スクリプトに名前を付けます。例: {{ic|bootorder.bat}}。
 
* "スクリプトのパラメーター" には {{ic|<nowiki>bcdedit /set {fwbootmgr} DEFAULT {先にコピーした identifier}</nowiki>}} と入力します (例: {{ic|<nowiki>bcdedit /set {fwbootmgr} DEFAULT {31d0d5f4-22ad-11e5-b30b-806e6f6e6963}</nowiki>}})。
 
   
  +
[[Unified Extensible Firmware Interface#Windows によってブート順序が変わってしまう]]を見てください。
上記の設定が上手く行かない場合、Windows 環境のどこかに {{ic|<nowiki>bcdedit /set {fwbootmgr} DEFAULT {先にコピーした identifier}</nowiki>}} と記述したバッチファイルを作成して、gpedit から保存したファイルを参照してください。
 
   
 
== 参照 ==
 
== 参照 ==
   
 
* https://www.freedesktop.org/wiki/Software/systemd/systemd-boot/
 
* https://www.freedesktop.org/wiki/Software/systemd/systemd-boot/
  +
* https://github.com/systemd/systemd/tree/master/src/boot/efi

2018年7月11日 (水) 01:31時点における版

関連記事

systemd-boot (旧名 gummiboot) は設定済みの EFI イメージを実行できるシンプルな UEFI ブートマネージャです。デフォルトのエントリは設定したパターン (glob) または画面上のメニューで選択されます。systemd-boot は systemd 220-2 から systemd に同梱されるようになりました。

systemd-boot は簡単に設定することができ、Linux カーネルの EFISTUB や UEFI シェル、grub.efi などの EFI 実行可能ファイルだけを起動できます。

インストール

EFI ブートマネージャのインストール

systemd-boot の EFI ブートマネージャをインストールする場合、まず UEFI モードでシステムが起動しているかどうか、UEFI 変数が利用できるかどうか確かめてください。efivar --list コマンドを実行することでチェックできます。

systemd-bootEFI システムパーティション (ESP) からしか EFISTUB カーネルをロードできません。カーネルを最新状態に保つために、ESP は /boot にマウントすることが推奨されています。ESP を /boot にマウントしなかった場合、カーネルと initramfs を ESP にコピーする必要があります。詳しくは EFISTUB#他の ESP マウントポイントを見てください。

このページでは ESP のマウントポイントを esp として表します (大抵の場合は /boot です)。

ESP が esp にマウントされているとして、bootctl(1) を使用して EFI システムパーティションに systemd-boot をインストールします:

# bootctl --path=esp install

上記のコマンドで systemd-boot ブートローダーが EFI パーティションにコピーされます。x64 アーキテクチャの場合は2つの同じバイナリ esp/EFI/systemd/systemd-bootx64.efiesp/EFI/Boot/BOOTX64.EFI が ESP に転送されます。そして EFI ブートマネージャによってロードされるデフォルトの EFI アプリケーション (デフォルトブートエントリ) として systemd-boot が設定されます。

インストールしたら、#設定セクションに進んで systemd-boot を正しく機能させるために必要なブートローダーを追加してください。

EFI ブートマネージャの更新

systemd-boot のバージョンが新しくなった場合、ユーザーがブートマネージャを更新する必要があります。手動で行ったり、もしくは pacman フックを使って自動で更新できます。

手動で更新

bootctl を使用して systemd-boot をアップデートしてください。path パラメータを指定しなかった場合 /efi, /boot, /boot/efi がチェックされます。

# bootctl update

ESP を別の場所にマウントしている場合、path オプションを以下のように指定します:

# bootctl --path=esp update
ノート: gummiboot から移行する場合、上記のコマンドを使用してからパッケージを削除してください。パッケージを既に削除している場合、bootctl --path=esp install を実行してください。

自動で更新

systemd-boot-pacman-hookAUR パッケージには上記のアップデートを自動化する Pacman フックが含まれています。パッケージをインストールすると systemd パッケージをアップグレードしたときに毎回フックが起動するようになります。また、パッケージをインストールする代わりに、/etc/pacman.d/hooks/ ディレクトリに以下の pacman フックを作成することでも自動更新できます:

/etc/pacman.d/hooks/systemd-boot.hook
[Trigger]
Type = Package
Operation = Upgrade
Target = systemd

[Action]
Description = Updating systemd-boot
When = PostTransaction
Exec = /usr/bin/bootctl update

設定

ローダー設定

ローダーの設定は esp/loader/loader.conf ファイルに保存され、以下のオプションで設定します:

  • default#ローダーの追加で定義されるデフォルト選択エントリ。.conf 拡張子は付けず、arch-* のようにワイルドカードを使うことができます。
  • timeout – デフォルトエントリが起動するまでのメニューのタイムアウト秒数。この値が設定されていない場合、起動中に Space キーを押した時だけメニューが表示されます。
  • editor - カーネルパラメータの編集を可能にするかどうかの設定。yes (デフォルト) は可能になり、no は無効になります。init=/bin/bash を加えることで root パスワードを回避して root 権限を得ることが出来てしまうため、このオプションは no に設定することが強く推奨されています。
  • auto-entries1 (デフォルト) に設定した場合は Windows, EFI Shell, デフォルトローダーの自動エントリを表示し、0 の場合は表示しません。
  • auto-firmware1 (デフォルト) に設定した場合、UEFI ファームウェア設定を起動するエントリを表示し、0 に設定した場合は表示しません。
  • console-mode – UEFI コンソールモードを変更します: 0 の場合は 80x25, 1 の場合は 80x50, 2 以上の場合はデバイスファームウェアによって提供されている非標準モード。auto は適切なモードを自動選択。max は一番解像度が高いモード。keep (デフォルト) はファームウェアが選択したモードを維持します。

利用可能なオプションの完全な一覧は loader.conf(5) を参照。

設定例:

esp/loader/loader.conf
default  arch
timeout  4
editor   no
ヒント:
  • defaulttimeout はブートメニューで変更することができ、変更した場合は EFI 変数として保存されます。上記のオプションよりも優先して設定されます。
  • 基本的なローダーの設定ファイルは /usr/share/systemd/bootctl/loader.conf に存在します。

ローダーの追加

bootctlesp/loader/entries/*.conf からブートメニューのアイテムを検索します – 各ファイルにそれぞれひとつだけローダーを記述してください。利用可能なオプション:

  • title – オペレーティングシステムの名前。必須。
  • version – カーネルバージョン、同じ title のエントリが複数存在する場合にのみ表示されます。任意。
  • machine-id/etc/machine-id のマシン識別子、title と version が同じエントリが複数存在する場合にのみ表示されます。任意。
  • efi – 起動する EFI プログラム、ESP (/boot) からの相対パス。例: /vmlinuz-linux。このオプションか linux (下を参照) のどちらか一方が必須です。
  • options – EFI プログラムに渡すコマンドラインオプションまたはカーネルパラメータ。任意ですが、Linux を起動する場合 initrd=efipathroot=dev が最低限必要になります。

Linux を起動する場合、efioptions を使う代わりに以下のオプションが使用できます:

  • linuxinitrd で ESP の適切なファイルの相対パスを指定します。例: /vmlinuz-linux。この値は自動で efi pathoptions initrd=path に翻訳されます – この文法は利便性のためにサポートされており機能に違いはありません。

arch_os というラベルが付いたパーティションから Arch を起動して Intel CPU のマイクロコードをロードするローダーファイルの例:

esp/loader/entries/arch.conf
title   Arch Linux
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options root=LABEL=arch_os rw

bootctl は自動的に "Windows Boot Manager" (/EFI/Microsoft/Boot/Bootmgfw.efi), "EFI Shell" (/shellx64.efi), "EFI Default Loader" (/EFI/BOOT/bootx64.efi) をチェックします。また、/EFI/Linux にカーネルファイルが存在しないかもチェックされます。これらが検出された場合、自動的に適切なエントリが生成されます (auto-windows, auto-efi-shell, auto-efi-default)。これらのエントリを手動でローダー設定する必要はありません。ただし、(rEFInd など) 他の EFI アプリケーションは自動検出されないため、Linux カーネルを起動するには、手動で設定してエントリを作成する必要があります。

ノート:
  • Windows とデュアルブートする場合、Windows のデフォルトオプションである高速スタートアップを無効にすることを強く推奨します。
  • 必要な場合は initrd で Intel のマイクロコードをロードしてください。例はマイクロコード#systemd-boot を参照。
  • blkid -s PARTUUID -o value /dev/sdxY コマンドを使うことで root パーティションの PARTUUID を確認できます。x はデバイス文字、Y はパーティション番号に置き換えて下さい。確認するのは root パーティションだけで大丈夫です。esp は確認する必要がありません。
ヒント:
  • 設定済みのブートエントリは bootctl list コマンドで確認できます。
  • サンプルエントリファイルが /usr/share/systemd/bootctl/arch.conf に存在します。
  • LVM, LUKS, dm-crypt などで必要なカーネルパラメータについてはそれぞれのページを確認してください。

EFI シェルや他の EFI アプリ

EFI シェルなどの EFI アプリケーションを ESP にインストールしている場合、以下のスニペットを使うことができます:

esp/loader/entries/uefi-shell-v1-x86_64.conf
title  UEFI Shell x86_64 v1
efi    /EFI/shellx64_v1.efi
esp/loader/entries/uefi-shell-v2-x86_64.conf
title  UEFI Shell x86_64 v2
efi    /EFI/shellx64_v2.efi

/EFI/Linux のカーネルの準備

カーネル・初期 RAM ディスク (initrd)・カーネルコマンドライン・/etc/os-release をひとつのファイルにまとめた特殊なカーネルファイルとして /EFI/Linux が検索されます。セキュアブートするために簡単にファイルに署名することができます。

ノート: systemd-boot は ID を生成して自動的にエントリを追加するために os-release ファイルに VERSION_ID または BUILD_ID のどちらかを必要としますが、Arch の os-release には含まれていません。どちらかを記述したコピーを作成するか、スクリプトで自動的に生成するようにしてください

使用したいカーネルコマンドラインをファイルに記述して以下のようにバンドルファイルを作成してください:

Kernel packaging command:
objcopy \
    --add-section .osrel="/usr/lib/os-release" --change-section-vma .osrel=0x20000 \
    --add-section .cmdline="kernel-command-line.txt" --change-section-vma .cmdline=0x30000 \
    --add-section .linux="vmlinuz-file" --change-section-vma .linux=0x40000 \
    --add-section .initrd="initrd-file" --change-section-vma .initrd=0x3000000 \
    "/usr/lib/systemd/boot/efi/linuxx64.efi.stub" "linux.efi"

生成した linux.efi ファイルには任意で署名することができます。

linux.efiesp/EFI/Linux にコピーしてください。

ハイバネーション

サスペンドとハイバネートの記事を参照してください。

パスワードで保護されたカーネルパラメータエディタ

password 設定オプションをサポートしている systemd-boot-passwordAUR をインストールすることもできます。sbpctl generate を使ってオプションで指定する値を生成できます。

systemd-boot-password は以下のコマンドでインストールしてください:

# sbpctl install esp

カーネルパラメータを編集する前にパスワードの入力が求められるようになります。

ブートメニューのキー一覧

メニューの中では以下のキーが使われます:

  • Up/Down - エントリの選択
  • Enter - 選択したエントリの起動
  • d - (不揮発の EFI 変数に保存された) デフォルトエントリを選択して起動
  • t/T - (不揮発の EFI 変数に保存された) タイムアウトを調整
  • e - カーネルコマンドラインを編集。editor オプションが 0 に設定されている場合は使えません
  • q - 終了
  • v - systemd-boot と UEFI のバージョンを表示
  • p - 現在の設定を表示
  • h - キーマップを表示
  • h/? - ヘルプ

以下のホットキーを、起動中やメニューで押すことで、特定のエントリを直接起動します:

  • l - Linux
  • w - Windows
  • a - OS X
  • s - EFI Shell
  • 1-9 - エントリの番号

トラブルシューティング

BIOS モードで起動後にインストール

警告: こちらの起動方法は推奨されません。

BIOS モードで OS を起動したいときも systemd-boot をインストールすることは可能です。ただし、起動時に systemd-boot の EFI ファイルを実行するようにファームウェアを設定する必要があります:

  • EFI シェルを使用する。
  • ファームウェアのインターフェイスから起動時にロードされる EFI ファイルを設定する。

設定できる場合、インストールは簡単です: EFI シェルやファームウェアの設定インターフェイスを開いて、マシンのデフォルトの EFI ファイルを esp/EFI/systemd/systemd-bootx64.efi (32ビット環境の場合 systemd-bootia32.efi) に変更してください。

ノート: Dell の Latitude シリーズなどでは、EFI ブートを設定するために必要な全てがファームウェアのインターフェイスに揃っており、EFI シェルではコンピュータの ROM に書き込みを行えません。

efibootmgr を使って手動エントリを追加する

bootctl install コマンドが失敗した場合、efibootmgr ユーティリティを使って EFI ブートエントリを手動で作成することができます:

# efibootmgr -c -d /dev/sdX -p Y -l "\EFI\systemd\systemd-bootx64.efi" -L "Linux Boot Manager"

/dev/sdXYEFI システムパーティションに置き換えてください。

ノート: EFI イメージのパスでは区切り文字としてバックスラッシュ (\) を使用します。

Windows をアップグレードした後にメニューが表示されない

Unified Extensible Firmware Interface#Windows によってブート順序が変わってしまうを見てください。

参照