Sony VAIO dengan BIOS Insyde H2O EFI tidak akan mem-boot ke GRUB EFI

12

Saya membeli laptop Sony Vaio S series baru. Ia menggunakan Insyde H2O BIOS EFI, dan mencoba menginstal Linux di atasnya membuatku gila.

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

Apa yang mengejutkan adalah bahwa ada 2 partisi sistem EFI pada disk. Partisi sda2 adalah partisi pemulihan 20gb yang memuat windows dengan antarmuka pemulihan dasar. Ini dapat diakses dengan menekan tombol "ASSIST" sebagai lawan dari tombol power normal. Saya berasumsi bahwa Partisi Sistem EFI sda1 memuat (ESP) ke dalam pemulihan ini.

Sda3 ESP memiliki entri yang lebih lengkap untuk Microsoft Windows, yang sebenarnya masuk ke Windows 7 (seperti yang dikonfirmasi oleh bcdedit.exe pada Windows). Ubuntu diinstal pada sda6, dan saat instalasi saya memilih sda3 sebagai partisi boot saya. Pemasang dengan benar membuat aplikasi sda3 / EFI / ubuntu / grubx64.efi.

Masalah sebenarnya: seumur hidup saya, saya tidak bisa mengaturnya sebagai default! Saya mencoba membuat sda3 / startup.nsh yang bernama grubx64.efi, tetapi tidak membantu - saat me-reboot, sistem masih menjalankan boot ke windows. Saya mencoba menggunakan efibootmgr, dan itu menunjukkan saat itu berhasil:

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

Namun, saat reboot, seperti yang Anda duga, mesin reboot langsung kembali ke Windows.

Satu-satunya hal yang dapat saya pikirkan adalah:

  1. Partisi sda1 entah bagaimana sedang digunakan
  2. Timpa /EFI/Boot/bootx64.efi dan /EFI/Microsoft/Boot/bootmgfw.efi dengan grubx64.efi [tetapi ini tampaknya sangat radikal].

Bisakah seseorang membantu saya keluar? Terima kasih - bantuan apa pun sangat dihargai, karena masalah ini membuatku gila!

Rohan Dhruva
sumber
Saya mengikuti pendekatan yang sama pada Sony Vaio S - mengganti file MS .efi dengan yang GRUB, menyimpan salinan MS .efi di direktori yang berbeda, dan kemudian chainload ke copy untuk mem-boot Windows. Ini biasanya berfungsi, tetapi efek sampingnya adalah saya tidak bisa melanjutkan Windows dari hibernasi - kesalahan bootloadernya sudah keluar, dan membutuhkan reboot yang bersih.

Jawaban:

11

Saya akhirnya bisa menyelesaikan ini. Saya mengganti EFI / Microsoft / boot / bootmgfw.efi dengan grub64.efi. Saya mengganti nama yang pertama menjadi bootmgfw.efi.old dan menggunakan grub untuk menambahkan opsi menu ke chainload ke dalamnya.

Ini menyiratkan bahwa firmware adalah hardcoded untuk mencari bootloader windows microsoft, dan tidak menghormati pengaturan efibootmgr, atau startup.nsh. Itu sangat mengerikan.

Saya menemukan bagaimana proses boot Sony EFI bekerja:

  1. Lihat di /EFI/Microsoft/Boot/fwbootmgr.efi; jika ada, boot itu.
  2. Lihat di semua sub-direktori dari / EFI / untuk grubx64.efi. Jika ada, bootlah.
  3. Boot /EFI/Boot/bootx64.efi
  4. Tampilkan pesan kesalahan, seperti "Sistem Operasi tidak ditemukan".

Di Linux, alat efibootmgr berfungsi, tetapi ia menampilkan banyak omong kosong yang dihasilkan secara otomatis, termasuk drive USB terakhir yang Anda gunakan.

Inilah cara saya mempelajari semua ini:

  1. Saya membuka mesin baru saya dan menutup partisi Windows untuk menginstal Linux dan Mac berdampingan.
  2. Saya menginstal Ubuntu 12.10 dan installer menimpa fwbootmgr.efi, mencadangkan bootloader Windows lama.
  3. Saya memulihkan bootloader Windows lama, tetapi tidak bisa mem-boot apa pun kecuali Windows.
  4. Saya mengubah nama bootloader Windows menjadi sesuatu yang palsu, dan kemudian Grub BL mengambil alih.
  5. Saya mengubah nama direktori ubuntu menjadi sesuatu yang lain, dan Grub masih memuat, walaupun saya sudah menginstal rEFInd.
  6. Satu-satunya cara saya bisa mendapatkan izin untuk melakukan apa yang saya inginkan adalah ini:

  7. Pindahkan fwbootmgr.efi ke direktori induknya; rEFInd masih akan menemukannya, dan Windows tidak akan mengeluh bahwa Anda menamainya kembali.

  8. Ubah nama grubx64.efi menjadi rfgrubx64.efi atau sesuatu yang dikenali.
  9. Salin rEFInd dari / EFI / refind ke / EFI / boot, ubah nama /EFI/refind_x64.efi menjadi * .bak, dan terakhir ubah nama / Boot / boot/refind_x64.efi menjadi bootx64.efi. Anda sekarang dapat mem-boot Windows BL atau GRUB dari rEFInd. Saya berencana untuk memutakhirkan instalasi MacOS saya ke Clover, dan memuat Clover dari rEFInd juga.

