Apakah mungkin untuk boot Windows 8.1 tanpa bootmanager sendiri?

10

Saya telah mencoba menemukan cara yang lebih mudah untuk menginstal Windows dan Linux dual booting pada laptop saya, belum tentu dalam urutan itu. Apa yang umumnya harus kita lakukan adalah menginstal Windows terlebih dahulu, kemudian menginstal linux dan mengizinkan GRUB untuk menangani Windows.

Jadi apa yang saya coba capai adalah menemukan cara untuk memotong proses instalasi sial (windows) dan hanya menggunakan gambar untuk langsung menyalin ke drive saya. Ini juga memungkinkan saya mempertahankan boot manager (GRUB) saya. (bukan berarti saya tidak bisa mengembalikannya setelah itu, tetapi itu adalah kebijakan Microsoft untuk memonopoli, dalam hal ini menolak keberadaan boot manager lain dalam sistem).

Saya pertama kali mendapatkan salinan resmi Windows 8.1, kemudian mulai menginstalnya di mesin virtual menggunakan VirtualBox. Kemudian, saya membuat partisi NTFS pada hard drive yang dipartisi GPT dan menyalin konten partisi Windows dari gambar .vdi ke partisi yang baru dibuat.

Tentu saja, itu belum berfungsi. Saya tidak tahu cara mengganti bootmgr. Memberikan

File: \Boot\BCD
Status: 0xc000000e
Info: The Boot Configuration Data for your PC is missing or contains errors.

karena tidak dapat menemukan file itu dari partisi lain yang digunakan untuk mem-boot, pemulihan sistem, dll.

Sekarang, saya telah membaca bahwa bootmgr akhirnya mengeksekusi winload.exe untuk mem-boot Windows. Saya tidak tahu apa yang harus saya lakukan selanjutnya.

Saya rasa itu harus bekerja secara teoritis karena saya memiliki semua file yang diperlukan untuk menjalankan Windows. Saya juga berpikir bahwa saya seharusnya tidak menjadi satu-satunya yang memikirkan hal ini, dan karenanya saya mungkin kehilangan sesuatu yang sangat mendasar di sini. Mungkin sudah dilakukan?

Saya tidak tahu bagaimana cara booting bekerja. Apa yang berhasil saya pahami adalah bahwa ketika Anda dual-boot Windows dan Linux, Anda rantai windows bootloader ke linux. Jadi apa yang saya coba capai adalah entah bagaimana menyingkirkan bootloader Windows.

EDIT

Saya telah melihat file biner bootmgrdan \Boot\BCD. bootmgrmembaca file BCD dan daftar opsi Anda, di antaranya Anda dapat memilih untuk boot ke.

Jadi informasi seperti mengeksekusi winload.exeberada di file BCD. Sekarang, saya pikir bootmgritu sendiri dijalankan oleh syslinux menggunakan chain.c32modul. Apa yang saya coba lakukan adalah entah bagaimana mengeksekusi bootloader windows, yaitu winload.exelangsung dari syslinux (jika mungkin), atau memodifikasi bootmgrsehingga dijalankan winload.exesendiri (yang jalurnya akan langsung di bootmgrexecutable) tanpa mencari BCD atau apa pun.

Hibernasi (yang membutuhkan prosedur berbeda) tidak menjadi masalah bagi saya pada langkah ini.

Edit pertanyaan Anda untuk memberi tahu kami jenis firmware, dan (jika EFI) apakah Anda telah mengaktifkan Modul Dukungan Kompatibilitas di pengaturan firmware

Firmware saya adalah EFI (dengan CSM diaktifkan), dan saya biasanya boot ke Arch Linux menggunakan GRUB. Saya telah menemukan bahwa bootmgrdijalankan System32\winload.exepada sistem warisan, dan System32\winload.efipada EFI.

Saya punya 0.0ide tentang apa yang harus dilakukan dari sini. Selama 10 hari terakhir, saya telah mencoba untuk membuat perubahan pada BCD dan saya pikir saya akan mencapai kesuksesan. Tapi itu tidak relevan, karena yang ingin saya lakukan adalah mem-bypass Windows Boot Manager.

Jika Anda memiliki ide apakah ada cara untuk mengeksekusi winload.efidari shell EFI (hanya tebakan), atau modifikasi lain untuk GRUB sehingga akan mem-boot Windows dalam mode EFI tanpa chainloader.

Setiap saran dipersilakan.

Tambahan

Posting forum berikut mungkin memberikan beberapa wawasan bermanfaat:

http://reboot.pro/topic/19371-chainload-directly-to-winloadexe/

1.

Grub4dos sekarang dapat mem-chainload sebuah bootloader (seperti NTLDR atau BOOTMGR) karena ia dapat bertindak sebagai pengganti kode yang terdapat dalam bootsector "normal" (yaitu sekitar 300 byte kode mesin).

