Bagaimana cara menginstal ulang GRUB2 EFI?


56

Setelah berhasil memperbarui bios saya, terjadi kesalahan dan saya berakhir dengan kursor yang berkedip di sudut kiri atas layar hitam. Tidak ada kesalahan, tidak apa-apa. Bios sekarang hanya mencantumkan SATA: <disc name>opsi boot sebagai pengganti UEFI yang biasa ubuntu. Saya menggunakan skema partisi GPT.

Saya akhirnya menemukan bahwa solusi yang berfungsi adalah menginstal ulang dengan benar grub-efi-amd64. Jadi, bagaimana saya melakukan ini?

PS: Sebenarnya, saya berhasil menginstal ulang GRUB2 EFI saya sendiri dan akan mengirim jawaban saya di sini karena saya tidak dapat menemukan cara lengkap untuk ini.


Saya mengalami masalah dengan dual boot saya: laptop Windows 10 / PCLinuxOS. Saya entah bagaimana kehilangan grub2 loader atau fungsionalitasnya. Setelah mencoba banyak contortions di atas tidak berhasil saya menemukan Grub2 Boot Rescue iso, membakarnya ke cd dan meninggalkannya di drive. Agak membosankan untuk melalui proses booting setiap kali tetapi setidaknya itu berhasil. Kemudian saya menemukan iso Boot Repair Disk dan membakarnya ke DVD. Pada titik ini drive saya benar-benar lemah dari upaya saya jadi saya memformat ulang dan menginstal ulang semuanya, Windows 10 dan Mint Sonya kali ini. Kemudian mem-boot Boot Repair Disk dan menginstal Grub2 ov
Keith Krehbiel

Jawaban:


