GNU/Linux >> Znalost Linux >  >> Linux

Jak přeinstalovat GRUB2 EFI?

  • Spusťte počítač pomocí živého USB/CD v režimu UEFI . Měl jsem dvě možnosti spouštění <flash_drive> a UEFI: <flash_drive> , druhý je potřebný k odhalení proměnných efi v /sys/firmware/efi/ takže efibootmgr neselhat později. Bootování s první možností mi dává následující chybu:

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

    modprobe efivars nefungovalo mi to.

  • chroot do poškozeného systému (podobně jako nápověda ubuntu grub2, ale s efi specifiky):

    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
    
  • V závislosti na vaší linuxové distribuci nyní děláte různé věci.

    • Pro Ubuntu/Debian :

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

      nebo alternativně:

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

      měl by vám výše uvedený grub, ale ne bootovatelný

    • Pro Fedora (až 16, může fungovat pro ostatní):

      yum reinstall grub-efi
      

      V následujícím příkazu musíte nahradit sdX zařízením, které má oddíl EFI, ze kterého chcete zavést systém. V --part Y musíte nahradit Y s číslem oddílu EFI (jako v /dev/sdXY ).

      efibootmgr -c --disk /dev/sdX --part Y
      efibootmgr -v # verify a new record called Linux is there
      
  • Nyní zadejte Ctrl+D pro ukončení chrootu vše odpojte a restartujte:

    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
    

Možná to budete muset přizpůsobit svým potřebám (jiná tabulka oddílů, samostatný oddíl /boot atd.) a nemusí to být jediná možnost, ale pro mě to fungovalo dobře.

Vhodný live-systém pro opravu věcí je grml. Existuje také rozsáhlý průvodce, jak nastavit zaváděcí USB zařízení, z nichž nejužitečnější je ve skutečnosti sekce Mac (stačí vytvořit oddíl FAT32, zkopírovat soubory, restartovat, hotovo).


Jako potenciální zjednodušení první metody je možné přímo zavést systém na pevném disku, pouze pomocí grub z živého CD. Testováno na xubuntu 13.10 s xubuntu 13.10 live CD.

Ujistěte se, že je v BIOSu zakázáno Secure Boot. Vložte živé CD a spusťte jej přes UEFI. Zobrazí se nabídka GRUB disku CD. stisknutím "c" se dostanete na příkazový řádek.

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

Pokud máte jiný systémový oddíl EFI, upravte výše uvedený příkaz grub.

Po zavedení systému z pevného disku by mělo stačit znovu nainstalovat grub na systémový oddíl EFI a zaregistrovat jej do firmwaru pomocí grub-install.

sudo grub-install

Stejně jako u Maxine jsem zjistil, že se moje nastavení UEFI v BIOSu poškodilo a můj počítač se nespustil.

V mém případě je to Lenovo ThinkServer RD430 s Linux Mint Debian a vypadalo to jakékoli Udělal bych update-grub nebo výměna jakýchkoli pevných disků na serveru by způsobila, že se nespustí. OS je v mém případě linuxmint-201403-mate-dvd-64bit nainstalovaný přes USB. (úplný popis událostí, které by způsobily nefunkčnost UEFI, naleznete níže)

Absolvování přesně stejných kroků na Think Server TS140 nevedlo k tomu, že by UEFI ztratilo rozum ani jednou. Podíval jsem se na stránku ovladače RD430 a můj bios je starý dvě verze. Nikdy předtím jsem nemusel aktualizovat bios na základní desce, takže nejsem z těch, kteří se automaticky aktualizují, když jsou k dispozici nové verze. Po aktualizaci biosu výše uvedená odpověď Maxine fungovala, jen se zvrtnutím...

# 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 příkaz přidal dvě položky 0000 a 0002 !
Boot0002* Linux HD záznam jako první v pořadí spouštění není správný .
0000 záznam je správný.

Abych to otestoval, zkusil jsem bootovat bez jakéhokoli přerušení, což je 0002 vstup. Podle očekávání to nevyšlo. Takže jsem restartoval server, zmáčkl F12 a zvolil linuxmint . Jak jsem doufal, nabootoval do mé instalace LMDE.

Způsob, jak odstranit nežádoucí položky pomocí efibootmgr, je:

# efibootmgr -b 2 -B

Tento příkaz jsem použil k odstranění položek 0001 a 0002 . Možnost 0001 byl z posledního z mnoha mých pokusů obnovit OS.

Poznámky UEFI

Pokud toto čtete a jste stejně frustrovaní UEFI jako já/byl jsem, zde jsou některé poznámky a zdroje:
» Zavedení do prostředí UEFI Shell je podobné použití prostředí DOS.
» Intel vytvořil referenční příručku ve formátu PDF pro příkazy shellu efi.
» Dokument UEFI_on_TS430 od Lenova je jediný zdroj, který jsem viděl vysvětlující použití efi shellu.
» Další odkaz na shell uefi z Příručky správce nPartition .
» Můžete zkusit zavést systém z efi shellu tak, že přejdete do zavaděče a spustíte jej.
» UEFI chce, aby měl disk tabulku oddílů GPT, nikoli tabulku částí msdos.
» UEFI chce, aby byl první oddíl na vašem disku naformátován jako fat32 nebo vfat.
» Pro "obecné" bootování musí existovat /EFI/boot adresář v kořenovém adresáři s bootx64.efi v něm.
» Někteří lidé zkopírují své grubx64.efi odkud byl nainstalován na /EFI/boot/bootx64.efi a tento cheat se jim osvědčil.
» Kdykoli provedete změny grub, použijte efibootmgr -v před a po, abyste se ujistili, že restartování je v pořádku.

Moje zkušenost s RD430

Za poslední týden jsem OS 10+krát přeinstaloval a snažil jsem se to vyřešit a nastavit server. Moje konfigurace je SSD na tomto řadiči RAID ve slotu PCIe 2.0 s nainstalovaným LMDE. Řadič RAID AOC-S3008L-L8i (přeflashovaný do režimu IT) ve 2. slotu PCIe 3.0 s 6x 3TB disky. RAM:12 GB ECC (3 x 4 GB).

Zde jsou změny, které bych provedl, které způsobily, že se můj systém nespustí:
» Vyměňte S3008L-L8i pci sloty (ponechte SSD+kartu samotnou).
» Deaktivujte výzvu LSi softwarového raid bios pro palubní řadič.
» Přidejte mou starou kartu HighPoint RocketRaid do otevřeného slotu PCIe.
» Proveďte změnu na /etc/default/grub a poté spusťte update-grub .
(možná grub-install musí být také spuštěn? )


Linux
  1. Jak nainstalovat Vagrant v Linuxu

  2. Jak přejít na nižší verzi Subversion 1.6?

  3. Jak přeinstalovat výchozí grafické ovladače?

  1. Jak nastavit vHosts v Apache

  2. Jak na `alias Sudo !!`?

  3. Jak nainstalovat MongoDB na Debian 11

  1. Jak nainstalovat Docker na Ubuntu 22.04

  2. Jak nainstalovat MongoDB na AlmaLinux 8

  3. Jak nainstaluji Pdftk na svůj server?