(Mungkin dimungkinkan untuk menggunakan Windows Boot Manager untuk melakukan semua ini, tetapi dukungan EFI EEasyBCD masih berantakan dalam pengalaman saya. Saya menolak untuk menyentuhnya lagi untuk sementara waktu.)

Rohan Dhruva
sumber
Perhatikan bahwa saya juga telah mencoba mengubah pengaturan BCD [menggunakan bcdedit.exe] dari Windows agar boot manager Windows diatur ke grub, dan itu masih tidak berfungsi - saya harus benar-benar mengganti file .efi dengan grub's .efi .
Rohan Dhruva
5

Pertama, Anda tidak memiliki dua ESP. ESP adalah partisi dengan kode tipe partisi C12A7328-F81F-11D2-BA4B-00A0C93EC93B, yang dibedakan sebagai partisi dengan set "boot flag" -nya. Output Anda menunjukkan bahwa hanya / dev / sda3 yang memiliki set "boot flag", sehingga Anda hanya memiliki satu ESP - / dev / sda3. Di bawah GPT, partisi dapat memiliki nama, dan Anda memiliki dua partisi dengan nama "partisi sistem EFI," tetapi nama-nama ini digunakan untuk tujuan identifikasi manusia saja. Jadi, tebakan saya adalah bahwa Anda (atau beberapa utilitas otomatis) membuat / dev / hda1 dengan tujuan menjadikannya ESP, tetapi ada kesalahan dalam mengatur kode jenis partisi atau utilitas lain mengubah kode tipenya dari C12A7328-F81F-11D2-BA4B-00A0C93EC93B untuk sesuatu yang lain.

Ada sejumlah cara untuk memperbaikinya. Yang paling sederhana adalah dengan hanya mengubah nama / dev / sda1 untuk menghindari kebingungan. Jika Anda berpikir bahwa / dev / sda1 tidak ada gunanya, Anda dapat mencadangkannya dan menghapusnya. Ini akan menghindarinya dan menghindari kebingungan, tetapi tentu saja Anda akan memiliki 273 MB ruang disk yang tidak digunakan. Atau, Anda bisa mencurahkan ruang untuk tujuan lain, jika perlu mengubah nama dan jenis kode untuk menghindari kebingungan. EFI secara eksplisit memungkinkan beberapa ESP, sehingga Anda dapat mengubah kode jenis (dengan mengatur "boot flag" menggunakan parted, misalnya) dan menggunakan kedua ESP; tapi ini bisa membingungkan.

Kemungkinannya adalah bahwa masalah ini tidak terkait dengan ketidakmampuan Anda untuk mem-boot Linux, karena sepertinya semua file yang relevan ada di / dev / sda3. Beberapa kemungkinan alasan untuk masalah ini terjadi pada saya:

  • Bisa jadi Anda salah mengetik sesuatu dalam perintah efibootmgr Anda. Saya tidak melihat kesalahan ketik yang jelas, tetapi jika biner GRUB tidak ditemukan di tempat yang Anda tentukan, perintahnya tidak akan berfungsi. Opsi "--gpt" dan "--write-signature" hampir pasti tidak perlu, dan dapat menyebabkan masalah, tetapi kemungkinan besar tidak.
  • Firmware Anda dapat memiliki bug yang menyebabkan efek perintah efibootmgr bersifat sementara. Coba reboot dan ketik "sudo efibootmgr -v" untuk melihat apakah entri yang Anda buat telah selamat dari reboot.
  • Firmware Anda dapat memiliki bug yang menyebabkan variabel urutan boot diabaikan. Saya punya motherboard seperti itu; boot dalam urutan di mana entri boot dibuat, daripada urutan yang ditentukan oleh variabel BootOrder. Untuk mengatasi bug ini, Anda harus menghapus semua entri dan membuatnya kembali dalam urutan boot yang ingin Anda gunakan.
  • Biner grubx64.efi Anda dapat rusak sedemikian rupa sehingga firmware menolak untuk meluncurkannya, dan seterusnya melanjutkan ke item berikutnya dalam urutan boot.

