Làm cách nào để cài đặt lại GRUB2 EFI?


56

Sau khi cập nhật thành công bios của tôi, một cái gì đó đã sai và tôi đã kết thúc với một con trỏ nhấp nháy ở góc trên cùng bên trái của màn hình đen. Không có lỗi, không có gì. Hiện tại bios chỉ liệt kê một SATA: <disc name>tùy chọn khởi động thay cho UEFI thông thường ubuntu. Tôi đang sử dụng sơ đồ phân vùng GPT.

Cuối cùng tôi thấy rằng giải pháp làm việc là cài đặt lại đúng cách grub-efi-amd64. Vì vậy, làm thế nào để tôi làm điều này?

PS: Trên thực tế, tôi đã thành công khi tự cài đặt lại GRUB2 EFI và sẽ đăng câu trả lời của mình lên đây vì tôi không thể tìm thấy bất kỳ hướng dẫn hoàn chỉnh nào về việc này.


Tôi gặp sự cố với khởi động kép của mình: máy tính xách tay Windows 10 / PCLinuxOS. Tôi bằng cách nào đó đã mất trình tải grub2 hoặc chức năng. Sau khi thử rất nhiều mâu thuẫn ở trên không thành công, tôi tình cờ thấy chiếc iso Grub2 Boot Cứu, ghi nó vào đĩa cd và để nó trong ổ đĩa. Đó là một chút tẻ nhạt để trải qua quá trình khởi động mỗi lần nhưng ít nhất nó đã làm việc. Sau đó, tôi tìm thấy iso Boot Repair Disk và ghi nó vào đĩa DVD. Tại thời điểm này, ổ đĩa của tôi thực sự không ổn định từ những nỗ lực của tôi vì vậy tôi đã định dạng lại và cài đặt lại mọi thứ, Windows 10 và Mint Sonya lần này. Sau đó khởi động Boot Repair Disk và cài đặt Grub2 ov
Keith Krehbiel

Câu trả lời:


87
  • Khởi động máy tính của bạn với USB / CD trực tiếp ở chế độ UEFI . Tôi đã có hai tùy chọn khởi động <flash_drive>UEFI: <flash_drive>, thứ hai là cần thiết để hiển thị các biến efi /sys/firmware/efi/để efibootmgrsau này không bị lỗi. Khởi động với tùy chọn đầu tiên cho tôi lỗi sau:

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

    modprobe efivars đã không làm việc cho tôi.

  • chroot vào hệ thống bị hỏng (tương tự như trợ giúp ub Ubuntu grub2 nhưng với đặc thù của 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
    
  • Tùy thuộc vào bản phân phối linux của bạn, bây giờ bạn làm những việc khác nhau.

    • Đối với Ubuntu / Debian :

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

      Hay cách khác:

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

      Nếu ở trên cung cấp cho bạn một grub, nhưng không phải là một khả năng khởi động

    • Đối với Fedora (tối đa 16, có thể làm việc cho người khác):

      yum reinstall grub-efi
      

      Trong lệnh sau, bạn phải thay thế sdX bằng thiết bị có phân vùng EFI mà bạn muốn khởi động. Trong --part Ybạn phải thay thế Y bằng số phân vùng EFI (như trong /dev/sdXY).

      efibootmgr -c --disk /dev/sdX --part Y
      efibootmgr -v # verify a new record called Linux is there
      
  • Bây giờ, gõ Ctrl + D để thoát chroot, ngắt kết nối mọi thứ và khởi động lại:

    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
    

Bạn có thể cần điều chỉnh nhu cầu này theo nhu cầu của mình (bảng phân vùng khác, phân vùng khởi động / tách riêng, v.v.) và nó có thể không phải là lựa chọn duy nhất nhưng điều này chỉ hoạt động tốt với tôi.

Một hệ thống sống phù hợp để sửa chữa mọi thứ là grml . Ngoài ra còn có một hướng dẫn mở rộng về cách thiết lập thiết bị USB có thể khởi động, trong đó phần Mac thực sự hữu ích nhất (chỉ cần tạo phân vùng FAT32, sao chép tệp, khởi động lại, thực hiện).


4
Anh bạn! Cảm ơn rất nhiều! Điều này chỉ giúp tôi tiết kiệm sau khi Lenovo X220 của tôi không muốn khởi động nữa sau khi thiết lập lại, điều này đã kích hoạt các bản cập nhật gói mới nhất và đồng thời thấy tôi thực hiện thiết lập lại BIOS vì điều đó được cho là đã khắc phục sự cố kết nối với thẻ 3G. Sau đó, việc khởi động trở nên không thể, vì bất kỳ lý do gì. Cho đến khi tôi sử dụng hướng dẫn của bạn. BTW, phần mà bạn đã sao chép tệp giải quyết. Tôi không làm việc cho tôi, vì đó là một liên kết tượng trưng vào /run/resolvconf...(trong Ubuntu 12.04), thay vào đó tôi chỉ sử dụng mount --bind /run /mnt/runđể gắn toàn bộ /runthư mục trong môi trường chroot.
nem75

Tôi đã mở rộng câu trả lời với những trải nghiệm của mình cho Fedora 16 và một tài liệu tham khảo về grml. Nếu bạn có thể xem lại và chấp nhận chỉnh sửa, tôi sẽ rất vui.
Jonas Schäfer

1
Trên Ubuntu (ít nhất là 12.04) update-grubsẽ không sao chép hình ảnh grub2 mới nhất vào phân vùng EFI của bạn, nó chỉ cập nhật grub.cfg. Vì vậy, cách tốt hơn để làm là apt-get install --reinstall grub-efi(hoặc grub-efi-amd64) điều này cũng sẽ gọi update-grub ở cuối.
5

3
Đã lưu máy nghe nhạc của tôi ngày hôm qua. 300 điểm internet cho bạn.
Stefano Borini

2
Sau khi chạy thư mục update-grubcủa tôi /boot/efivẫn trống (tôi đã tạo phân vùng mới này). Chỉ sau khi chạy grub-installcác tập tin thực tế đã được viết ở đó. Hướng dẫn này đã giúp tôi (tiếng Đức): wiki.ubfoxusers.de/EFI_Problembehebung
Philippe Gerber

8

Là một đơn giản hóa tiềm năng của phương pháp đầu tiên, có thể khởi động trực tiếp vào hệ thống trên đĩa cứng, chỉ sử dụng grub của đĩa CD trực tiếp. Đã thử nghiệm trên xubfox 13.10 với CD trực tiếp xubfox 13.10.

Đảm bảo rằng Secure Boot bị vô hiệu hóa trong BIOS của bạn. Đưa đĩa CD trực tiếp và khởi động nó qua UEFI. Menu GRUB của CD sẽ hiển thị. Nhấn "c" để đến dòng lệnh.

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

Điều chỉnh lệnh grub ở trên nếu bạn có phân vùng hệ thống EFI khác.

Sau khi hệ thống của bạn đã khởi động từ đĩa cứng, nó sẽ đủ để cài đặt lại grub trên phân vùng hệ thống EFI và đăng ký nó với phần sụn thông qua cài đặt grub.

sudo grub-install

Không hoạt động. configfile (hd0,gpt1)/EFI/ubuntu/grub.cfgKhông lam gi cả. Làm thế nào để tôi khởi động sau khi ban hành lệnh này?
Tự động hóa

3
Ồ Tôi không ngờ nó lại dễ đến thế! Đây là một địa ngục của một câu trả lời! Tôi đã chạy sudo grub-install --target=x86_64-efi --efi-directory=/boot/efichứ không phải lệnh được đề xuất ở trên (nhưng lệnh trên có thể chỉ hoạt động tốt - tôi không biết). Và sau đó bạn có thể truy cập lại hệ điều hành linux của mình. Sau đó, chỉ cần chạy sudo update-grubvà mọi thứ nên có khả năng khởi động.
Zorawar

@SandeepDatta: thư mục efi của bạn có thể nằm trên một đĩa / phân vùng khác. Của tôi là trên / dev / sdb1, vì vậy tôi đã chạy : configfile (hd1,gpt1)/EFI/ubuntu/grub.cfg. Khởi động LiveCD và chạy sudo gpartedđể xác định vị trí phân vùng efi của bạn.
Zorawar

5

Như với Maxine, tôi thấy các cài đặt UEFI của mình trong BIOS bị hỏng và máy của tôi sẽ không khởi động.

Trong trường hợp của tôi, đó là Lenovo ThinkServer RD430 với Linux Mint Debian và dường như bất cứ điều gì tôi làm về việc cập nhật hoặc thay đổi bất kỳ ổ cứng nào trong máy chủ sẽ khiến nó không khởi động được. Hệ điều hành trong trường hợp của tôi là linuxmint-201403-mate-dvd-64bit được cài đặt qua USB. (xem bên dưới để biết mô tả đầy đủ về các sự kiện sẽ khiến UEFI không hoạt động)

Trải qua chính xác các bước tương tự trên ThinkServer TS140 đã không khiến UEFI mất trí dù chỉ một lần. Nhìn vào trang trình điều khiển RD430 và bios của tôi là hai phiên bản cũ. Tôi chưa bao giờ phải cập nhật bios trên bo mạch chủ trước đây, vì vậy tôi không phải là người tự động cập nhật khi có phiên bản mới. Sau khi cập nhật bios, câu trả lời của Maxine ở trên đã hoạt động, chỉ với một ...

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

Các efibootmgr -clệnh bổ sung thêm hai mục 00000002!
Các Boot0002* Linux HDentry đầu tiên trong thứ tự khởi động là không đúng .
Các 0000entry là đúng.

Để kiểm tra điều này, tôi đã thử khởi động mà không bị gián đoạn, đó là 0002mục. Như mong đợi, nó đã không hoạt động. Vì vậy, tôi khởi động lại máy chủ, nhấn F12 và chọn linuxmint. Như hy vọng, nó đã khởi động để cài đặt LMDE của tôi.

Cách để loại bỏ các mục không mong muốn thông qua efibootmgr là:

# efibootmgr -b 2 -B

Tôi đã sử dụng lệnh này để loại bỏ các mục 00010002. Tùy chọn 0001là từ cuối cùng trong nhiều nỗ lực của tôi để khôi phục hệ điều hành.


Ghi chú UEFI

Nếu bạn đang đọc điều này và cảm thấy thất vọng với UEFI như tôi đang có, đây là một số lưu ý và tài nguyên:
»Khởi động vào UEFI Shell giống như sử dụng trình bao DOS.
»Intel đã tạo một tài liệu tham khảo PDF cho các lệnh shell efi .
» Tài liệu UEFI_on_TS430 của Lenovo là tài nguyên duy nhất tôi thấy khi giải thích việc sử dụng vỏ efi.
» Một tham chiếu vỏ uefi khác từ Hướng dẫn của quản trị viên nPartition .
»Bạn có thể thử khởi động vào một phân vùng từ trình bao efi bằng cách điều hướng đến trình tải và thực hiện nó.
»UEFI muốn đĩa có bảng phân vùng GPT, không phải bảng phần msdos.
»UEFI muốn phân vùng đầu tiên trên đĩa của bạn được định dạng fat32 hoặc vfat.
»Để khởi động" chung ", phải có một /EFI/bootthư mục gốc cùng với bootx64.efinó.
»Một số người sao chép grubx64.efitừ nơi nó được cài đặt /EFI/boot/bootx64.efivà cheat này hoạt động với họ.
»Bất cứ khi nào bạn thực hiện thay đổi grub, sử dụng efibootmgr -vtrước và sau để đảm bảo khởi động lại của bạn là ok.


Trải nghiệm RD430 của tôi

Tôi đã cài đặt lại HĐH hơn 10 lần trong tuần qua khi cố gắng sắp xếp thứ này và thiết lập máy chủ. Cấu hình của tôi là một ổ SSD trên bộ điều khiển RAID này trong khe cắm PCIe 2.0 với LMDE được cài đặt trên nó. Bộ điều khiển RAID AOC-S3008L-L8i (được chuyển sang chế độ CNTT ) trong khe cắm PCIe 3.0 thứ 2 với ổ đĩa 6x3TB. RAM: 12GB ECC (3x 4GB).

Dưới đây là những thay đổi tôi sẽ thực hiện khiến hệ thống của tôi không khởi động được:
»Thay đổi khe cắm pci S3008L-L8i (để riêng thẻ SSD +).
»Vô hiệu hóa lời nhắc bios đột kích phần mềm LSi cho bộ điều khiển trên tàu.
»Thêm thẻ RocketRaid HighPoint cũ của tôi vào khe cắm PCIe đang mở.
»Thay đổi /etc/default/grubvà sau đó chạy update-grub.
( có lẽ cũng grub-installcần phải chạy? )


Tôi rất thất vọng với UEFi. Tôi đã cài đặt Linux với BIOS nhưng rất khó để làm cho nó hoạt động với UEFi và refind
Suici Doga

3

Tôi sẽ bỏ phiếu này, nhưng dường như tôi không có đủ đại diện trên SuperUser. Tôi rất vui vì cuối cùng tôi đã tìm thấy câu trả lời cho điều này sau nhiều ngày chiến đấu với các bản sao hoạt động nhưng không khởi động được. Tôi nghĩ tất cả đều liên quan đến UEFI và một số loại cơ chế "khởi động an toàn" hoặc một cái gì đó.

Tôi đang làm việc ngoại tuyến, vì vậy apt-get không phải là một lựa chọn. Những gì tôi đã làm là đặt Ubuntu Desktop vào một thanh USB, thêm các gói grub-efigrub-efi-amd64gói vào gốc của thanh USB (grub-efi_1.99 ~ rc1-13ubfox3_amd64.deb và grub-efi-amd64_1.99 ~ rc1-13ub Ubuntu3_amd64.deb cho Ubuntu 11.04 - thay đổi khi thích hợp cho bản phân phối và kiến ​​trúc) và cũng đặt đoạn mã sau vào tập lệnh trên thanh 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

Khởi động thanh Live USB, mở một thiết bị đầu cuối, chạy lệnh và công việc là một 'un! Vấn đề không thường xuyên là đôi khi UEFI đã chuyển xuống thứ tự ưu tiên khởi động bên dưới ổ cứng, tại thời điểm đó bạn cần vào BIOS và thay đổi thứ tự khởi động để dừng thử (và không thành công) SATA: drive.

Bạn cũng có thể sử dụng dpkg-reconfigurethay vì dpkg -i, nhưng điều đó đặt ra một số câu hỏi về bộ tải khởi động.

[sửa] Tôi cũng không có đủ đại diện để bình luận, vì vậy những gì tôi nghĩ là một nhận xét về một câu trả lời hóa ra là một câu trả lời.


Chào mừng bạn trên tàu! Trên thực tế, bạn cần 15 điểm để bình chọn, 50 để bình luận (xem superuser.com/priv đặc biệt ), chỉ cần nhìn xung quanh để biết các câu hỏi dễ dàng mà bạn có thể trả lời và đó là cách tốt để nói lời cảm ơn :) Hãy coi chừng kịch bản của bạn không 'T unmount bất cứ điều gì trước khi tắt. Vui vì nó đã giúp.
Maxime R.

