GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menginstal ulang GRUB2 EFI?

  • Boot komputer Anda dengan live-USB/CD dalam mode UEFI . Saya memiliki dua opsi boot <flash_drive> dan UEFI: <flash_drive> , yang kedua diperlukan untuk mengekspos variabel efi di /sys/firmware/efi/ sehingga efibootmgr jangan sampai gagal di kemudian hari. Mem-boot 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 berhasil untuk saya.

  • chroot ke dalam sistem yang rusak (mirip dengan bantuan ubuntu grub2 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
    
  • Bergantung pada distribusi linux Anda, Anda sekarang 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
      

      haruskah yang di atas memberi Anda grub, tetapi bukan yang bisa di-boot

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

      yum reinstall grub-efi
      

      Dalam perintah berikut, Anda harus mengganti sdX dengan perangkat yang memiliki partisi EFI tempat Anda ingin boot. Di --part Y Anda harus mengganti Y dengan nomor partisi EFI (seperti pada /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 berbeda, partisi /boot terpisah, dll.) dan ini mungkin bukan satu-satunya pilihan tetapi ini bekerja dengan baik untuk saya.

Sistem langsung yang cocok untuk memperbaiki sesuatu adalah grml. Ada juga panduan ekstensif tentang cara menyiapkan perangkat USB yang dapat di-boot, di mana bagian Mac sebenarnya paling berguna (cukup buat partisi FAT32, salin file, reboot, selesai).


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 live CD dan boot melalui UEFI. Menu GRUB CD akan ditampilkan. Tekan "c" untuk masuk ke baris perintah.

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

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

Setelah sistem Anda mem-boot dari hard disk, menginstal ulang grub pada partisi sistem EFI dan mendaftarkannya ke firmware melalui grub-install sudah cukup.

sudo grub-install

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

Dalam kasus saya, ini adalah Lenovo ThinkServer RD430 dengan Linux Mint Debian dan sepertinya apa saja Saya akan melakukan pembaruan-grub atau mengubah hard drive apa pun 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 menyebabkan UEFI tidak berfungsi)

Melakukan langkah-langkah yang persis sama pada ThinkServer TS140 tidak membuat UEFI kehilangan akal sekali pun. Melihat halaman driver RD430 dan bios saya berumur dua versi. Saya belum pernah memperbarui bios pada motherboard sebelumnya, jadi saya bukan orang yang memperbarui secara otomatis ketika ada versi baru yang tersedia. Setelah memperbarui bios, jawaban Maxine di atas berhasil, hanya dengan sedikit perubahan...

# 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 perintah menambahkan dua entri 0000 dan 0002 !
Boot0002* Linux HD entri pertama dalam urutan boot salah .
0000 entri benar.

Untuk mengujinya, saya mencoba mem-boot tanpa gangguan, yaitu 0002 pintu masuk. Seperti yang diharapkan, itu tidak berhasil. Jadi saya me-restart server, menekan F12, dan memilih linuxmint . Seperti yang diharapkan, boot ke instalasi LMDE saya.

Cara menghapus entri yang tidak diinginkan melalui efibootmgr adalah:

# efibootmgr -b 2 -B

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

Catatan UEFI

Jika Anda membaca ini dan sama frustrasinya dengan UEFI seperti saya, berikut adalah beberapa catatan dan sumber daya:
»Mem-boot 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 yang saya lihat menjelaskan penggunaan shell efi.
» Referensi shell uefi lainnya dari Panduan Administrator nPartisi .
» 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 dengan fat32 atau vfat.
» Untuk boot "generik" harus ada /EFI/boot direktori di root dengan bootx64.efi di dalamnya.
» Beberapa orang menyalin grubx64.efi mereka dari tempatnya dipasang ke /EFI/boot/bootx64.efi dan cheat ini berhasil untuk mereka.
» Setiap kali Anda melakukan perubahan grub, gunakan efibootmgr -v sebelum dan sesudah untuk memastikan reboot Anda baik-baik saja.

Pengalaman RD430 saya

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

Berikut adalah perubahan yang akan saya buat yang menyebabkan sistem saya tidak bisa boot:
» Ubah slot pci S3008L-L8i (biarkan kartu SSD+ saja).
» Nonaktifkan permintaan bios serangan perangkat lunak LSi untuk pengontrol onboard.
» Tambahkan kartu HighPoint RocketRaid lama saya ke slot PCIe terbuka.
» Lakukan perubahan pada /etc/default/grub lalu jalankan update-grub .
(mungkin grub-install perlu dijalankan juga? )


Linux
  1. Bagaimana Cara Downgrade Ke Subversion 1.6?

  2. Bagaimana Menginstal Ulang Driver Grafis Default?

  3. Cara Menginstal MongoDB di AlmaLinux 8

  1. Bagaimana cara menginstal Pdftk di server saya?

  2. Bagaimana cara menambahkan file sebagai sudo?

  3. Bagaimana cara menghapus flux di linux?

  1. Cara Menginstal Vagrant di Linux

  2. Cara mengatur vHost di Apache

  3. Bagaimana Cara `alias Sudo !!`?