Anda dapat mencoba menyesuaikan perintah efibootmgr Anda, menemukan biner baru, atau yang lainnya untuk menguji kemungkinan ini. Jika semuanya gagal, saya sarankan Anda melakukan hal berikut:

  1. Hapus semua entri boot menggunakan efibootmgr atau firmware Anda (jika menyediakan antarmuka untuk melakukan ini).
  2. Salin grubx64.efi ke EFI / Boot / bootx64.efi di ESP.
  3. Jika ketika Anda reboot Anda masih mendapatkan Windows, ganti nama EFI / Microsoft / Boot / bootmgfw.efi ke EFI / Microsoft / bootmgfw.efi.

Ini harus membuat boot GRUB menggunakan nama default untuk boot loader (EFI / Boot / bootx64.efi). Satu masalah dengan ini adalah bahwa GRUB mungkin tidak memiliki entri yang berfungsi untuk Windows. Anda mungkin dapat membuatnya secara manual; entri seperti ini seharusnya berfungsi:

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

Atau, Anda bisa menginstal mereparasi atau refind sebagai EFI / Boot / bootx64.efi. Perhatikan bahwa biner penerima yang tersedia dari situsnya tidak akan berfungsi pada PC berbasis UEFI; Anda harus menggunakan versi di repositori Ubuntu. rEFInd adalah cabang dari rEFIt dengan berbagai perbaikan bug dan pembaruan, termasuk dukungan UEFI yang lebih baik. (Penerima tampaknya telah ditinggalkan sekitar dua tahun yang lalu.) Jadi, saya sarankan menggunakan Penerima dan bukan Penerima - tapi saya pengelola Penerima, jadi saya bukan pengamat independen pada skor ini. Sayangnya, AFAIK rEFInd belum (belum) termasuk dalam repositori Ubuntu, jadi Anda harus mengunduh dan menginstalnya secara manual.

Rod Smith
sumber
Terima kasih banyak, Rod! Namun, sda1 dengan sendirinya merupakan ESP [mungkin tidak dapat dibooting secara default], yang digunakan untuk mem-boot ke partisi rescue (20Gb SONSYS). Saya tahu ini pengaturan yang aneh, tetapi Sony memilih untuk melakukannya karena suatu alasan. Menekan tombol "ASSIST", sebagai lawan dari tombol daya, memanggil bootloader itu.
Rohan Dhruva
Terima kasih atas info Rod, saya memiliki masalah yang sama dan mengikuti langkah-langkah Anda untuk memperbaikinya sebagian. GRUB bekerja dengan baik dan kemudian saya mencoba menambahkan entri untuk Win7 dan sekarang GRUB tidak muncul, cukup boot langsung ke Ubuntu. Adakah ide mengapa dan bagaimana cara memperbaikinya? Juga partisi EFI saya adalah sda1 dan Win adalah sda3 haruskah X di baris ini "set root = '(hd0, gptX)'" sama dengan 1 atau 3? Saya sudah mencoba keduanya!
barro32
@Rod, Di mana saya harus menambahkan menuentry (Windows 7)? di \ etc \ default \ grub?
alekhine
4

Posisi awal yang sama di sini pada seri e sony vaio baru. Terima kasih Rod atas jawaban Anda.

Untuk berjaga-jaga seandainya seseorang membutuhkan panduan, inilah yang bekerja untuk saya:

Menginstal ubuntu 12,04 dari USB bersama win7.

mounting / dev / sda3 dari live-session

  • salin EFI / ubuntu / grubx64.efi ke EFI / Boot /
  • ganti nama EFI / Boot / bootx64.efi menjadi bootx64.efi.old
  • ganti nama EFI / Boot / grubx64.efi menjadi bootx64.efi

sekarang boot langsung ke grub2, tetapi tanpa entri win7

setelah memuat ubuntu saya edit

/etc/grub.d/40_custom

menambahkan

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

dan kemudian

sudo update-grub

semuanya bekerja dengan baik

michote
sumber
1

Saya menyarankan dua alternatif berbeda:

  1. Jangan menimpa windows mbr tetapi menggunakannya untuk meluncurkan grub

  2. ubah pengaturan bios ( f2atau f3saat startup) dalam opsi boot dari UEFI ke LEGACY, maka biasanya akan meluncurkan sistem terakhir yang diinstal seperti biasa

Cardu
sumber
MBR tidak berlaku untuk komputer EFI
Ben Voigt
0
  1. Jalankan Boot-Repair dari liveCD / liveUSB
  2. Klik Recommended Repairtombolnya. (ini akan secara otomatis menginstal parameter yang benar untuk grub-efi, termasuk parameter SecureBoot jika diperlukan, dan mengganti nama file EFI jika seandainya firmware UEFI dikunci ke file Windows). Tunjukkan URL yang akan muncul jika ada masalah.

Perbaikan-Boot

LovinBuntu
sumber