Kode ini cukup menetapkan beberapa parameter dan kemudian memanggil loader.

Bahkan itu tidak mudah sama sekali untuk dipahami dan direplikasi dengan kode yang berbeda.

Pemuat sistem NT seperti BOOTMGR memiliki lebih atau kurang dalam satu. Exe sistem operasi "mode nyata" (tidak sepenuhnya berbeda dengan DOS) dan fasilitas / alat untuk menguraikan teks biasa dan kumpulan Registry, itu bukan sesuatu yang dapat diperbaiki. ditulis dari awal dengan mudah.

Orang-orang baik @ReactOS sedang mengerjakan penulisan FREELDR (yang bertujuan untuk menjadi pengganti NTLDR yang jauh lebih sederhana) sejak TAHUN (dan percayalah ada beberapa programmer ReactOS yang benar-benar bagus dan bagus kawan).

Ini tampaknya (tetapi tidak didokumentasikan dengan jelas) bahwa mereka berhasil untuk boot eksperimental Server 2003 dengan NTLDR.

2.

Dengan diperkenalkannya dukungan untuk (U) EFI, BootMgr membantu untuk mengabstraksi perbedaan antara BIOS dan (U) EFI. Sebagai contoh, berikut adalah dua urutan:

BIOS (PCAT) -> BootMgr { BootMgr stub -> embedded BootMgr.exe } -> WinLoad.exe -> Windows
64-bit (U)EFI -> BootMgFw.efi -> BootMgr.efi -> WinLoad.efi -> Windows

WinLoad mengharapkan lingkungan tertentu (termasuk API) untuk hadir. BootMgr menangani ini, sehingga [hampir] program WinLoad yang sama akan bekerja di lingkungan mana pun.

Faktanya, (U) EFI mendefinisikan metode untuk menyimpan dan mengambil parameter boot, jadi BCD BootMgr mencakup tujuan yang sama, terlepas dari BIOS / (U) EFI.

Tetapi di luar perbedaan BIOS dan (U) EFI, BootMgr memungkinkan Anda membuat "pilihan boot," sedangkan WinLoad mem-boot sistem operasi tertentu yang diketahui cara mem-boot.

Tergantung pada seberapa banyak lingkungan yang diharapkan WinLoad untuk hadir, mungkin untuk memanggil WinLoad secara langsung. Wimboot Michael Brown memanggil BootMgr PE [1] secara langsung, sehingga ia bisa memanggil WinLoad secara langsung, kecuali bahwa WinLoad mungkin menginginkan lebih dari satu lingkungan. Anda bisa mencobanya!

[1] Jangan bingung dengan BootMgr yang dapat digunakan oleh GRUB4DOS dan Syslinux chain.c32. BootMgr itu termasuk sebuah rintisan yang tahu bagaimana memohon BootMgr PE yang tertanam.

osolmaz
sumber
1
Anda belum memberikan informasi yang cukup. Edit pertanyaan Anda untuk memberi tahu para penjawab apakah mesin ini memiliki firmware EFI atau firmware gaya PC / AT lama. Saat ini Anda sedang berbicara tentang program bootstrap MBR pada cakram yang dipartisi EFI, yang ( kecuali ada yang menggunakan salah satu program saya atau H. Peter Anvin) omong kosong dan sepertinya bukan cara bootstraps mesin Anda .
JdeBP
Kebijakan yang Anda jelaskan tidak keluar dari Microsoft mencegah siapa pun dari sistem boot ganda
Ramhound
@ JdeBP Anda benar. Pada titik tertentu, saya sebenarnya menggunakan keduanya. Saya menggunakan syslinux dengan metode pc \ at. Kemudian saya menginstal GRUB ke partisi EFI. Jadi laptop saya mendukung keduanya, tetapi saya memiliki hasil yang sama setiap kali. Saya akan mencoba memberi tahu diri saya sendiri sementara itu. Di sisi lain, apakah Anda mengerti apa yang saya coba capai? Melupakan apa yang telah saya jelaskan sebelumnya, mungkin Anda bisa memberi saya nasihat apakah itu bisa dilakukan atau tidak.
osolmaz
Saya tidak meminta jenis firmware dengan santai. Itu datum vital, yang harus Anda berikan. Tanpanya, orang bahkan tidak dapat memulai jawaban yang tepat. Edit pertanyaan Anda untuk memberi tahu kami jenis firmware, dan (jika EFI) apakah Anda telah mengaktifkan Modul Dukungan Kompatibilitas di setuputilitas firmware .
JdeBP
@ JdeBP Saya telah mengedit pertanyaan.
osolmaz

Jawaban:

5

