Làm thế nào để tạo lại phân vùng khởi động EFI?


10

Tôi đã cài đặt Fedora trên máy của mình với /phân vùng, swapphân vùng và ESPphân vùng để khởi động EFI.

Bây giờ, tôi đã cài đặt HĐH sơ cấp thay vì Fedora.

  1. Tôi đã định dạng /phân vùng (/ dev / sda3)
  2. Định dạng phân vùng trao đổi (/ dev / sda4)
  3. Nhưng không định dạng phân vùng khởi động EFI (/ dev / sda1)

Bây giờ khi tôi khởi động, tôi nhận được menu grub cũ đã được Fedora cài đặt. Tôi chỉ có thể khởi động vào HĐH sơ cấp bằng cách:

  1. Vào menu khởi động.
  2. Chọn khởi động từ tệp EFI
  3. Điều hướng qua /dev/sda1/, để có được elementarythư mục chứa grubx64.efitập tin. Đó là /boot/efi/EFI/elementary/grubx64.efi.

Lam sao tôi co thể sửa no ? Tôi nghĩ đến việc định dạng phân vùng khởi động /dev/sda1/với fat16hoặc một cái gì đó sau đó cài đặt lại grub trên nó.

/dev/sda1Bây giờ của tôi có chứa điều này:

root@rafael:/home/rafael# ls /boot/efi/
EFI  mach_kernel  System

root@rafael:/home/rafael# ls /boot/efi/EFI/
BOOT/       elementary/ fedora/     

root@rafael:/home/rafael# ls /boot/efi/EFI/fedora/
BOOT.CSV  fonts  gcdx64.efi  grub.cfg  grubx64.efi  MokManager.efi  shim.efi  shim-fedora.efi

root@rafael:/home/rafael# ls /boot/efi/EFI/elementary/
grubx64.efi

Đây là efibootmgrđầu ra của tôi :

BootCurrent: 003D
Timeout: 0 seconds
BootOrder: 2001,2002,2003
Boot0000* Notebook Hard Drive
Boot0010* Internal CD/DVD ROM Drive
Boot0011* Internal CD/DVD ROM Drive (UEFI)
Boot0012* Fedora
Boot0013* Fedora
Boot0014* Fedora
Boot0015* Fedora
Boot0016* Fedora
Boot0017* Fedora
Boot0018* Fedora
Boot0019* Fedora
Boot001A* Fedora
Boot001B* Fedora
Boot001C* Fedora
Boot001D* Fedora
Boot001E* Fedora
Boot001F* elementary
Boot2001* USB Drive (UEFI)
Boot2002* Internal CD/DVD ROM Drive (UEFI)

Bất kỳ trợ giúp sẽ được đánh giá cao.


1
Tôi chỉ có thể đề xuất nhóm bài viết này, không bao giờ sử dụng EFI cho mình: Rodbooks.com/efi-bootloaders/index.html , Rodbooks.com/efi-bootloaders/index.html , Rodbooks.com/gdisk/whatsgpt.html .
Boris Burkov

1
Việc triển khai UEFI của bạn có bất kỳ loại menu chọn khởi động nào như F8 hay không? Vui lòng gửi efibootmgrđầu ra để có thể biết liệu mục nhập của trường tiểu học có ở đó không (có vẻ như không chắc chắn). Bạn cũng có thể thích refind làm trình quản lý khởi động của bạn. Chỉ trong trường hợp bạn muốn xem nhanh E17 trên hệ thống đó, có một hình ảnh chỉ hoạt động (liên kết ISO 490M) cũng như ảnh chụp nhanh hàng tuần . Nó có lẽ là kém hơn về E polis
Michael Shigorin

@MichaelShigorin Ok, tôi đã thêm efibootmgrđầu ra.
Rafael Adel

Câu trả lời:


5

Tôi không biết tại sao bạn lại sử dụng grub ở nơi đầu tiên. UEFI hoạt động như một bộ tải khởi động và nó cho phép chọn các hệ điều hành hoặc các hạt nhân khác nhau từ menu khởi động. Mặc dù có một số trường hợp ngoại lệ, thường không bắt buộc phải xâu chuỗi bộ tải khởi động thứ hai, grub trong trường hợp này.

Bạn đề cập, bạn đã cài đặt hệ điều hành cơ bản thay vì Fedora, có nghĩa là bạn chỉ cần tải một hệ điều hành. Ở đây tôi trình bày một cách để làm điều đó mà không cần sử dụng grub. Hạt nhân cần được biên dịch bằng EFI_STUB, nếu đó là trường hợp bạn có thể kiểm tra với

