linux – GRUB2 EFIを再インストールするには?

64-bit linux uefi

バイオスのアップデートに成功した後、何かがおかしくなったと、黒い画面の左上にカーソルが点滅する状態になってしまいました。エラーも何もありません。バイオスは通常のUEFI ubuntu の代わりに SATA: <disc name> のブートオプションだけをリストアップしました。私はGPTパーティショニングスキームを使用しています

結局、grub-efi-amd64を適切に再インストールすることで解決することがわかりました。では、どのようにすればいいのでしょうか?

PS: 実は、自力でGRUB2 EFIの再インストールに成功したのですが、これに関する完全なハウツーが見つからなかったので、ここに回答を掲載します

  57  Maxime R.  2012-01-09


ベストアンサー

  • ライブUSB/CDを使ってUEFIモードでコンピュータを起動します。2つのブートオプション<flash_drive>UEFI: <flash_drive>があり、2つ目はefibootmgrが後で失敗しないように/sys/firmware/efi/でefi変数を公開するために必要です。最初のオプションで起動すると、以下のようなエラーが出ます

    Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
    Try 'modprobe efivars' as root.
    

    modprobe efivarsは私のために動作しませんでした

  • 壊れたシステムにchrootします(ubuntu grub2 helpに似ていますが、efiの特異性があります)

    sudo mount /dev/sda2 /mnt #sda2 is the root partition
    sudo mount /dev/sda1 /mnt/boot/efi #sda1 is the efi partition
    for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$i; done
    sudo cp /etc/resolv.conf /mnt/etc/ #makes the network available after chrooting
    modprobe efivars # make sure this is loaded
    sudo chroot /mnt
    
  • お使いのlinuxのディストリビューションに応じて、あなたは異なることをするようになりました

    • For Ubuntu/Debian:

      apt-get install --reinstall grub-efi-amd64
      

      or alternatively:

      apt-get install --reinstall grub-efi
      update-grub
      

      上記のようにすると、起動可能なものではなく、グラブを与えることができます

    • Fedora用(16まで。他のバージョンでも動作する場合があります)

      yum reinstall grub-efi
      

      以下のコマンドでは、sdX を起動したい EFI パーティションのあるデバイスに置き換えてください。--part Yでは、YをEFIパーティションの番号に置き換えます(/dev/sdXYのように)

      efibootmgr -c --disk /dev/sdX --part Y
      efibootmgr -v # verify a new record called Linux is there
      
  • ここで Ctrl+D を入力して chroot を終了し、すべてをアンマウントして再起動します

    for i in /sys /proc /dev/pts /dev; do sudo umount /mnt$i; done
    sudo umount /mnt/boot/efi #please do this. Corrupted efi partitions are not nice
    sudo umount /mnt
    sudo reboot
    

あなたのニーズに合わせる必要があるかもしれません (別のパーティションテーブル、別の /boot パーティションなど)

物事を修正するのに適したライブシステムは grml です。また、起動可能な USB デバイスを設定する方法について、詳細なガイドもありますが、その中でも Mac のセクションが最も有用です (FAT32 パーティションを作成して、ファイルをコピーし、再起動すれば完了です)

90  Maxime R.  2012-01-09


最初の方法の潜在的な単純化として、ライブCDのgrubのみを使用して、ハードディスク上のシステムに直接起動することが可能です。xubuntu 13.10のライブCDを使ってxubuntu 13.10でテストしました

BIOSでSecure Bootが無効になっていることを確認してください。ライブCDを挿入し、UEFI経由で起動します。CD の GRUB メニューが表示されます。 c」を押してコマンドラインに移動します

configfile (hd0,gpt1)/EFI/ubuntu/grub.cfg

別の EFI システムパーティションを使用している場合は、上記の grub コマンドを適用してください

システムがハードディスクから起動した後、EFI システムパーティションに grub を再インストールし、grub-install でファームウェアに登録すれば十分です

sudo grub-install

8  None  2014-02-24


Maxineと同様に、BIOSでUEFIの設定が破損してマシンが起動しないことがわかりました

私の場合は、Linux Mint Debianを搭載したLenovo ThinkServer RD430なのですが、update-grubやサーバーのハードドライブを変更しても起動しないようでした。私の場合のOSはlinuxmint-201403-mate-dvd-64bitをUSB経由でインストールしています。(UEFI が動作しない原因となるイベントの完全な説明は以下を参照してください)