87
  • Boot komputer Anda dengan live-USB / CD dalam mode UEFI . Saya punya dua opsi boot <flash_drive>dan UEFI: <flash_drive>, yang kedua diperlukan untuk mengekspos variabel efi /sys/firmware/efi/agar efibootmgrtidak gagal nanti. Booting dengan opsi pertama memberi saya kesalahan berikut:

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

    modprobe efivars tidak bekerja untuk saya.

  • chroot ke sistem yang rusak (mirip dengan bantuan grub2 ubuntu tetapi dengan kekhususan 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
    
  • Tergantung pada distribusi linux Anda, sekarang Anda melakukan hal yang berbeda.

    • Untuk Ubuntu / Debian :

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

      atau sebagai alternatif:

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

      seharusnya hal di atas memberi Anda grub, tetapi bukan yang dapat di-boot

    • Untuk Fedora (hingga 16, dapat bekerja untuk orang lain):

      yum reinstall grub-efi
      

      Pada perintah berikut, Anda harus mengganti sdX dengan perangkat yang memiliki partisi EFI yang ingin Anda boot. Di --part YAnda harus mengganti Y dengan nomor partisi EFI (seperti dalam /dev/sdXY).

      efibootmgr -c --disk /dev/sdX --part Y
      efibootmgr -v # verify a new record called Linux is there
      
  • Sekarang ketik Ctrl + D untuk keluar dari chroot, unmount semuanya dan reboot:

    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
    

Anda mungkin perlu menyesuaikan ini dengan kebutuhan Anda (tabel partisi yang berbeda, partisi yang terpisah / boot, dll.) Dan ini mungkin bukan satu-satunya pilihan tetapi ini bekerja dengan baik untuk saya.

Sistem live yang cocok untuk memperbaiki berbagai hal adalah grml . Ada juga panduan lengkap tentang cara mensetup perangkat USB yang dapat di-boot, yang bagian Mac-nya paling berguna sebenarnya (cukup buat partisi FAT32, salin file, reboot, selesai).


4
Kawan! Terima kasih banyak! Ini hanya menyelamatkan saya setelah Lenovo X220 saya tidak ingin boot lagi setelah reset, yang mengaktifkan pembaruan paket terbaru dan pada saat yang sama melihat saya melakukan reset BIOS karena itu seharusnya memperbaiki masalah koneksi dengan kartu 3G. Setelah itu boot menjadi mustahil, untuk alasan apa pun. Sampai saya menggunakan panduan Anda. BTW, bagian yang Anda salin resolv.conf tidak bekerja untuk saya, karena itu adalah symlink ke /run/resolvconf...(di Ubuntu 12.04), sebagai gantinya saya hanya digunakan mount --bind /run /mnt/rununtuk me-mount seluruh /rundirektori di lingkungan chroot.
nem75

Saya memberikan jawabannya dengan pengalaman saya untuk Fedora 16 dan referensi ke grml. Jika Anda dapat meninjau dan menerima hasil edit, saya akan senang.
Jonas Schäfer

1
Di Ubuntu (setidaknya untuk 12,04) update-grubtidak akan menyalin gambar grub2 terbaru ke partisi EFI Anda, itu hanya memperbarui grub.cfg. Jadi cara yang lebih baik untuk dilakukan adalah apt-get install --reinstall grub-efi(atau grub-efi-amd64) ini juga akan memanggil pembaruan-grub di akhir.
nomor

3
Disimpan media player saya kemarin. 300 poin internet untuk Anda.
Stefano Borini

2
Setelah menjalankan folder update-grubsaya /boot/efimasih kosong (saya telah membuat partisi baru ini). Hanya setelah menjalankan grub-installfile yang sebenarnya ditulis di sana. Panduan ini membantu saya (Jerman): wiki.ubuntuusers.de/EFI_Problembehebung
Philippe Gerber

8

Sebagai penyederhanaan potensial dari metode pertama, dimungkinkan untuk langsung mem-boot ke sistem pada hard disk, hanya menggunakan grub dari live CD. Diuji pada xubuntu 13.10 dengan live CD xubuntu 13.10.

Pastikan Boot Aman dinonaktifkan di BIOS Anda. Masukkan CD langsung dan boot melalui UEFI. Menu GRUB CD akan ditampilkan. Tekan "c" untuk sampai ke baris perintah.

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

Adaptasikan perintah grub di atas jika Anda memiliki partisi sistem EFI yang berbeda.

Setelah sistem Anda mem-boot dari hard disk, itu seharusnya cukup untuk menginstal ulang grub pada partisi sistem EFI dan untuk mendaftarkannya dengan firmware melalui grub-install.

sudo grub-install

Tidak bekerja configfile (hd0,gpt1)/EFI/ubuntu/grub.cfgtidak melakukan apa-apa. Bagaimana saya boot setelah mengeluarkan perintah ini?
Autodidact

3
Wow. Saya tidak berharap semudah itu! Ini adalah jawaban yang luar biasa! Saya menjalankan sudo grub-install --target=x86_64-efi --efi-directory=/boot/efidaripada perintah yang disarankan di atas (tapi yang di atas mungkin hanya berfungsi dengan baik - saya tidak tahu). Dan setelah itu Anda dapat mengakses OS linux Anda lagi. Kemudian jalankan saja sudo update-grubdan semuanya harus bisa di-boot.
Zorawar

@SandeepDatta: direktori efi Anda mungkin ada di disk / partisi yang berbeda. Saya berada di / dev / sdb1, jadi aku berlari: configfile (hd1,gpt1)/EFI/ubuntu/grub.cfg. Boot LiveCD dan jalankan sudo gparteduntuk menemukan partisi efi Anda.
Zorawar

5

Seperti Maxine, saya menemukan pengaturan UEFI di BIOS menjadi rusak dan mesin saya tidak mau boot.

Dalam kasus saya, ini adalah Lenovo ThinkServer RD430 dengan Linux Mint Debian dan sepertinya apa pun yang saya lakukan tentang pembaruan-grub atau mengubah hard drive di server akan menyebabkannya tidak bisa boot. OS dalam kasus saya adalah linuxmint-201403-mate-dvd-64bit diinstal melalui USB. (lihat di bawah untuk deskripsi lengkap tentang peristiwa yang akan menyebabkan UEFI tidak berfungsi)

Melewati langkah-langkah yang persis sama pada ThinkServer TS140 tidak mengakibatkan UEFI kehilangan akal sekalipun. Tampak pada halaman driver RD430 dan bios saya sudah dua versi. Saya belum pernah memperbarui BIOS pada motherboard sebelumnya, jadi saya tidak akan memperbarui secara otomatis ketika ada versi baru yang tersedia. Setelah memperbarui bios, jawaban Maxine di atas berhasil, hanya dengan sedikit ...

# 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 / # 

The efibootmgr -cperintah menambahkan dua entri 0000dan 0002!
The Boot0002* Linux HDentri pertama dalam urutan boot tidak benar .
The 0000entri benar.

Untuk menguji ini, saya mencoba mem-boot tanpa gangguan, yang merupakan 0002entri. Seperti yang diharapkan, itu tidak berhasil. Jadi saya me-restart server, tekan F12, dan memilih linuxmint. Seperti yang diharapkan, itu melakukan boot ke instalasi LMDE saya.

Cara untuk menghapus entri yang tidak diinginkan melalui efibootmgr adalah:

# efibootmgr -b 2 -B

Saya menggunakan perintah ini untuk menghapus entri 0001dan 0002. Opsi 0001adalah dari yang terakhir dari banyak upaya saya untuk memulihkan OS.


Catatan UEFI

Jika Anda membaca ini dan sama frustasinya dengan UEFI seperti saya sebelumnya, berikut adalah beberapa catatan dan sumber daya:
»Booting ke UEFI Shell mirip dengan menggunakan shell DOS.
»Intel membuat manual referensi PDF untuk perintah shell efi .
» Dokumen UEFI_on_TS430 Lenovo adalah satu-satunya sumber daya yang saya lihat menjelaskan penggunaan shell efi.
» Referensi shell uefi lain dari Panduan Administrator nPartition .
»Anda dapat mencoba mem-boot ke partisi dari shell efi dengan menavigasi ke loader dan menjalankannya.
»UEFI ingin disk memiliki tabel partisi GPT, bukan tabel bagian msdos.
»UEFI ingin partisi pertama pada disk Anda diformat fat32 atau vfat.
»Untuk boot" generik "harus ada /EFI/bootdirektori di root dengan bootx64.efidi dalamnya.
»Beberapa orang menyalin grubx64.efidari tempatnya diinstal /EFI/boot/bootx64.efidan cheat ini berhasil untuk mereka.
»Kapan saja Anda membuat perubahan grub, gunakan efibootmgr -vsebelum dan sesudah untuk memastikan reboot Anda ok.


Pengalaman RD430 saya

Saya telah menginstal resin OS 10+ kali dalam seminggu terakhir mencoba untuk menyelesaikan masalah ini dan mengatur server. Konfigurasi saya adalah SSD pada pengontrol RAID ini di slot PCIe 2.0 dengan LMDE diinstal di dalamnya. Kontroler AOC-S3008L-L8i RAID ( direfleksikan ke mode IT ) dalam slot 2nd PCIe 3.0 dengan drive 6x 3TB. RAM: 12GB ECC (3x 4GB).

Berikut adalah perubahan yang saya buat yang menyebabkan sistem saya tidak bisa boot:
»Ubah slot pci S3008L-L8i (meninggalkan kartu SSD + saja).
»Nonaktifkan prompt raid bios perangkat lunak LSi untuk pengontrol onboard.
»Tambahkan kartu HighPoint RocketRaid lama saya ke slot PCIe terbuka.
»Buat perubahan /etc/default/grublalu jalankan update-grub.
( mungkin grub-installperlu dijalankan juga? )


Saya sangat frustasi dengan UEFi. Saya telah menginstal Linux dengan BIOS tetapi sangat sulit untuk membuatnya bekerja dengan UEFi dan
memperbaikinya

3

Saya akan memilih ini, tetapi tampaknya saya tidak memiliki cukup perwakilan di SuperUser. Aku senang akhirnya menemukan jawaban untuk ini setelah berhari-hari klon bertarung yang bekerja tetapi tidak mau boot. Saya pikir itu semua berhubungan dengan UEFI dan semacam mekanisme "boot aman" atau sesuatu.

Saya bekerja di luar jaringan, jadi apt-get bukanlah pilihan. Apa yang saya lakukan adalah meletakkan Desktop Ubuntu pada stik USB, tambahkan paket grub-efidan grub-efi-amd64ke root stik USB (grub-efi_1.99 ~ rc1-13ubuntu3_amd64.deb dan grub-efi-amd64_1.99 ~ rc1-13ubuntu3_amd64.deb untuk Ubuntu 11,04 - ubah sesuai keperluan untuk distro dan arsitektur), dan letakkan yang berikut ini dalam skrip pada stik USB juga:

#! /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

Boot tongkat USB Live, buka terminal, jalankan perintah, dan pekerjaannya bagus! Satu-satunya masalah sesekali adalah bahwa UEFI terkadang dipindahkan ke urutan prioritas boot di bawah HDD, pada titik mana Anda harus masuk ke BIOS dan mengubah urutan boot untuk menghentikannya mencoba (dan gagal) SATA: drive.

Anda juga dapat menggunakannya dpkg-reconfiguresebagai pengganti dpkg -i, tetapi itu menanyakan beberapa pertanyaan tentang bootloader.

[Sunting] Saya juga tidak memiliki cukup perwakilan untuk berkomentar, jadi apa yang saya pikir adalah komentar pada balasan ternyata menjadi balasan.


Selamat datang! Sebenarnya Anda perlu 15 poin untuk memilih, 50 untuk berkomentar (lihat superuser.com/privileges ), lihat saja sekitar untuk pertanyaan mudah yang dapat Anda jawab dan Anda baik-baik saja, itu cara stackexchange untuk mengucapkan terima kasih :) Hati-hati skrip Anda tidak melepas apa pun sebelum mematikan. Senang itu membantu.
Maxime R.

