Dalam konfigurasi normal, firmware EFI melacak bootloader EFI di NVRAM. Ketika Anda menginstal OS, itu seharusnya mendaftarkan boot loader-nya dengan firmware, dan hasilnya adalah entri NVRAM yang menunjuk ke boot loader, dan firmware dapat meluncurkan boot loader. Ini biasanya berfungsi OK, meskipun ada masalah dengan entri NVRAM yang dihapus atau menjadi rusak bahkan pada perangkat keras "nyata". VirtualBox, sayangnya, melakukan pekerjaan yang buruk untuk menyimpan data "NVRAM" antara penggunaan; cenderung memulai dengan set data default baru setiap kali Anda meluncurkannya. Ini akhirnya menimbulkan malapetaka dengan kemampuan untuk meluncurkan apa saja.
IMHO, solusi paling sederhana adalah dengan menyimpan bootloader menggunakan nama file fallback dari EFI/BOOT/bootx64.efi
(case-insensitive) pada EFI System Partition (ESP) dari disk tervirtualisasi. Jika EFI tidak dapat melakukan boot apa pun, EFI akan mencoba menjalankan bootloader boot ini. Secara umum, jika Anda menginstal distribusi Linux, ada dua cara untuk melakukan ini:
- Anda dapat menyimpan salinan bootloader reguler Anda di sana. Aku tidak tahu apa yang Manjaro menggunakan secara default atau di mana menyimpannya, tapi seandainya menggunakan
EFI/manjaro/grubx64.efi
, Anda akan menyalin atau mengubah nama EFI/manjaro
untuk EFI/BOOT
kemudian mengubah nama grubx64.efi
di direktori untuk bootx64.efi
. Anda bisa menggunakan sesuatu selain boot loader default Manjaro, jika Anda mau. Lihat halaman saya pada subjek untuk informasi tentang apa yang tersedia.
- Anda dapat menggunakan
fallback.efi
atau fbx64.efi
(program yang sama, nama yang berbeda). Program EFI ini kemungkinan sudah diinstal entah di mana di ESP Anda atau setidaknya tersedia dalam beberapa paket dalam distribusi Anda (mungkin GRUB atau Shim). Anda akan menyalin file ini ke EFI/BOOT/bootx64.efi
dan kemudian membuat BOOT.CSV
file di direktori tempat boot loader nyata ada. File ini menyimpan data pada nama boot loader sebenarnya dan data terkait, seperti grubx64.efi,Manjaro,,This is the boot entry for Manjaro
. Yang penting, file ini harus UCS-2 atau UTF-16 , bukan ASCII biasa. Ketika fallback.efi
/ fbx64.efi
meluncurkan (as bootx64.efi
), ia mencari .CSV
file di subdirektori dariEFI
di ESP. Jika ditemukan, ia menggunakannya untuk menghasilkan entri NVRAM baru. Ini dimaksudkan untuk membantu memulihkan entri NVRAM yang hilang, jadi ini adalah salah satu cara untuk mengatasi masalah VirtualBox "NVRAM amnesia".
Pendekatan pertama cenderung lebih mudah untuk diatur, dengan peringatan bahwa konfigurasi GRUB dapat menjadi rumit. Jika Anda mencari grub.cfg
di ESP, Anda harus yakin itu tetap di tempat GRUB mengharapkannya, jadi Anda mungkin atau mungkin tidak perlu memindahkannya. Juga, jika sistem paket Anda memberikan GRUB yang diperbarui, Anda harus menyalinnya lagi untuk mendapatkan manfaat dari paket yang baru. Pendekatan kedua lebih sulit untuk dijelaskan dan sedikit lebih membosankan untuk diatur, tapi saya mulai lebih suka karena itu membuat pembaruan ke boot loader lebih mudah untuk diinstal.
Ada beberapa pendekatan lain untuk mengatasi masalah, juga, seperti menggunakan skrip startup shell EFI, seperti yang disarankan kyb (tetapi ini akan menghasilkan waktu startup yang lebih lama daripada solusi saya di atas). Juga, di masa lalu, dimungkinkan untuk membuat entri NVRAM baru menggunakan antarmuka firmware VirtualBox itu sendiri, dan ini akan tetap ada; tetapi ini tampaknya telah berhenti bekerja di beberapa titik - atau setidaknya, terakhir kali saya mencobanya, itu tidak berhasil.