Sony VAIO với bios Insyde H2O EFI sẽ không khởi động vào GRUB EFI


12

Tôi đã mua một máy tính xách tay Sony Vaio S series mới. Nó sử dụng Insyde H2O BIOS EFI và cố gắng cài đặt Linux trên nó đang khiến tôi phát điên.

root@kubuntu:~# parted /dev/sda print
Model: ATA Hitachi HTS72756 (scsi)
Disk /dev/sda: 640GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End    Size    File system  Name                          Flags
 1      1049kB  274MB  273MB  fat32        EFI system partition          hidden
 2      274MB  20.8GB  20.6GB  ntfs        Basic data partition          hidden, diag
 3      20.8GB  21.1GB  273MB  fat32        EFI system partition          boot
 4      21.1GB  21.3GB  134MB                Microsoft reserved partition  msftres
 5      21.3GB  342GB  320GB  ntfs        Basic data partition
 6      342GB  358GB  16.1GB  ext4        Basic data partition
 7      358GB  374GB  16.1GB  ntfs        Basic data partition
 8      374GB  640GB  266GB  ntfs        Basic data partition

Điều đáng ngạc nhiên là có 2 phân vùng hệ thống EFI trên đĩa. Phân vùng sda2 là phân vùng phục hồi 20gb, tải các cửa sổ với giao diện khôi phục cơ bản. Điều này có thể truy cập bằng cách nhấn nút "ASSIST" trái ngược với nút nguồn thông thường. Tôi đoán rằng phân vùng hệ thống EFI sda1 (ESP) tải vào phục hồi này.

ESP sda3 có nhiều mục nhập hơn cho Microsoft Windows, thực sự đi vào Windows 7 (như được xác nhận bởi bcdedit.exe trên Windows). Ubuntu được cài đặt trên sda6 và trong khi cài đặt, tôi đã chọn sda3 làm phân vùng khởi động. Trình cài đặt đã tạo chính xác một ứng dụng sda3 / EFI / ubfox / grubx64.efi.

Vấn đề thực sự: đối với cuộc sống của tôi, tôi không thể đặt nó thành mặc định! Tôi đã thử tạo một sda3 / startup.nsh có tên grubx64.efi, nhưng không được - khi khởi động lại, hệ thống vẫn khởi động vào windows. Tôi đã thử sử dụng efibootmgr và điều đó cho thấy nó hoạt động:

root@kubuntu:~# efibootmgr 
BootCurrent: 0000
BootOrder: 0000,0001
Boot0000* EFI USB Device
Boot0001* Windows Boot Manager
root@kubuntu:~# efibootmgr --create --gpt --disk /dev/sda --part 3 --write-signature --label "GRUB2" --loader "\\EFI\\ubuntu\\grubx64.efi" 
BootCurrent: 0000
BootOrder: 0002,0000,0001
Boot0000* EFI USB Device
Boot0001* Windows Boot Manager
Boot0002* GRUB2
root@kubuntu:~# efibootmgr
BootCurrent: 0000
BootOrder: 0002,0000,0001
Boot0000* EFI USB Device
Boot0001* Windows Boot Manager
Boot0002* GRUB2

Tuy nhiên, khi khởi động lại, như bạn đoán, máy đã khởi động lại trực tiếp vào Windows.

Điều duy nhất tôi có thể nghĩ là:

  1. Phân vùng sda1 đang được sử dụng
  2. Ghi đè /EFI/Boot/bootx64.efi và /EFI/Microsoft/Boot/bootmgfw.efi với grubx64.efi [nhưng điều này có vẻ thực sự triệt để].

Bất cứ ai có thể xin vui lòng giúp tôi ra? Cảm ơn - bất kỳ trợ giúp đều được đánh giá cao, vì vấn đề này đang khiến tôi phát điên!


Tôi đã làm theo cách tiếp cận tương tự trên Sony Vaio S - thay thế tệp MS .efi bằng GRUB, giữ một bản sao của MS .efi trong một thư mục khác, sau đó tải chuỗi lên bản sao để khởi động Windows. Điều này thường hoạt động, nhưng một tác dụng phụ khó chịu là tôi không thể khôi phục Windows khỏi chế độ ngủ đông - lỗi bộ tải khởi động của nó và yêu cầu khởi động lại sạch.