Kebingungan lebih karena saya punya akun di situs terkait lainnya. Lupa saya baru di sisi ini. Linux biasanya meng-unmount saat shutdown, dan chroot dengan sebuah perintah kembali setelah selesai, jadi saya tidak berpikir itu akan menyebabkan masalah. Saya memang menemukan itu tidak akan dibatalkan jika Anda tidak UEFI boot distro langsung, tetapi itu bukan prioritas untuk menguji apakah sudo chroot /mnt /bin/sh -c "dpkg -i /tmp/grub-efi*.deb" && sudo shutdown -r nowmemberikan perilaku yang benar.
IBBoard

1

Pada Ubuntu 14.10 32 bit saya di Lenovo Yoga 2 Pro, saya berubah ke boot UEFI seperti ini:

  • membuat folder

    sudo su
    mkdir /boot/efi
    
  • pasang partisi "Sistem EFI" di /etc/fstab

    fdisk -l|grep EFI
    

    ini menunjukkan: /dev/sda2 2050048 2582527 532480 260M EFI System

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

    pasang partisi itu

    mount /boot/efi
    
  • instal grub-efi-amd64-bindan copot pemasangangrub-efi-ia32-bin

    aptitude install grub-efi-amd64-bin grub-efi-ia32-bin_
    
    grub-install --target=x86_64-efi
    
  • reboot Ubuntu dalam mode efi

    update-grub
    
  • menguji apakah boot dengan baik, maka saya menginstal grub-efi-amd64dan menghapus grub-pc grub-gfxpayload-listsdengan

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