Nhầm lẫn là nhiều hơn bởi vì tôi đã có tài khoản trên các trang web liên quan khác. Quên tôi là người mới ở bên này. Linux thường ngắt kết nối khi tắt máy và chroot với lệnh trả về sau khi hoàn thành, vì vậy tôi không nghĩ rằng nó sẽ gây ra sự cố. Tôi đã thấy rằng nó sẽ không hủy bỏ nếu bạn không khởi động phân phối trực tiếp, nhưng đó không phải là ưu tiên để kiểm tra xem có sudo chroot /mnt /bin/sh -c "dpkg -i /tmp/grub-efi*.deb" && sudo shutdown -r nowđưa ra hành vi đúng hay không.
IBBoard

1

Trên Ubuntu 14.10 32 bit của tôi trên Lenovo Yoga 2 Pro, tôi đã đổi sang boot UEFI như thế này:

  • tạo thư mục

    sudo su
    mkdir /boot/efi
    
  • gắn kết phân vùng "Hệ thống EFI" trong /etc/fstab

    fdisk -l|grep EFI
    

    điều này cho thấy: /dev/sda2 2050048 2582527 532480 260M EFI System

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

    gắn kết phân vùng đó

    mount /boot/efi
    
  • cài đặt grub-efi-amd64-binvà gỡ cài đặtgrub-efi-ia32-bin

    aptitude install grub-efi-amd64-bin grub-efi-ia32-bin_
    
    grub-install --target=x86_64-efi
    
  • khởi động lại Ubuntu ở chế độ efi

    update-grub
    
  • kiểm tra nếu nó khởi động tốt, sau đó tôi cài đặt grub-efi-amd64và gỡ cài đặt grub-pc grub-gfxpayload-listsvới

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