Câu trả lời:


11

Cuối cùng tôi đã có thể giải quyết điều này. Tôi đã thay thế EFI / Microsoft / boot / bootmgfw.efi bằng grub64.efi. Tôi đã đổi tên trước đây thành bootmgfw.efi.old và sử dụng grub để thêm tùy chọn menu để chainload vào nó.

Điều này ngụ ý rằng phần sụn được mã hóa cứng để tìm bộ tải khởi động windows microsoft và không tôn trọng cài đặt efibootmgr hoặc startup.nsh. Điều đó thực sự khủng khiếp.

Tôi đã tìm ra cách quá trình khởi động Sony EFI hoạt động:

  1. Tìm trong /EFI/Microsoft/Boot/fwbootmgr.efi; nếu có, khởi động nó
  2. Tìm trong tất cả các thư mục con của / EFI / cho grubx64.efi. Nếu có, khởi động nó.
  3. Khởi động /EFI/Boot/bootx64.efi
  4. Hiển thị thông báo lỗi, chẳng hạn như "Không tìm thấy hệ điều hành".

Trong Linux, công cụ efibootmgr hoạt động, nhưng nó hiển thị rất nhiều thứ vô nghĩa được tạo tự động, bao gồm cả ổ USB cuối cùng bạn đã sử dụng.

Đây là cách tôi học được tất cả những điều này:

  1. Tôi đã mở máy mới của mình và thu gọn phân vùng Windows để cài đặt Linux và Mac cạnh nhau.
  2. Tôi đã cài đặt Ubuntu 12.10 và trình cài đặt ghi đè lên fwbootmgr.efi, sao lưu bộ tải khởi động Windows cũ.
  3. Tôi đã khôi phục bộ tải khởi động Windows cũ, nhưng không thể khởi động bất cứ thứ gì ngoại trừ Windows.
  4. Tôi đã đổi tên bộ tải khởi động Windows thành một cái gì đó không có thật, và sau đó Grub BL tiếp quản.
  5. Tôi đã đổi tên thư mục ubfox thành một cái gì đó khác và Grub vẫn được tải, mặc dù tôi đã cài đặt rEFInd.
  6. Cách duy nhất tôi có thể có được rEFInd để làm những gì tôi muốn là:

  7. Di chuyển fwbootmgr.efi vào thư mục mẹ của nó; rEFInd vẫn sẽ tìm thấy nó và Windows sẽ không phàn nàn rằng bạn đã đổi tên nó.

  8. Đổi tên grubx64.efi thành rfgrubx64.efi hoặc một cái gì đó khác có thể nhận ra.
  9. Sao chép rEFInd từ / EFI / refind thành / EFI / boot, đổi tên /EFI/refind_x64.efi thành * .bak và cuối cùng đổi tên /Boot/refind_x64.efi thành bootx64.efi. Bây giờ bạn có thể khởi động Windows BL hoặc GRUB từ rEFInd. Tôi dự định nâng cấp cài đặt MacOS của mình lên Cỏ ba lá và tải cả Cỏ ba lá từ rEFInd.

(Có lẽ có thể sử dụng Trình quản lý khởi động Windows để thực hiện tất cả điều này, nhưng hỗ trợ EFI của EeasyBCD vẫn là một mớ hỗn độn trong trải nghiệm của tôi. Tôi từ chối chạm vào nó một lúc nữa.)


Lưu ý rằng tôi cũng đã thử sửa đổi cài đặt BCD [bằng cách sử dụng bcdedit.exe] từ Windows để cài đặt trình quản lý khởi động Windows thành grub và điều đó vẫn không hoạt động - tôi thực sự phải thay thế tệp .efi bằng .efi của grub .
Rohan Dhruva

5

Đầu tiên, bạn không có hai ESP. Một ESP là một phân vùng có mã loại phân vùng là C12A7328-F81F-11D2-BA4B-00A0C93EC93B, được phân định là một phân vùng với bộ "cờ khởi động". Đầu ra của bạn chỉ ra rằng chỉ / dev / sda3 có bộ "cờ khởi động", vì vậy bạn chỉ có một ESP - / dev / sda3. Trong GPT, các phân vùng có thể có tên và bạn đã có hai phân vùng có tên "Phân vùng hệ thống EFI", nhưng các tên này chỉ được sử dụng cho mục đích nhận dạng con người. Do đó, tôi đoán là bạn (hoặc một số tiện ích tự động) đã tạo / dev / sda1 với mục đích biến nó thành một ESP, nhưng có lỗi trong việc đặt mã loại phân vùng hoặc một số tiện ích khác thay đổi không đúng mã loại của nó C12A7328-F81F-11D2-BA4B-00A0C93EC93B để một cái gì đó khác.