ThinkServer TS140で全く同じ手順を踏んでも、UEFIは一度も気が狂うことはありませんでした。RD430のドライバページを見てみると、私のBIOSは2つのバージョンが古い。私は以前にマザーボードのBIOSを更新しなければならなかったことがないので、新しいバージョンが利用可能になったときに自動的に更新するものではありません。バイオスを更新した後、上記のMaxineさんの回答はうまくいきましたが、ひねりがあっただけでした

# efibootmgr -c --disk /dev/sdX --part Y
# efibootmgr -v
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0002,0000,0003,0001,0004
Boot0000* linuxmint HD(1,800,1f4000,829f6cc9-5b17-479c-b3ea-61e43faecbf7)File(\EFI\linuxmint\grubx64.efi)
Boot0001* LMDE Linux Mint Debian    HD(1,800,15d505800,934c598c-fe3c-fd43-84a1-fa38e4f72552)File(\EFI\linuxmint\grubx64.efi)
Boot0002* Linux HD(1,800,1f4000,829f6cc9-5b17-479c-b3ea-61e43faecbf7)File(\elilo.efi)
Boot0003* UEFI: Built-in EFI Shell  Vendor(5023b95c-db26-429b-a648-bd47664c8012,)AMBO
Boot0004* UEFI: VerbatimSTORE N GO 1.00 ACPI(a0341d0,0)PCI(1a,0)USB(1,0)USB(4,0)HD(1,80,1d70780,00000000)AMBO
mint / #

efibootmgr -cコマンドで00000002の2つのエントリが追加されました! ブート順の最初の Boot0002* Linux HD エントリは正しくありません。 0000 のエントリは正しいです

これをテストするために、0002のエントリである0002を中断せずに起動してみました。予想通り、うまくいきませんでした。そこで、サーバを再起動して F12 を押し、linuxmint を選択しました。期待通り、LMDE インストールで起動しました

efibootmgr経由で不要なエントリを削除する方法は、以下の通りです

# efibootmgr -b 2 -B

このコマンドを使って、エントリ 00010002 を削除しました。オプション 0001 は、OS を回復するために何度も試みた中で最後のものでした


UEFI notes

もしあなたがこれを読んでいて、私と同じように UEFI に不満を持っているのであれば、ここにいくつかの注意点とリソースがあります。 ” UEFI シェルへの起動は、DOS シェルを使うのと同じようなものです。 ” IntelはefiシェルコマンドのPDFリファレンスマニュアルを作成しました。 ” Lenovo の UEFI_on_TS430 ドキュメント は efi シェルの使い方を説明している唯一のリソースです。 ” nPartition Administrator’s Guideの別のuefiシェルリファレンス” ローダに移動して実行することで、efi シェルからパーティションを起動してみることができます。 ” UEFI はディスクが msdos パーティションテーブルではなく GPT パーティションテーブルを持つことを望んでいます。 ” UEFI はディスクの最初のパーティションを fat32 か vfat でフォーマットすることを望んでいます。 ” 「一般的な」ブートのためには、ルートに /EFI/boot ディレクトリと bootx64.efi ディレクトリがなければなりません。 ” grubx64.efi をインストールした場所から /EFI/boot/bootx64.efi にコピーする人がいますが、このチートはうまくいきました。 ” grub を変更するときはいつでも、再起動が問題ないことを確認するために efibootmgr -v を前後に使ってください


私のRD430の経験

この1週間でOSを10回以上も再インストールして、サーバのセットアップをしました。私の構成は、このRAIDコントローラにSSDを搭載し、PCIe 2.0スロットにLMDEをインストールしています。AOC-S3008L-L8i RAIDコントローラ(ITモードにリフラッシュ)を6台の3TBドライブを搭載した2番目のPCIe 3.0スロットに搭載。RAM: 12GB ECC (4GB×3)

システムが起動しない原因となった変更点は以下の通りです。 “S3008L-L8i pci スロットを変更します。 “オンボードコントローラのLSiソフトウェアRAIDバイオスプロンプトを無効にする。 “古いHighPoint RocketRaidカードをPCIeスロットに追加。 ” /etc/default/grubに変更してからupdate-grubを実行。(grub-installも実行する必要があるかも?)

5  Chris K  2014-03-20


私はこれに投票するだろうが、どうやら私はSuperUserに十分な支持を持っていないようだ。何日もクローンと戦ってきて、やっと答えが見つかって嬉しいです。私はそれがすべてUEFIとある種の「安全な起動」メカニズムか何かに関係していると思います

