Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
EFI ブートスタブのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
EFI ブートスタブ
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[Category:ブートローダー]] [[en:EFISTUB]] [[es:EFISTUB]] [[ru:EFISTUB]] {{Related articles start}} {{Related|Arch ブートプロセス}} {{Related|ブートローダー}} {{Related|Unified Extensible Firmware Interface}} {{Related articles end}} Linux カーネルは EFISTUB ブートをサポートしており、[[EFI]] ファームウェアがカーネルを EFI 実行可能ファイルとしてロードできるようにします。このオプションは、Arch Linux カーネルではデフォルトで有効になっています。カーネルをコンパイルする場合は、カーネル構成で {{ic|1=CONFIG_EFI_STUB=y}}を設定することでアクティブにできます。詳細については、[https://www.kernel.org/doc/html/latest/admin-guide/efi-stub.html EFI BootStub] を参照してください。 == EFISTUB の設定 == [[EFI システムパーティション]]を作成したら、システムパーティションをマウントする方法を選択してください。一番簡単なのは {{ic|/boot}} にマウントするか {{ic|/boot}} に[[EFI システムパーティション#バインドマウントを使う|バインドマウント]]することです。pacman が直接 EFI ファームウェアによって読み込まれるカーネルを更新してくれます。その場合、[[#EFISTUB の起動]]に進んでください。 {{Note|[[rEFInd]] などのファイルシステムドライバーを備えているブートマネージャを使用する場合、カーネルや initramfs を ESP 以外に保存できます。}} === 他の ESP マウントポイント === EFI システムパーティションを {{ic|/boot}} にマウントしない場合、ブートファイルをコピーする必要があります (以下 EFI システムパーティションの場所を {{ic|''esp''}} とします): # mkdir -p ''esp''/EFI/arch # cp /boot/vmlinuz-linux ''esp''/EFI/arch/vmlinuz-linux # cp /boot/initramfs-linux.img ''esp''/EFI/arch/initramfs-linux.img # cp /boot/initramfs-linux-fallback.img ''esp''/EFI/arch/initramfs-linux-fallback.img {{Note|Intel 製の CPU を使用する場合、[[マイクロコード]]をブートエントリの場所にコピーする必要があります。}} さらに、カーネルのアップデートがあったときに ESP のファイルを更新する必要があります。更新しないとシステムが起動できなくなってしまいます。以下のセクションでは自動でコピーする方法を説明しています。 ==== systemd を使う ==== [[Systemd]] には特定のイベントが起こったときにタスクを実行する機能があります。{{ic|/boot}} が更新されたときに特定のパスにおける変更を検知して EFISTUB カーネルと initramfs ファイルを同期してください: {{hc|/etc/systemd/system/efistub-update.path|<nowiki> [Unit] Description=Copy EFISTUB Kernel to UEFISYS Partition [Path] PathChanged=/boot/initramfs-linux-fallback.img [Install] WantedBy=multi-user.target WantedBy=system-update.target </nowiki>}} {{Note|上記のユニットは {{ic|initramfs-linux-fallback.img}} の変更を監視します。このファイルは mkinitcpio によって最後に作成されるファイルであり、ビルドが完了する前に他のファイルをコピーしてしまう競合状態を避けることができます。}} {{hc|1=/etc/systemd/system/efistub-update.service|2= [Unit] Description=Copy EFISTUB Kernel to UEFISYS Partition [Service] Type=oneshot ExecStart=/usr/bin/cp -f /boot/vmlinuz-linux ''esp''/EFI/arch/vmlinuz-linux ExecStart=/usr/bin/cp -f /boot/initramfs-linux.img ''esp''/EFI/arch/initramfs-linux.img ExecStart=/usr/bin/cp -f /boot/initramfs-linux-fallback.img ''esp''/EFI/arch/initramfs-linux-fallback.img }} {{Tip|(自分の鍵を使って) [[セキュアブート]]する場合、({{Pkg|sbsigntools}} を使って) イメージに署名するようにサービスを設定することができます: {{bc|1=ExecStart=/usr/bin/sbsign --key ''/path/to/db.key'' --cert ''/path/to/db.crt'' --output ''esp''/EFI/arch/vmlinuz-linux ''esp''/EFI/arch/vmlinuz_linux}} }} ユニットを作成したら {{ic|efistub-update.path}} を[[起動]]・[[有効化]]してください。 ==== incron を使う ==== {{Pkg|incron}} を使うことでカーネルの更新時に EFISTUB カーネルを同期させるスクリプトを実行できます。 {{hc|/usr/local/bin/efistub-update.sh| #!/usr/bin/env bash /usr/bin/cp -f /boot/vmlinuz-linux ''esp''/EFI/arch/vmlinuz-linux /usr/bin/cp -f /boot/initramfs-linux.img ''esp''/EFI/arch/initramfs-linux.img /usr/bin/cp -f /boot/initramfs-linux-fallback.img ''esp''/EFI/arch/initramfs-linux-fallback.img}} {{Note|最初のパラメータの {{ic|/boot/initramfs-linux-fallback.img}} は監視するファイルです。2番目のパラメータの {{ic|IN_CLOSE_WRITE}} は監視する操作です。3番目のパラメータの {{ic|/usr/local/bin/efistub-update.sh}} は実行するスクリプトです。}} {{hc|/etc/incron.d/efistub-update.conf|<nowiki> /boot/initramfs-linux-fallback.img IN_CLOSE_WRITE /usr/local/bin/efistub-update.sh</nowiki>}} この方法を使う場合、{{ic|incrond}} のサービスを有効にしてください: # systemctl enable incrond.service ==== mkinitcpio フックを使う ==== Mkinitcpio はフックを生成することができ、システムレベルのデーモンを必要としません。バックグラウンドプロセスが生成され {{ic|vm-linuz}}, {{ic|initramfs-linux.img}}, {{ic|initramfs-linux-fallback.img}} が生成されてからファイルをコピーします。 {{ic|/etc/mkinitcpio.conf}} のフックのリストに {{ic|efistub-update}} を追加してください。 {{hc|/usr/lib/initcpio/install/efistub-update|<nowiki> #!/usr/bin/env bash build() { /root/watch.sh & } help() { cat <<HELPEOF This hook waits for mkinitcpio to finish and copies the finished ramdisk and kernel to the ESP HELPEOF }</nowiki>}} {{hc|/root/watch.sh|<nowiki> #!/usr/bin/env bash while [[ -d "/proc/$PPID" ]]; do sleep 1 done </nowiki> /usr/bin/cp -f /boot/vmlinuz-linux ''esp''/EFI/arch/vmlinuz-linux /usr/bin/cp -f /boot/initramfs-linux.img ''esp''/EFI/arch/initramfs-linux.img /usr/bin/cp -f /boot/initramfs-linux-fallback.img ''esp''/EFI/arch/initramfs-linux-fallback.img echo "Synced kernel with ESP"}} ==== mkinitcpio フックを使う (別の方法) ==== 上記の方法と別に、コピー操作を減らす方法があります。逆転の発想で initramfs を {{ic|/boot}} ではなく EFI パーティションに直接保存します。そして mkinitcpio フックを使ってカーネルなどのファイルを ESP にコピーします。 {{ic|/etc/mkinitcpio.d/linux.preset}} ファイルを編集してください: {{hc|/etc/mkinitcpio.d/linux.preset|<nowiki> # mkinitcpio preset file for the 'linux' package # Directory to copy the kernel, the initramfs... ESP_DIR="/boot/efi/EFI/arch" ALL_config="/etc/mkinitcpio.conf" ALL_kver="/boot/vmlinuz-linux" PRESETS=('default' 'fallback') #default_config="/etc/mkinitcpio.conf" default_image="${ESP_DIR}/initramfs-linux.img" default_options="-A esp-update-linux" #fallback_config="/etc/mkinitcpio.conf" fallback_image="${ESP_DIR}/initramfs-linux-fallback.img" fallback_options="-S autodetect" </nowiki>}} そして {{ic|/usr/lib/initcpio/install/esp-update-linux}} ファイルを作成して実行可能属性を付与してください: {{hc|/usr/lib/initcpio/install/esp-update-linux|<nowiki> # Directory to copy the kernel, the initramfs... ESP_DIR="/boot/efi/EFI/arch" build() { cp /boot/vmlinuz-linux "${ESP_DIR}/vmlinuz-linux.efi" # If ucode is used uncomment this line #cp /boot/intel-ucode.img "${ESP_DIR}/" } help() { cat <<HELPEOF This hook copies the kernel to the ESP partition HELPEOF } </nowiki>}} テストするには以下のコマンドを実行: # rm /boot/initramfs-linux-fallback.img # rm /boot/initramfs-linux.img # mkinitcpio -p linux == EFISTUB の起動 == {{Warning|Linux カーネル EFISTUB の initramfs のパスは EFI システムパーティションのルートディレクトリからの相対パスになります。例えば、initramfs が {{ic|$esp/EFI/arch/initramfs-linux.img}} に存在する場合、UEFI で設定するのは {{ic|1=initrd=/EFI/arch/initramfs-linux.img}} または {{ic|1=initrd=\EFI\arch\initramfs-linux.img}} になります。以下の例では必要なファイル全てが {{ic|$esp/}} にあることを前提としています。}} === ブートマネージャを使う === UEFI ブートマネージャには UEFI ブートを簡単にすることができるオプションが存在します (特に複数のカーネルやオペレーティングシステムをインストールしている場合)。詳しくは[[ブートローダー]]を見てください。 === UEFI Shell を使う === 通常の UEFI アプリケーションと同じように UEFI Shell から EFISTUB カーネルを起動できます。その場合、通常のパラメータとして起動する EFISTUB カーネルファイルにカーネルパラメータを渡してください: > fs0: > /vmlinuz-linux root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rw initrd=/initramfs-linux.img 毎回カーネルパラメータを全て指定したくない場合、UEFI システムパーティションに {{ic|archlinux.nsh}} などのシェルスクリプトの実行コマンドを保存することができます。以下のコマンドで起動できるようになります: > fs0: > archlinux === UEFI を直接使う === UEFI は [[GRUB]] などの中間的なブートローダーを排除できるように設計されています。使用しているマザーボードの UEFI 実装に問題がなければ、カーネルパラメータを UEFI ブートエントリの中に埋め込んでマザーボードから Arch を直接起動できます。{{Pkg|efibootmgr}} や UEFI Shell v2 を使ってマザーボードのブートエントリを編集できます。 ==== efibootmgr ==== 以下のようなコマンドを実行してください: # efibootmgr -d ''/dev/sdX'' -p ''Y'' -c -L "Arch Linux" -l /vmlinuz-linux -u "root=''/dev/sdBZ'' rw initrd=/initramfs-linux.img" {{ic|''/dev/sdX''}} と {{ic|''Y''}} は ESP が存在するディスクとパーティションに置き換えてください。{{ic|1=root=}} パラメータを変更することで Linux のルートパーティションを指定できます (ディスクの UUID を使うこともできます)。{{ic|-u}} 引数をダブルクオーテーションで囲っているのは[[カーネルパラメータ]]を指定するためであり、[[サスペンドとハイバネート#必要なカーネルパラメータ|ハイバネート]]や[[マイクロコード]]を使う場合はパラメータを追加する必要があります。 以下のコマンドを実行することで作成したエントリが問題ないか確認できます: # efibootmgr -v {{Warning|特定のカーネルと {{ic|efibootmgr}} のバージョンの組み合わせでは新しいブートエントリを作成できません。NVRAM に空き容量が存在しないことが原因です。EFI のダンプファイルを削除してみてください: # rm /sys/firmware/efi/efivars/dump-* もしくは、{{ic|efi_no_storage_paranoia}} カーネルパラメータを使って起動してください。キャッシュに前のバージョンが存在する場合、efibootmgr のバージョンを 0.11.0 にダウングレードしてみてください。このバージョンでは Linux のバージョン 4.0.6 が動作します。詳しくは {{Bug|34641}} を参照。}} ブートの順序を設定するには、次のコマンドを実行: # efibootmgr -o XXXX,XXXX XXXX は `efibootmgr` コマンドの出力で確認できるエントリの数字に置き換えてください。 {{Tip|ブートエントリを作成するコマンドをシェルスクリプトに保存することで、(カーネルパラメータを変更するときなど) 編集が簡単になります。}} efibootmgr については [[UEFI#efibootmgr]] を見てください。https://bbs.archlinux.org/viewtopic.php?pid=1090040#p1090040 も参照。 ==== UEFI Shell ==== UEFI の実装によっては efibootmgr を使用して NVRAM を編集できないことがあります。efibootmgr でエントリを作成できない場合、UEFI Shell v2 の [[UEFI#bcfg|bcfg]] コマンドを使用する方法があります。 カーネルのエントリを追加するには、以下を実行: Shell> bcfg boot add '''N''' fs'''V''':\vmlinuz-linux "Arch Linux" {{ic|N}} はエントリの優先度 (0 が一番優先されます) に、{{ic|V}} は EFI パーティションのボリューム番号に置き換えてください。ボリューム番号がわからない場合、map コマンドを使うことでファイルシステムが確認できるので、ls コマンドで中身を確認してください: Shell> map Shell> ls fs0: 最低限必要なカーネルオプションだけを追加する場合: Shell> bcfg boot -opt '''N''' "root='''/dev/sdX#''' rw initrd=\initramfs-linux.img" {{ic|N}} は優先度に {{ic|/dev/sdX#}} はルートパーティションに置き換えてください。
このページで使用されているテンプレート:
テンプレート:AUR
(
ソースを閲覧
)
テンプレート:Hc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:META Related articles start
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Related
(
ソースを閲覧
)
テンプレート:Related articles end
(
ソースを閲覧
)
テンプレート:Related articles start
(
ソースを閲覧
)
テンプレート:Tip
(
ソースを閲覧
)
EFI ブートスタブ
に戻る。
検索
検索
EFI ブートスタブのソースを表示
話題を追加