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}} {{Warning|1=カーネルバージョンとマザーボードのモデルによっては EFISTUB の起動が失敗するというバグが報告されています。詳しくは [https://bugs.archlinux.org/task/33745] や [https://bbs.archlinux.org/viewtopic.php?id=156670] を見て下さい。}} Linux カーネル ({{Pkg|linux}}>=3.3) は {{ic|EFISTUB (EFI BOOT STUB)}} ブートをサポートしています。カーネル設定で {{ic|CONFIG_EFI_STUB=y}} を設定することで有効にすることができ、Arch Linux のカーネルではデフォルトで有効にされています (詳しくは [https://www.kernel.org/doc/Documentation/efi-stub.txt EFI Boot Stub] を参照してください)。 EFISTUB カーネルだけでは他のカーネルを起動することはできません。よってブートメニューエントリごとに EFISTUB カーネル + Initramfs のペアが必要です。このため、複数のカーネルを使う場合は、UEFI Boot Manager を使うことが推奨されています。 == EFISTUB の設定 == # [[Unified Extensible Firmware Interface#EFI System Partition|EFI System Partition]] を作成してください。 # {{ic|/boot}} (推奨) かどこか他の好きなところに (他のディストロやツールは大抵 {{ic|/boot/efi}} を使っています) EFI System Partition をマウントしてください。以後このマウントポイントは {{ic|$esp}} として示します。 === カーネルと initramfs を ESP にコピーする === EFISYS のマウントポイントとして {{ic|/boot}} を使って''いない''場合 ({{ic|/boot/efi}} など)、ブートファイルを EFISYS にコピーする必要があります (EFISYS の場所は {{ic|$esp}} として示します): # mkdir $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 カーネルがアップデートされる度に EFISTUB カーネルを更新する必要があります。また、以下の方法のどれか一つを使うことで EFISTUB カーネルを自動で更新することができます。 ==== systemd ==== [[systemd]] にはイベントトリガータスク機能があります。これで、パス上の変更を検知する能力を使って、{{ic|boot}} にある EFISTUB カーネルと initramfs のファイルが更新されたときにそれらを同期させることが可能です。 {{Warning|mkinitcpio がカーネルスタブと initramfs を作成するのには時間がかかるので、以下の systemd サービスが新しいカーネルスタブと initramfs の代わりに古いものをコピーしてしまう可能性があります。このエラーの可能性を減らすために、(mkinitcpio によって最後に作成される) initramfs-linux-fallback.img が更新されたか確認する efistub のコピーサービスをバインドすると良いでしょう。}} {{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 </nowiki>}} {{hc|/etc/systemd/system/efistub-update.service|<nowiki> [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 </nowiki>}} 次のコマンドでサービスを有効にしてください: # systemctl enable efistub-update.path 再起動するか、次のコマンドを実行して systemd にパスの監視を開始するように伝える必要があります: # systemctl start efistub-update.path ==== Incron を使う ==== {{Pkg|incron}} を使って更新後に EFISTUB カーネルを同期するスクリプトを実行することができます。 {{Tip|下のスクリプトを {{ic|/usr/local/bin/efistub-update.sh}} として保存してください}} {{bc|<nowiki> #!/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</nowiki>}} {{Tip|下のスクリプトを {{ic|/etc/incron.d/efistub-update.conf}} として保存してください}} {{Note|最初のパラメータ {{ic|/boot/initramfs-linux-fallback.img}} は監視するファイルです。2番目のパラメータ {{ic|IN_CLOSE_WRITE}} は監視するイベントです。3番目のパラメータ {{ic|/usr/local/bin/efistub-update.sh}} は起動するスクリプトです。}} {{bc|<nowiki> /boot/initramfs-linux-fallback.img IN_CLOSE_WRITE /usr/local/bin/efistub-update.sh </nowiki>}} {{Tip|この方法を使うには、incron が有効になっている必要があります。有効になっていない場合は次を実行してください {{bc|<nowiki> # systemctl enable incrond.service </nowiki>}}}} ==== Mkinitcpio フックを使う ==== Mkinitcpio はフックを生成することができシステムレベルデーモンを機能させる必要はありません。ファイルをコピーする前にバックグラウンドプロセスを生成して {{ic|vm-linuz}}, {{ic|initramfs-linux.img}}, {{ic|initramfs-linux-fallback.img}} の生成を待ちます。 {{Tip|下のスクリプトを {{ic|/usr/lib/initcpio/install/efistub-update}} として保存してください}} {{bc|<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>}} {{Tip|下のスクリプトを {{ic|/root/watch.sh}} として保存し実行可能にしてください}} {{bc|<nowiki> #!/usr/bin/env bash while [[ -d "/proc/$PPID" ]]; do sleep 1 done /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" </nowiki>}} {{Tip|{{ic|efistub-update}} を {{ic|/etc/mkinitcpio.conf}} 内の hook のリストに加えて下さい}} ==== バインドマウントを使う ==== ESP を {{ic|/boot}} にマウントする代わりに、バインドマウントを使うことで ESP のディレクトリを {{ic|/boot}} にマウントすることができます ({{ic|mount(8)}} を参照)。これによって ESP を自由に扱えるようにしつつ pacman が直接カーネルを更新できるようにすることができます。ファイルをコピーする他の方法よりもずっとシンプルな方法になります。 {{Note|1=バインドマウントを利用するには FAT32 に対応するカーネルとブートローダーが必要です。通常の Arch のインストールでは問題になりませんが、他のディストリビューションでは問題になることがあります (つまり {{ic|/boot}} にシンボリックリンクを必要とするディストリビューション)。フォーラムの[https://bbs.archlinux.org/viewtopic.php?pid=1331867#p1331867 この投稿]を見て下さい。}} [[#カーネルと initramfs を ESP にコピーする|上]]に書かれているように、ESP のディレクトリに全てのブートファイルをコピーしますが、ESP は {{ic|/boot}} の外にマウントします (例: {{ic|/esp}})。そしてディレクトリをバインドマウントします: # mount --bind /esp/EFI/arch/ /boot ファイルが {{ic|/boot}} に現れるようにしたい場合、[[fstab|fstab]] を編集して永続化させます: {{hc|/etc/fstab|<nowiki> /esp/EFI/arch /boot none defaults,bind 0 0 </nowiki>}} {{Warning|この方法を使って起動するには {{ic|1=root=''system_root''}} [[カーネルパラメータ#パラメータ一覧|カーネルパラメータ]]を使う必要があります。}} == EFISTUB の起動 == {{Warning|Linux Kernel EFISTUB initramfs のパスは EFI System Partition のルートからの相対パスでなければなりません。例えば、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}} になります。}} 以下の方法のどれか一つを使うことで EFISTUB カーネルを起動することができます: === gummiboot を使う === [[Gummiboot|Gummiboot]] は EFISTUB カーネルのナイスなメニューを提供する UEFI Boot Manager です。EFISTUB ブートの推奨ブートマネージャです。詳細は [[Gummiboot|gummiboot]] を見て下さい。 === rEFInd を使う === [[rEFInd|rEFInd]] は (Intel Mac で使われている) rEFIt Boot Manager の Rod Smith (GPT-fdisk の作者) によるフォークです。rEFInd は Mac 以外の UEFI ブートについて rEFIt の多くの問題を修正してあり EFISTUB カーネルをサポートしています。詳しくは [[rEFInd|rEFInd]] を見て下さい。 === UEFI Shell を使う === 通常の UEFI アプリケーションのように UEFI Shell から EFISTUB カーネルを起動することが可能です。この場合カーネルパラメータは通常のパラメータとして起動する EFISTUB カーネルファイルに渡します。 > fs0: > cd \EFI\arch > vmlinuz-arch.efi root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rootfstype=ext4 add_efi_memmap initrd=EFI/arch/initramfs-arch.img また、ブートパラメータを記述したシンプルな {{ic|archlinux.nsh}} ファイルを書いて UEFI System Partition に置き、それを実行することもできます: > fs0: > archlinux スクリプト例: {{hc|$ESP/archlinux.nsh|2= echo -on \EFI\arch\vmlinuz-arch.efi root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rootfstype=ext4 add_efi_memmap initrd=/EFI/arch/initramfs-arch.img }} この方法では名前をメモしておいたり20-30文字も入力せずとも UUID を指定することができます。 === ブートマネージャを使わずに直接起動する === {{Warning|1=カーネルと efibootmgr の組み合わせによっては手動で調整しないと動かないことがあります [https://bugs.archlinux.org/task/34641]。ブートエントリを削除することはできますが作成することは出来なくなります。}} {{Note|UEFI ファームウェアによってはブートエントリの uefi アプリケーションにコマンドラインパラメータを埋め込むことができません。}} UEFI ブートエントリに直接カーネルパラメータを埋め込むことが可能です。つまりあなたの UEFI ブートオーダー・GUI を使って GRUB など他のブートローダーを使わずに直接 Arch Linux を起動することができます (下のコマンドの {{ic|X}} と {{ic|Y}} は EFI System Partition があるディスクとパーティションに置き換えてください、{{ic|1=root=}} パラメータは root にあわせて変更してください)。 # mount -t efivarfs efivarfs /sys/firmware/efi/efivars # 既にマウントされている場合は無視して下さい # efibootmgr -d /dev/sd'''X''' -p '''Y''' -c -L "Arch Linux" -l /EFI/arch/vmlinuz-linux -u "root='''/dev/sda2''' rw initrd=/EFI/arch/initramfs-linux.img" 作成されたエントリが問題ないか確認するために次のコマンドを実行すると良いでしょう: # efibootmgr -v ブートの順番を設定するには、次を実行します: # efibootmgr -o XXXX,XXXX XXXX は `efibootmgr` コマンドによって出力されるそれぞれのエントリの番号に置き換えてください。 {{Tip|シェルスクリプトでブートエントリを作成するコマンドをどこかに保存しておけば、修正 (例えばカーネルパラメータの変更) が楽になります。}} efibootmgr の詳細は [[Unified Extensible Firmware Interface#efibootmgr|UEFI#efibootmgr]] で説明しています。フォーラムの投稿 https://bbs.archlinux.org/viewtopic.php?pid=1090040#p1090040 。
このページで使用されているテンプレート:
テンプレート:AUR
(
ソースを閲覧
)
テンプレート:Hc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:META Related articles start
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Related
(
ソースを閲覧
)
テンプレート:Related articles end
(
ソースを閲覧
)
テンプレート:Related articles start
(
ソースを閲覧
)
テンプレート:Tip
(
ソースを閲覧
)
EFI ブートスタブ
に戻る。
検索
検索
EFI ブートスタブのソースを表示
話題を追加