Có một số cách bạn có thể sửa điều này. Đơn giản nhất là chỉ cần thay đổi tên của / dev / sda1 để tránh nhầm lẫn. Nếu bạn nghĩ rằng / dev / sda1 không phục vụ mục đích, bạn có thể sao lưu và xóa nó. Điều này sẽ giúp bạn tránh xa và tránh nhầm lẫn, nhưng tất nhiên sau đó bạn sẽ có 273 MB dung lượng đĩa chưa sử dụng. Ngoài ra, bạn có thể dành không gian cho một số mục đích khác, nếu cần thiết thay đổi tên và mã loại để tránh nhầm lẫn. EFI rõ ràng cho phép nhiều ESP, do đó bạn có thể thay đổi mã loại (bằng cách đặt "cờ khởi động" bằng cách sử dụng parted chẳng hạn) và sử dụng cả hai ESP; nhưng điều này có thể gây nhầm lẫn.

Rất có thể vấn đề này không liên quan đến việc bạn không thể khởi động Linux, vì có vẻ như tất cả các tệp có liên quan đều bật / dev / sda3. Một số lý do có thể cho vấn đề này xảy ra với tôi:

  • Nó có thể là bạn đã nhầm lẫn một cái gì đó trong lệnh efibootmgr của bạn. Tôi không thấy bất kỳ lỗi chính tả rõ ràng nào, nhưng nếu nhị phân GRUB không nằm ở nơi bạn đã chỉ định, lệnh sẽ không hoạt động. Các tùy chọn "--gpt" và "--write-chữ ký" gần như chắc chắn là không cần thiết và có thể hình dung gây ra sự cố, nhưng rất có thể là không.
  • Chương trình cơ sở của bạn có thể có một lỗi khiến các hiệu ứng của lệnh efibootmgr bị tạm thời. Hãy thử khởi động lại và sau đó gõ "sudo efibootmgr -v" để xem liệu mục bạn tạo đã tồn tại khi khởi động lại.
  • Chương trình cơ sở của bạn có thể có một lỗi khiến biến thứ tự khởi động bị bỏ qua. Tôi đã có một bo mạch chủ như thế; nó khởi động theo thứ tự các mục khởi động được tạo, thay vì thứ tự được chỉ định bởi biến BootOrder. Để khắc phục lỗi này, bạn sẽ phải xóa tất cả các mục và tạo lại chúng theo thứ tự khởi động bạn muốn sử dụng.
  • Nhị phân grubx64.efi của bạn có thể bị hỏng theo cách mà phần sụn từ chối khởi chạy nó, và vì vậy nó tiếp tục đến mục tiếp theo trong thứ tự khởi động.

Bạn có thể thử điều chỉnh lệnh efibootmgr của mình, xác định vị trí nhị phân mới hoặc không có gì để kiểm tra các khả năng này. Nếu vẫn thất bại, tôi khuyên bạn nên làm như sau:

  1. Xóa tất cả các mục khởi động bằng efibootmgr hoặc phần sụn của bạn (nếu nó cung cấp giao diện để thực hiện việc này).
  2. Sao chép grubx64.efi sang EFI / Boot / bootx64.efi trên ESP.
  3. Nếu khi bạn khởi động lại, bạn vẫn nhận được Windows, đổi tên EFI / Microsoft / Boot / bootmgfw.efi thành EFI / Microsoft / bootmgfw.efi.

Điều này sẽ nhận được khởi động GRUB bằng tên mặc định cho bộ tải khởi động (EFI / Boot / bootx64.efi). Một vấn đề với điều này là GRUB có thể không có mục hoạt động cho Windows. Bạn có thể có thể tạo một cách thủ công; một mục như thế này sẽ hoạt động:

menuentry "Windows 7" {
    set root='(hd0,gpt3)'
    chainloader /EFI/Microsoft/bootmgfw.efi
}