オフラインで作業しているので、apt-getは選択肢にありませんでした。何をしたかというと、Ubuntu DesktopをUSBスティックに入れて、USBスティックのルートにgrub-efigrub-efi-amd64のパッケージを追加し(Ubuntu 11.04の場合はgrub-efi_1.99~rc1-13ubuntu3_amd64.debとgrub-efi-amd64_1.99~rc1-13ubuntu3_amd64.deb – ディストロやアーキテクチャに合わせて適宜変更)、USBスティック上のスクリプトに以下のように入れています

#! /bin/bash
sudo mount /dev/sda2 /mnt
sudo mount /dev/sda1 /mnt/boot/efi
dir=`dirname $0`
sudo cp $dir/grub-efi*.deb /mnt/tmp
for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt /bin/sh -c "dpkg -i /tmp/grub-efi*.deb"
sudo shutdown -r now

Live USBスティックを起動して、ターミナルを開き、コマンドを実行すれば、仕事はうまくいきます!唯一の時折の問題は、UEFIがHDDの下のブート優先順位の下に移動してしまうことがあることです

dpkg -i の代わりに dpkg-reconfigure を使うこともできますが、ブートローダの質問がいくつか出てきます

編集] 私もコメントするほどのリプライがないので、リプライのコメントだと思っていたものがリプライになってしまいました

3  IBBoard  2012-03-01


Lenovo Yoga 2 Proの32bit Ubuntu 14.10では、こんな感じでUEFIブートに変更しました

  • create folder

    sudo su
    mkdir /boot/efi
    
  • /etc/fstabに “EFI System “パーティションをマウントします

    fdisk -l|grep EFI
    

    と表示されました。/dev/sda2 2050048 2582527 532480 260M EFI System

    echo "/dev/sda2 /boot/efi   vfat    defaults,sync   0   0">>/etc/fstab
    

    そのパーティションをマウントします

    mount /boot/efi
    
  • grub-efi-amd64-binをインストールし、grub-efi-ia32-binをアンインストールします

    aptitude install grub-efi-amd64-bin grub-efi-ia32-bin_
    
    grub-install --target=x86_64-efi
    
  • efiモードでUbuntuを再起動します

    update-grub
    
  • 正常に起動するかテストして、grub-efi-amd64をインストールし、grub-pc grub-gfxpayload-listsをアンインストールしてみました

    aptitude install grub-efi-amd64 grub-pc_ grub-gfxpayload-lists_
    

私は聞かれたら/bootを削除しないことにしています


もしかしたら、私が複雑にしたことで、これがうまくいったのかもしれません

apt-get install --reinstall grub-efi
update-grub

1  rubo77  2015-01-21


このエントリは、どちらかというと efi エントリを再インストールするためにコンピュータを準備するという内容に沿ったものです。また、内部メディア (SSD, HDD) にシステムをインストールした後にレスキューディスクを作成するための効果的で簡単な方法を紹介しています

Linux Mint Tara (Ubuntu Bionic Beaverと密接に関連したLinuxの変種)では、この方法は私のインストールを停止させ、後でそれを保存することを可能にしました。これは、USBに永続性を持たせたいと思っていたことから生まれたもので、永続的なインストールのためにUnetbootinのようなユーティリティをインストールする時間は、新鮮なインストールとほぼ同じなので、私は単に内蔵SSDにOSをインストールするために使用されたのと同じライブディストリビューションをUSBにインストールするために使用しました

もちろん、これは RAID やその他の特殊な設定ではありませんが、USB ドライブ上にボリュームパーティションを用意し、その USB 上にディストロの利用可能な方法でインストールを行い、内部ドライブを回避して単一パーティションのルート (/) マウントにインストールする必要がありました

ここで新しい grub のインストールが内蔵ドライブに絡んできました。USBに再起動すると、BIOSメニューのエントリを使ってドライブを選択しようとすると、内蔵UEFIのgrubエントリが消えているようで、grubメニューだけが残っていました

代わりに USB から起動すると、ディストロの方法は /dev/sda2、/boot/efi マウントを含むパーティションのリストを持つ既製の grub メニューを生成していることがわかりました。ほとんどのプライマリ内蔵ドライブでは、パーティションの grub 名は hd0, gpt1 です

advanced」に入ると、複数のカーネルレスキューが用意されていました。そこからgrubユーティリティを実行して普通に起動

ここからは、今までアクセスできなかった内蔵ドライブにOSを実行し、USBを抜いてsudo grub-installを実行します

USBを入れずに再起動すると、また入ってくるはずです。この時点でUSBは内蔵ドライブをノーマルモードまたはレスキューモードに起動するように設定されており、ドライブには独自のメニューが用意されています

0  Tim Pozza  2018-08-08


タイトルとURLをコピーしました