web-dev-qa-db-ja.com

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

/パーティション、swapパーティション、およびEFIブート用のESPパーティションを使用して、自分のマシンにFedoraをインストールしました。

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

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

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

  1. 起動メニューに入る。
  2. EFIファイルからのブートの選択
  3. /dev/sda1/をナビゲートして、grubx64.efiファイルを含むelementaryディレクトリを取得します。 /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)

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

10
Rafael Adel

やったよ !

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

efibootmgr -b <entry_hex_number> -B

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

mkfs.vfat -F32 /dev/sda1

次に、/dev/sdaではなく/dev/sda1にgrubをインストールしました

grub-install /dev/sda
2
Rafael Adel

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

あなたが言及したのは、Fedoraの基本OS 代わりにをインストールした、つまりoneオペレーティングシステムをロードするだけでよいということです。ここでそれを行う方法を紹介しますなし 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ブートエントリを削除するため)にフックできます。実際、ディストリビューションでこれがデフォルトで行われない理由はわかりません。これは数行のコードです。

5
Marco