EFIブートパーティションを再作成する方法


10

私は私のマシン上でのFedoraをインストールした/パーティション、swapパーティションやESPEFIブート用パーティション。

今、私はFedoraの代わりにElementary OSをインストールしていました。

  1. /パーティションをフォーマットしました(/ dev / sda3)
  2. スワップパーティションをフォーマットしました(/ dev / sda4)
  3. しかし、EFIブートパーティション(/ dev / sda1)をフォーマットしませんでした

起動すると、Fedoraによってインストールされた古いgrubメニューが表示されます。Elementary OSで起動できるのは、次の方法のみです。

  1. 起動メニューに入る。
  2. EFIファイルからのブートの選択
  3. をナビゲートして/dev/sda1/、ファイルelementaryを含むディレクトリを取得しgrubx64.efiます。それは/boot/efi/EFI/elementary/grubx64.efiです。

どうすれば修正できますか?私は何かでブートパーティション/dev/sda1/をフォーマットし、fat16それからGRUBを再インストールすることを考えました。

私は/dev/sda1今これを含んでいます:

root@rafael:/home/rafael# ls /boot/efi/
EFI  mach_kernel  System

root@rafael:/home/rafael# ls /boot/efi/EFI/
BOOT/       elementary/ fedora/     

root@rafael:/home/rafael# ls /boot/efi/EFI/fedora/
BOOT.CSV  fonts  gcdx64.efi  grub.cfg  grubx64.efi  MokManager.efi  shim.efi  shim-fedora.efi

root@rafael:/home/rafael# ls /boot/efi/EFI/elementary/
grubx64.efi

これが私のefibootmgr出力です:

BootCurrent: 003D
Timeout: 0 seconds
BootOrder: 2001,2002,2003
Boot0000* Notebook Hard Drive
Boot0010* Internal CD/DVD ROM Drive
Boot0011* Internal CD/DVD ROM Drive (UEFI)
Boot0012* Fedora
Boot0013* Fedora
Boot0014* Fedora
Boot0015* Fedora
Boot0016* Fedora
Boot0017* Fedora
Boot0018* Fedora
Boot0019* Fedora
Boot001A* Fedora
Boot001B* Fedora
Boot001C* Fedora
Boot001D* Fedora
Boot001E* Fedora
Boot001F* elementary
Boot2001* USB Drive (UEFI)
Boot2002* Internal CD/DVD ROM Drive (UEFI)

任意の助けいただければ幸いです。


1
私は自分の記事のこのセット、決して使用EFIを提案することができます:rodsbooks.com/efi-bootloaders/index.htmlrodsbooks.com/efi-bootloaders/index.htmlrodsbooks.com/gdisk/whatsgpt.htmlを
Boris Burkov 2013

1
UEFIの実装には、F8のようなブート選択メニューがありますか?efibootmgrエレメンタリーのエントリが存在するかどうかを確認できるように、出力を投稿してください(確実ではありませんが)。ブートマネージャーとしてrefindすることもできます。そのシステムのE17をざっと見たい場合に備えて、正常に機能するイメージ(490M ISOリンク)と毎週のスナップショットがあります。それはおそらくEポリスに劣っている
マイケルShigorin

@MichaelShigorin OK、efibootmgr出力を追加しました。
ラファエルアデル

回答:


5

そもそもなぜgrubを使っているのか分かりません。UEFIはブートローダーとして機能し、ブートメニューから異なるオペレーティングシステムまたは個々のカーネルを選択できます。いくつかの例外はありますが、通常は2番目のブートローダー(この場合はgrub)をチェーンする必要はありません。

あなたは、Fedoraの代わりに基本OSをインストールしました、つまり、1つのオペレーティングシステムをロードするだけで済みます。ここでは、grub 使用せずにそれを行う方法を示します 。カーネルがEFI_STUBでコンパイルされている必要があります。

grep EFI_STUB /boot/config-<version>

カーネルとinitramfsをESP(EFIシステムパーティション)にコピーします。

cp /boot/vmlinuz-<version> /boot/efi/EFI/elementary/vmlinuz-<version>.efi
cp /boot/initrd.img-<version> /boot/efi/EFI/elementary/initrd.img-<version>

カーネルをUEFIのブートオプションとして登録する

echo "root=UUID=<disk_uuid> ro quiet rootfstype=ext4 add_efi_memmap initrd=\\EFI\\elementary\\initrd.img-<version>" |
  iconv -f ascii -t ucs2 |
  efibootmgr \
    --create --gpt \
    --disk /dev/<disk> --part <partition_number> \
    --label "Elementary OS" \
    --loader "\\EFI\\elementary\\vmlinuz-<version>.efi" \
    --write-signature --append-binary-args -

--disk引数はたとえば、ディスクのデバイス名を取り --disk /dev/sda--part引数は、次のコマンドを使用してESPパーティションの番号を見つけることができます例えば4、ESPのパーティション番号を取ります。

gdisk -l /dev/sda | awk '$6=="EF00" {print $1}'

カーネルを更新するたびに手順を繰り返してください

これを手動で(上記の手順を繰り返すだけ)、またはジョブを実行する小さなスクリプトを記述します。これを完全に自動化するために、スクリプトをカーネルのポストインストール手順、initramfsの更新後手順、およびカーネルのpostrm手順(UEFIブートエントリを削除するため)にフックできます。実際、ディストリビューションでこれがデフォルトで行われない理由はわかりません。数行のコードです。


うーん、私はしましgrep EFI_STUB /boot/config-3.2.0-49-genericたが、何も得ませんでした。
ラファエルアデル

カーネル3.2は古すぎ(2012年1月から)、EFI_STUBをサポートできません。少なくともカーネル3.3が必要です。
Marco

@RafaelAdel独自のカーネルを構築したくない場合は、ソフトウェアリポジトリで新しいカーネルバージョンを確認できます。ElementaryはUbuntuに基づいているようで、カーネル3.5または3.8が利用できるはずです。新しいものは、EFI_STUBを有効にする可能性が高くなります。
マルコ

実際には現在カーネル3.10.1があります。試してみるつもりです。
ラファエルアデル

2
マルコ、スタブの使用を助言することは、ディストリビューションでサポートされていないものを各ユーザーに案内し、「各カーネルのアップグレード後に行う」のように伝えない限り、無責任です。自動化するのは良いことですが、それほど良いことではありません。ALTLinuxでUEFIをサポートする責任者としてこれを伝えています。
Michael Shigorin

2

やったよ !

まず、不要なブートエントリをすべて削除しました。

efibootmgr -b <entry_hex_number> -B

次に、FAT32ファイルシステムを使用してESPパーティションを再フォーマットします。

mkfs.vfat -F32 /dev/sda1

次に、GRUBを/dev/sdaNOTにインストールしました/dev/sda1

grub-install /dev/sda

3
MBRを書き込むgrub-installは必要ありません。ディストリビューションのgrubが2つのことを一緒に行うかどうかはわかりませんが、grubx64.efi(またはshim.efi)を/ boot / efi / EFI / $ distro /およびefibootmgr -c -l / bootにコピーする必要があります/efi/EFI/$distro/grubx64.efi。
Lingzhu Xiang 2013

1
grub-installはEFIをgrokすることを学びました(--target = x86_64-efiを使用して強制することができますが、efivars.koはそのときまでにロードする必要があります)。
Michael Shigorin 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.