Tôi chọn không loại bỏ / khởi động khi được yêu cầu.


Có lẽ tôi đã làm cho nó phức tạp và điều này sẽ làm việc tốt:

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

0

Mục này phù hợp hơn với việc chuẩn bị máy tính của bạn để cài đặt lại các mục efi. Đó cũng là những gì bạn có thể thấy là một cách hiệu quả và đơn giản để tạo đĩa cứu hộ sau khi cài đặt hệ thống trên phương tiện truyền thông nội bộ (SSD, HDD).

Với Linux Mint Tara (một biến thể Linux có liên quan chặt chẽ với Ubuntu Bionic Beaver), phương pháp vừa làm hỏng quá trình cài đặt của tôi, vừa có thể lưu lại sau này để lưu nó. Nó nảy sinh từ việc tôi muốn có một chiếc USB sống còn tồn tại và vì thời gian cài đặt một tiện ích như Unetbootin cho một bản cài đặt liên tục gần giống như một bản cài đặt mới, tôi chỉ đơn giản sử dụng cùng một bản phân phối trực tiếp để cài đặt trên USB như đã được sử dụng để cài đặt hệ điều hành trên ổ SSD bên trong.

Tất nhiên, không ai trong số này là RAID hoặc bất kỳ thiết lập chuyên dụng nào khác, nhưng nó yêu cầu phân vùng âm lượng đã chuẩn bị trên ổ USB và cài đặt được thực hiện trên USB đó bằng phương pháp có sẵn của distro, phá vỡ ổ đĩa trong để cài đặt trên một gốc của phân vùng (/) mount.

Đây là nơi cài đặt grub mới bị rối với ổ đĩa trong. Khi tôi khởi động lại vào USB, các mục grub UEFI bên trong dường như đã biến mất, chỉ còn lại menu grub khi cố gắng chọn ổ đĩa bằng các mục trong menu BIOS.

Thay vào đó, việc khởi động từ USB cho thấy phương thức của distro đã tạo ra một menu grub làm sẵn, với một danh sách cho / dev / sda2, phân vùng chứa mount / boot / efi. Trong hầu hết các ổ đĩa chính cài đặt tên grub của phân vùng là hd0, gpt1.

Đi sâu vào 'nâng cao', hơn một giải cứu hạt nhân đã có sẵn. Từ đó, chạy tiện ích grub và sau đó khởi động bình thường.

Từ thời điểm này, chạy HĐH trên ổ đĩa trong mà trước đây không thể truy cập được, rút ​​USB, sau đó chạy sudo grub-install.

Khi bạn khởi động lại mà không cần USB, bạn sẽ có thể quay lại. Lúc này, USB được cấu hình để khởi động ổ đĩa trong sang chế độ bình thường hoặc cứu hộ và ổ đĩa có menu riêng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.