grep EFI_STUB /boot/config-<version>

Sao chép kernel và initramfs vào ESP (phân vùng hệ thống EFI)

cp /boot/vmlinuz-<version> /boot/efi/EFI/elementary/vmlinuz-<version>.efi
cp /boot/initrd.img-<version> /boot/efi/EFI/elementary/initrd.img-<version>

Đăng ký kernel làm tùy chọn khởi động trong UEFI

echo "root=UUID=<disk_uuid> ro quiet rootfstype=ext4 add_efi_memmap initrd=\\EFI\\elementary\\initrd.img-<version>" |
  iconv -f ascii -t ucs2 |
  efibootmgr \
    --create --gpt \
    --disk /dev/<disk> --part <partition_number> \
    --label "Elementary OS" \
    --loader "\\EFI\\elementary\\vmlinuz-<version>.efi" \
    --write-signature --append-binary-args -

Các --disklập luận lấy tên thiết bị của đĩa, ví dụ --disk /dev/sda, các --partlập luận có số phân vùng của ESP, ví dụ 4. Bạn có thể tìm số phân vùng ESP với lệnh sau đây:

gdisk -l /dev/sda | awk '$6=="EF00" {print $1}'

Đảm bảo rằng bạn lặp lại các bước sau mỗi lần cập nhật kernel

Hoặc bạn làm điều này bằng tay (chỉ cần lặp lại các bước ở trên) hoặc bạn viết một tập lệnh nhỏ thực hiện công việc. Để tự động hóa hoàn toàn nó, tập lệnh có thể được nối vào thủ tục sau khi cài đặt kernel, vào thủ tục cập nhật sau initramfs và vào thủ tục postrm kernel (để loại bỏ mục khởi động UEFI). Trên thực tế, tôi không biết tại sao điều này không được thực hiện theo mặc định trong các bản phân phối, nó chỉ là một vài dòng mã.


Hmmm, tôi đã làm grep EFI_STUB /boot/config-3.2.0-49-genericnhưng không có gì.
Rafael Adel

kernel 3.2 đã quá cũ (từ tháng 1 năm 2012) để hỗ trợ EFI_STUB. Bạn cần ít nhất kernel 3.3.
Marco

@RafaelAdel Nếu bạn không muốn xây dựng kernel của riêng mình, bạn có thể kiểm tra phiên bản kernel mới hơn trong kho phần mềm. Sơ cấp dường như dựa trên Ubuntu và nên có sẵn kernel 3.5 hoặc 3.8. Những cái mới hơn có nhiều khả năng kích hoạt EFI_STUB.
Marco

Thực tế đã có kernel 3.10.1. Gonna hãy thử xem.
Rafael Adel

2
Marco, khuyên rằng việc sử dụng sơ khai là vô trách nhiệm trừ khi bạn háo hức hướng dẫn từng người dùng thông qua những gì không được hỗ trợ bởi bản phân phối của anh ta và không chuyển nó xuống như "làm sau mỗi lần nâng cấp kernel". Thật tốt khi có nhưng không tốt để tự động hóa, tôi nói với bạn đây là một người chịu trách nhiệm hỗ trợ UEFI trong ALT Linux.
Michael Shigorin

2

Tôi đã làm nó !

Trước hết, tôi đã xóa tất cả các mục khởi động không cần thiết bằng cách:

efibootmgr -b <entry_hex_number> -B

Sau đó, Định dạng lại phân vùng ESP với FAT32hệ thống tệp.

mkfs.vfat -F32 /dev/sda1

Sau đó cài đặt grub để /dev/sdaKHÔNG/dev/sda1

grub-install /dev/sda

3
Bạn không cần cài đặt grub mà viết MBR. Tôi không biết nếu bạn phân phối grub làm hai việc cùng nhau, nhưng điều bạn cần là sao chép grubx64.efi (hoặc shim.efi) sang / boot / efi / EFI / $ distro / và efibootmgr -c -l / boot /efi/EFI/$distro/grubx64.efi.
Lingzhu Xiang

1
grub-install đã học được cách tìm kiếm EFI (bạn có thể buộc nó với --target = x86_64-efi nhưng efivars.ko phải được tải vào bất cứ lúc nào).
Michael Shigorin
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.