systemd-boot
systemd-boot (旧名 gummiboot) は設定済みの EFI イメージを実行できるシンプルな UEFI ブートマネージャです。デフォルトのエントリは設定したパターン (glob) または画面上のメニューで選択されます。systemd-boot は systemd 220-2 から systemd に同梱されるようになりました。
systemd-boot は簡単に設定することができ、Linux カーネルの EFISTUB や UEFI シェル、grub.efi などの EFI 実行可能ファイルだけを起動できます。
インストール
EFI ブート
まず、EFI 変数にアクセスできるかチェックして UEFI モードで起動していることを確認してください。また、EFI System Partition が正しくマウントされて、カーネルと initramfs が ESP にコピーされていないと、systemd-boot は他のパーティションから EFI バイナリをロードすることができません。以上のことから systemd-boot を使う時は ESP を /boot
にマウントすることを強く推奨します。ESP を /boot
以外に作りたい場合、#アップデート を見て下さい。
以下のコマンドを実行することで systemd-boot のバイナリがあなたの EFI System Partition にコピーされ、EFI Boot Manager によってロードされるデフォルトの EFI アプリケーション (デフォルトブートエントリ) として systemd-boot が追加されます。UEFI モードで起動していない場合、また、EFI 変数にアクセスできないときは、ブートエントリの作成は失敗します。ただし systemd-boot のバイナリは ESP 内にある EFI バイナリのデフォルトの配置場所 (x64 環境では $esp//EFI/systemd/systemd-bootx64.efi
あるいは $esp/EFI/Boot/BOOTX64.EFI
) にコピーされるので systemd-boot を起動すること自体は可能です。
# bootctl --path=$esp install
レガシーブート
レガシーな OS を起動したいときも systemd-boot をインストールすることは可能です。ただし、起動時に systemd-boot の EFI ファイルを実行するようにファームウェアを設定する必要があります:
- EFI シェルを使用する。
- ファームウェアのインターフェイスから起動時にロードされる EFI ファイルを設定する。
設定できる場合、インストールは簡単です: EFI シェルやファームウェアの設定インターフェイスを開いて、マシンのデフォルトの EFI ファイルを $esp/EFI/systemd/systemd-bootx64.efi
(i686 環境の場合 systemd-bootia32.efi
) に変更してください。
アップデート
systemd-boot (bootctl(1), systemd-efi-boot-generator(8)) はあなたの EFI System Partition が /boot
にマウントされていると予め事前設定されています。新しいパッケージがリリースされたら post_install
スクリプトによって自動的にアップデートされていた、昔の gummiboot パッケージと違って、systemd-boot では手動でアップデートするようになっています:
# bootctl update
ESP が /boot
にマウントされていない場合、--path=
オプションで指定します。例:
# bootctl --path=$esp update
設定
基本設定
基本的な設定は /boot/loader/loader.conf
に記述します、3つの設定オプションが使えます:
default
– 選択するデフォルトエントリ (.conf
を付けない);arch-*
のようにワイルドカードを使うことができます
timeout
– メニューのタイムアウト秒数。この値が設定されていない場合、起動中にスペースキーを押した時だけメニューが表示されます。
editor
- カーネルパラメータの編集を可能にするかどうか設定。1
(デフォルト) は可能になり、0
は無効になります。init=/bin/bash
を加えることで root パスワードを回避して root 権限を得ることが出来てしまうため、このオプションは0
に設定することが強く推奨されています。
例:
$esp/loader/loader.conf
default arch timeout 4 editor 0
最初の2つのオプションは両方ともブートメニューで変更するこができ、EFI 変数として保存されます。
ブートエントリの追加
bootctl は $esp/loader/entries/*.conf
にあるブートメニューのアイテムを検索します – 1つのファイルに1つのブートエントリを記述します。利用できるオプションは:
title
– オペレーティングシステムの名前。必須。
version
– カーネルバージョン、同じ title のエントリが複数存在する場合にのみ表示されます。任意。
machine-id
–/etc/machine-id
のマシン識別子、title と version が同じエントリが複数存在する場合にのみ表示されます。任意。
efi
– 起動する EFI プログラム、ESP (/boot
) からの相対パス; 例:/vmlinuz-linux
。このオプションかlinux
(下を参照) のどちらか一方が必須です。
options
– EFI プログラムに渡すコマンドラインオプション。任意ですが、Linux を起動する場合initrd=efipath
とroot=dev
が最低限必要になります。
Linux では、linux path-to-vmlinuz
と initrd path-to-initramfs
を指定することができます。この値は自動で efi path
と options initrd=path
に翻訳されます – この文法は利便性のためにサポートされており機能に違いはありません。
標準的な root インストール
LVM や LUKS がない root パーティションを使用するエントリの例:
/boot/loader/entries/arch.conf
title Arch Linux linux /vmlinuz-linux initrd /initramfs-linux.img options root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660 rw
上の例にある PARTUUID/PARTLABEL は GPT パーティションを識別しています。ファイルシステムを識別する UUID/LABEL とは異なっていることに注意してください。PARTUUID/PARTLABEL には他のファイルシステムでパーティションをフォーマットしなおしても値が変わらないという利点があります。またパーティションにファイルシステムがない (もしくは LABEL をサポートしていない LUKS を使っている) 場合などにも有用です。
LVM root インストール
論理ボリュームマネージャを使う root パーティションのエントリ例:
$esp/loader/entries/arch-lvm.conf
title Arch Linux (LVM) linux /vmlinuz-linux initrd /initramfs-linux.img options root=/dev/mapper/<VolumeGroup-LogicalVolume> rw
<VolumeGroup-LogicalVolume>
は実際の VG や LV の名前に置き換えて下さい (例: root=/dev/mapper/volgroup00-lvolroot
)。また、UUID を使うこともできます:
.... options root=UUID=<UUID identifier> rw
LVM や LUKS がない root パーティションで使っていた root=PARTUUID=
の代わりに root=UUID=
を使っていることに注意してください。
暗号化 root インストール
root パーティションを暗号化している場合の設定ファイルの例 (DM-Crypt / LUKS):
$esp/loader/entries/arch-encrypted.conf
title Arch Linux Encrypted linux /vmlinuz-linux initrd /initramfs-linux.img options cryptdevice=UUID=<UUID>:<mapped-name> root=UUID=<luks-UUID> quiet rw
上記の例では UUID を使っています。必要であれば、PARTUUID で UUID を置き換えることもできます。<luks-UUID>
は暗号化を解除した後の実際の root ファイルシステムの UUID を示しています (/dev/mapper/<mapped-name>
)。デバイスの UUID ではありません。Dm-crypt/システム設定#ブートローダーを見て下さい。
LVM を使用する場合、cryptdevice 行は以下のようになります:
$esp/loader/entries/arch-encrypted-lvm.conf
title Arch Linux Encrypted LVM linux /vmlinuz-linux initrd /initramfs-linux.img options cryptdevice=UUID=<UUID>:MyVolGroup root=/dev/mapper/MyVolGroup-MyVolRoot quiet rw
\EFI\arch\grub.efi
など他の EFI プログラムを追加することもできます。
btrfs サブボリューム root インストール
btrfs のサブボリュームを root として起動する場合、options
行を rootflags=subvol=<root subvolume>
に変更してください。以下の例では、'ROOT' という名前の btrfs のサブボリュームを root としてマウントしています (例: mount -o subvol=ROOT /dev/sdxY /mnt
):
$esp/loader/entries/arch-btrfs-subvol.conf
title Arch Linux linux /vmlinuz-linux initrd /initramfs-linux.img options root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660 rw rootflags=subvol=ROOT
以上のように設定していないと次のエラーメッセージが表示されます: ERROR: Root device mounted successfully, but /sbin/init does not exist.
。
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
ハイバネーション
サスペンドとハイバネートの記事を参照してください。
ブートメニュー
キー一覧
メニューの中では以下のキーが使われます:
Up/Down
- エントリの選択Enter
- 選択したエントリの起動d
- (不揮発の EFI 変数に保存された) デフォルトエントリを選択して起動t/T
- (不揮発の EFI 変数に保存された) タイムアウトを調整e
- カーネルコマンドラインを編集。editor
オプションが0
に設定されている場合は使えませんq
- 終了v
- systemd-boot と UEFI のバージョンを表示p
- 現在の設定を表示h
- キーマップを表示h/?
- ヘルプ
以下のホットキーを、起動中やメニューで押すことで、特定のエントリを直接起動します:
l
- Linuxw
- Windowsa
- OS Xs
- EFI Shell1-9
- エントリの番号
トラブルシューティング
efibootmgr を使って手動エントリを追加する
bootctl install
コマンドが失敗した場合、efibootmgr ユーティリティを使って EFI ブートエントリを手動で作成することができます:
# efibootmgr -c -d /dev/sdX -p Y -l /EFI/systemd/systemd-bootx64.efi -L "Linux Boot Manager"
Windows をアップグレードした後にメニューが表示されない
Windows 8 から Windows 8.1 にアップグレードした場合などに、ブートメニューが表示されなくなることがあります:
- Secure Boot (UEFI 設定) と Fast Startup (Windows の電源オプション設定) が両方とも無効になっていることを確認してください。
- Windows Boot Manager よりも Linux Boot Manager が UEFI で優先されていることを確認してください (Hard Drive Disk Priority などの UEFI 設定)。
Windows 8.x 以上で、設定したブートの順番を守るようにさせたい場合、Windows のグループポリシーを入力して起動時にバッチファイル (.bat) を起動するようにしてください。Windows 上で以下を実行:
- 管理者権限でコマンドプロンプトを開いて下さい。そして
bcdedit /enum firmware
と入力します。 - 説明に "Linux" と付いているファームウェアアプリケーションを探して下さい。例: "Linux Boot Manager"。
- 括弧も含めて Identifier をコピーします。例:
{31d0d5f4-22ad-11e5-b30b-806e6f6e6963}
。 - gpedit から ローカルコンピュータポリシー-> コンピューターの構成-> Windows の設定-> スクリプト(スタートアップ/シャットダウン) を開いて "スタートアップ" を選択してください。"スタートアップのプロパティ" という名前のウィンドウが開きます。
- "スクリプト"タブの、追加ボタンを押して下さい。
- スクリプトに名前を付けます。例:
bootorder.bat
。 - "スクリプトのパラメーター" には
bcdedit /set {fwbootmgr} DEFAULT {先にコピーした identifier}
と入力します (例:bcdedit /set {fwbootmgr} DEFAULT {31d0d5f4-22ad-11e5-b30b-806e6f6e6963}
)。
上記の設定が上手く行かない場合、Windows 環境のどこかに bcdedit /set {fwbootmgr} DEFAULT {先にコピーした identifier}
と記述したバッチファイルを作成して、gpedit から保存したファイルを参照してください。