Untuk menjawab pertanyaan awal Anda, tidak. Windows tidak dapat dimuat tanpa melalui bootloadernya sendiri (dalam hal instalasi UEFI, bootmgfw.efi). Ini karena Windows mengharapkan bootmanager berada di sana DAN untuk memanggil winload.efi. Jika itu tidak terjadi, maka Windows akan macet sampai Anda memperbaiki masalahnya. Ada banyak alasan untuk ini (praktis dan bodoh). Sebagian besar, itu karena Microsoft menulis bootmanager untuk menangani semua hal (memuat OS, memuat lingkungan pemulihan, lingkungan pra-os semu, dan lain-lain). Satu-satunya cara untuk mencapai kemiripan kewarasan saat ini adalah dengan rantai beban menggunakan Grub-efi.

ChrisR.
sumber
Sebelum saya menerima ini sebagai jawabannya, saya harus bertanya: Apakah tugas itu akan sulit dicapai, sebagian besar karena jumlah peretasan tingkat rendah yang diperlukan untuk menipu program apa pun yang terlibat dalam proses; penipuan adalah bahwa Windows masih akan berpikir itu telah di-boot dengan bootmanager sendiri, sementara pada kenyataannya itu adalah sesuatu yang lain ... Dan saya kira setiap versi Windows akan membutuhkan upaya yang terpisah. Tapi ini tidak membuat tugas itu mustahil, hanya sangat sulit bukan?
osolmaz
3
Saya tidak akan mengatakan itu sepenuhnya mustahil (dalam pemrograman), tetapi Anda harus membalikkan panggilan yang dibuat oleh bootmgfw.efi ke OS windows. Jumlah peretasan tingkat rendah yang terlibat dalam hubungannya dengan kebutuhan untuk merekayasa balik panggilan protokol boot tingkat rendah ke pemuat OS sangat mahal dalam hal waktu. Anda tidak hanya perlu membodohi Windows agar percaya bahwa bootmgfw.efi ada di sana, tetapi juga bahwa BCD ada dan diciptakan oleh alat sendiri dan seterusnya.
ChrisR.
2

Anda perlu menambahkan bootloader Windows EFI ke daftar opsi boot di firmware UEFI. Dengan begitu, Anda akan dapat memilih apakah:

  1. GRUB2 harus dimuat atau
  2. Bootloader Windows harus dimuat

Opsi tambahan seperti drive DVD, hard drive eksternal atau boot jaringan juga harus terlihat pada saat itu. Bootloader UEFI biasanya berada di partisi \EFI( /boot/efi/). Karena Anda baru saja menyalin gambar harddisk Windows tanpa menginstal Windows dengan benar, partisi EFI mesin Anda saat ini mungkin tidak berisi bootloader yang tepat. Karena itu perlu untuk

  1. Salin bootloader ke partisi EFI
  2. Tambahkan Windows sebagai opsi boot bersama GRUB2

Anda kemudian harus dapat memilih OS mana yang di-boot dengan hanya mengubah urutan boot di BIOS. Di laptop saya, menekan F12memunculkan menu untuk memilih bootloader mana yang akan dimuat.

Untuk langkah-langkah ini, saya akan menggunakan efibootmgrdan mengikuti langkah-langkah dari tutorial ini :

Anda harus menyalin file terkait bootmgfw.efike partisi EFI di \EFI\Microsoft\Boot\bootmgfw.efi, atau /boot/efi/Microsoft/Boot/bootmgfw.efisaat menggunakan Linux:

# mkdir -p /boot/efi/EFI/Microsoft
# cp -r Microsoft /boot/efi/EFI/Microsoft

di mana Microsoftfolder berisi file EFI asli untuk versi Windows Anda.

Maka Anda perlu menambahkan .efifile ke entri boot UEFI menggunakan:

# efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\Microsoft\\Boot\\bootmgfw.efi -L "Windows Boot Manager"

di mana tentu saja Anda perlu mengubah /dev/sdadan -p 1ke nilai yang benar untuk perangkat disk Anda dan nomor partisi.

Perhatikan ini jika Anda memiliki laptop Lenovo:

Perhatikan juga bahwa setidaknya satu produsen (Lenovo) mengirimkan produk dengan bug yang diketahui yang menyebabkan sistem menolak untuk melakukan boot kecuali nama boot loader adalah "Windows Boot Manager" atau "Red Hat Enterprise Linux".

Mulai PC Anda kemudian harus menunjukkan sesuatu seperti ini (jika Anda menahan tombol yang sesuai selama proses boot):

Windows Boot Manager
ubuntu
USB CD
USB FDD
ATAPI CD
ATA HDD2

(etc.)

dan bcdeditpada Windows menunjukkan ini:

C:\WINDOWS\system32>bcdedit /enum firmware