Saya memilih untuk tidak menghapus / boot ketika ditanya.


Mungkin saya membuatnya rumit dan ini akan bekerja dengan baik:

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

0

Entri ini lebih sesuai dengan persiapan komputer Anda untuk menginstal ulang entri efi. Ini juga apa yang Anda temukan sebagai cara yang efektif dan sederhana untuk membuat disk penyelamat setelah instalasi sistem pada media internal (SSD, HDD).

Dengan Linux Mint Tara (varian Linux yang terkait erat dengan Ubuntu Bionic Beaver), metode ini membuat instalasi saya rusak, dan memungkinkan nantinya untuk menyimpannya. Itu muncul karena saya menginginkan USB live yang memiliki kegigihan, dan karena waktu untuk menginstal utilitas seperti Unetbootin untuk instalasi persisten kira-kira sama dengan instalasi baru, saya hanya menggunakan distribusi langsung yang sama untuk melakukan instalasi pada USB seperti digunakan untuk menginstal OS pada SSD internal.

Tentu saja, tidak satu pun dari ini adalah RAID atau pengaturan khusus lainnya, tetapi memang membutuhkan partisi volume yang disiapkan pada drive USB, dan instalasi dilakukan pada USB yang menggunakan metode distro yang tersedia, menghindari drive internal untuk menginstal pada satu mount root (/) partisi.

Di sinilah instalasi grub baru kusut dengan drive internal. Ketika saya reboot ke USB, entri grub UEFI internal sepertinya telah menghilang, hanya menyisakan menu grub ketika mencoba memilih drive menggunakan entri di menu BIOS.

Sebaliknya, booting dari USB menunjukkan bahwa metode distro telah menghasilkan menu grub yang sudah jadi, dengan daftar untuk / dev / sda2, partisi yang berisi mount / boot / efi. Di sebagian besar internal drive internal menginstal nama grub partisi adalah hd0, gpt1.

Menuju ke 'lanjutan', lebih dari satu penyelamatan kernel tersedia. Dari sana, jalankan utilitas grub dan kemudian boot secara normal.

Dari titik ini, menjalankan OS pada drive internal yang sebelumnya tidak dapat diakses, cabut USB, kemudian jalankan sudo grub-install.

Ketika Anda reboot tanpa USB, Anda harus dapat kembali. Pada titik ini USB dikonfigurasikan untuk meluncurkan drive internal ke mode normal atau penyelamatan, dan drive memiliki menu sendiri.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.