Ngoài ra, bạn có thể cài đặt rEFIt hoặc rEFInd dưới dạng EFI / Boot / bootx64.efi. Lưu ý rằng các nhị phân rEFIt có sẵn từ trang web của nó sẽ không hoạt động trên các PC dựa trên UEFI; bạn sẽ cần sử dụng phiên bản trong kho Ubuntu. rEFInd là một nhánh của rEFIt với nhiều bản sửa lỗi và cập nhật, bao gồm hỗ trợ UEFI tốt hơn. (rEFIt dường như đã bị bỏ rơi khoảng hai năm trước.) Vì vậy, tôi khuyên bạn nên sử dụng rEFInd thay vì rEFIt - nhưng tôi là người duy trì của rEFInd, vì vậy tôi không phải là người quan sát độc lập về điểm số này. Thật không may, AFAIK rEFInd không (chưa) được bao gồm trong kho Ubuntu, vì vậy bạn sẽ phải tải xuống và cài đặt thủ công.


Cảm ơn bạn rất nhiều, Rod! Tuy nhiên, sda1 nằm trong chính nó là một ESP [có thể không có khả năng khởi động theo mặc định], đang được sử dụng để khởi động vào phân vùng cứu hộ (SONG 20Gb). Tôi biết đó là một thiết lập kỳ lạ, nhưng Sony đã chọn làm theo cách đó vì một số lý do. Nhấn nút "ASSIST", trái ngược với nút nguồn, gọi bộ tải khởi động đó.
Rohan Dhruva

Cảm ơn thông tin Rod, tôi đã gặp vấn đề tương tự và làm theo các bước của bạn để khắc phục một phần. GRUB hoạt động tốt và sau đó tôi đã cố gắng thêm mục nhập cho Win7 và bây giờ GRUB không hiển thị, chỉ cần khởi động thẳng vào Ubuntu. Bất kỳ ý tưởng tại sao và làm thế nào để khắc phục? Ngoài ra phân vùng EFI của tôi là sda1 và Win là sda3 nên X trong dòng này "set root = '(hd0, gptX)'" bằng 1 hoặc 3? Tôi đã thử cả hai!
barro32

@Rod, tôi nên thêm menuentry (Windows 7) ở đâu? trong \ etc \ default \ grub?
alekhine

4

Vị trí bắt đầu tương tự ở đây trên một loạt sony vaio e mới. Cảm ơn Rod cho câu trả lời của bạn.

Chỉ trong trường hợp ai đó cần một hướng dẫn, đây là những gì làm việc cho tôi:

Đã cài đặt Ubuntu 12.04 từ USB cùng với win7.

gắn / dev / sda3 từ phiên trực tiếp

  • sao chép EFI / ubfox / grubx64.efi sang EFI / Boot /
  • đổi tên EFI / Boot / bootx64.efi thành bootx64.efi.old
  • đổi tên EFI / Boot / grubx64.efi thành bootx64.efi

bây giờ nó đã khởi động trực tiếp vào grub2, nhưng không có mục win7

Sau khi tải Ubuntu tôi đã chỉnh sửa

/etc/grub.d / 40_custom

thêm

menuentry "Windows 7" {
    set root='(hd0,gpt3)'
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

và sau

sudo update-grub

mọi thứ đều hoạt động tốt


1

Tôi đề nghị hai phương án khác nhau:

  1. Đừng ghi đè lên windows mbr mà sử dụng nó để khởi chạy grub

  2. thay đổi cài đặt bios ( f2hoặc f3khi khởi động) trong tùy chọn khởi động từ UEFI sang LEGACY, sau đó nó sẽ thường khởi chạy hệ thống cuối cùng được cài đặt như mọi khi


MBR không áp dụng cho máy tính EFI
Ben Voigt

0
  1. Chạy Boot-Repair từ liveCD / liveUSB
  2. Nhấn vào Recommended Repairnút. (điều này sẽ tự động cài đặt các tham số chính xác cho grub-efi, bao gồm các tham số SecureBoot nếu cần và đổi tên các tệp EFI trong trường hợp phần sụn UEFI bị khóa thành các tệp Windows). Cho biết URL sẽ xuất hiện nếu có vấn đề.

Khởi động-Sửa chữa

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.