Firmware Boot Manager
---------------------
identifier              {fwbootmgr}
displayorder            {bootmgr}
                        {bb086763-b111-11e2-bf8e-806e6f6e6963}
                        {8e7fb978-8bc8-11e2-bf2f-806e6f6e6963}
timeout                 0

Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
integrityservices       Enable
default                 {current}
resumeobject            {ec215a09-8bc4-11e2-bf2b-0024d7eb75a4}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 2

(...)

Firmware Application (101fffff)
-------------------------------
identifier              {bb086763-b111-11e2-bf8e-806e6f6e6963}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\ubuntu\grubx64.efi
description             ubuntu
jmiserez
sumber
1
Dijelaskan dengan sangat baik, terima kasih. Beberapa hari yang lalu, saya telah berhasil melakukan hal yang sama, tetapi masih menggunakan partisi terpisah untuk boot manager Windows EFI, dan melalui pemuatan rantai dengan GRUB. Sekarang saya belajar bahwa saya juga bisa menggunakan EPS asli saya. Juga, alih-alih menggunakan bcdedit, saya menggunakan hivex untuk memperbaiki BCD; Saya bermaksud menulis kumpulan alat gratis untuk dapat memanipulasi file BCD di linux. Tetapi apa yang saya coba capai adalah sesuatu yang berbeda. Jika bootmgfw.efi melakukan eksekusi winload.efi, mengapa saya tidak dapat menjalankan winload.efi langsung dari GRUB?
osolmaz
Oh begitu. Jadi Anda ingin melewatkan memuat Windows Boot Manager (bootmgfw.efi) dan memuat Windows Bootloader (winload.efi) secara langsung dengan membaca BCD System Store? (Mengikuti definisi dari sini .) Itu menarik, saya belum pernah mendengar seseorang melakukan itu. Apa motivasi Anda, mengapa perlu langsung memuat winload.efi? Juga, apakah Anda memiliki salinan lengkap \EFI\Boot\Microsoftfolder untuk pengujian (ada beberapa file di sana)?
jmiserez
Nah jika saya ingin mencapainya, saya bahkan tidak perlu membaca BCD, saya hanya bisa menambahkan entri di GRUB untuk partisi. (Saya tidak termasuk hibernasi dan pemulihan sistem di sini) Motivasi saya adalah, akan lebih mudah untuk menginstal windows tanpa khawatir Anda harus memperbaikinya nanti. Berguna untuk sysadmin, instalasi batch dan sebagainya (dan untuk saya ^^). Adapun mengapa langsung memuat winload.efi: berurusan dengan spesifikasi tertutup file registri Windows (biner) jauh lebih membosankan daripada berurusan dengan file konfigurasi teks biasa seperti GRUB. Lebih mudah untuk menghilangkan perantara.
osolmaz
1
Saya mengerti maksud Anda, ya itu akan sangat berguna. Saya bertanya-tanya apakah 1) ada variabel bootmgfw.efi beralih ke winload.efi ketika diluncurkan, dan 2) apakah mungkin ada masalah dengan boot aman dan semacam rantai sertifikat yang diperlukan. Apakah Anda sudah tahu apa inherit {bootloadersettings}arti sebenarnya dari toko BCD?
jmiserez
1
3) Karena saya menggunakan hivex, saya bisa menebak objek mana yang sesuai. Ada objek pengaturan "global" di dalam sarang, dan setiap objek lain memiliki referensi untuk itu. Yang bisa saya katakan adalah, hanya dua objek yang cukup untuk boot ke windows: 1: objek Windows Boot Manager dengan uuid konstan {9dea862c-5cdd-4e70-acc1-f32b344d4795} 2: objek yang berisi info partisi dan jalur bootloader untuk root Windows Anda yang sebenarnya. Bagian tersulit adalah memahami struktur data biner yang menentukan partisi. Hal ini banyak dilakukan oleh Wodny: bitbucket.org/wodny/libbcd/src .
osolmaz
0

Anda dapat melakukan instalasi dalam urutan apa pun, yaitu Instalasi GNU / Linux dan kemudian Windows atau sebaliknya.

Lakukan saja yang berikut ini setelah Anda menginstal semua sistem operasi Anda.

  1. Dapatkan "Boot Repair Disk" dari sini. http://sourceforge.net/projects/boot-repair-cd/

  2. Buat Live USB Drive Pen bootable-nya (Petunjuk di pendrivelinux.com)

  3. Atau bakar file ISO ke CD.

  4. Boot melalui ini dan ikuti petunjuk di layar. Anda akan memiliki GRUB yang diinstal ulang yang berisi semua sistem operasi yang Anda instal.

Semua yang terbaik.

Raju Devidas
sumber
1
Saya sadar akan hal itu, yang saya inginkan adalah sesuatu yang berbeda. Saya bertanya apakah Windows dapat di-boot langsung tanpa pemuatan rantai.
osolmaz