Windows 8.1'i kendi bootmanager'i olmadan başlatmak mümkün müdür?


10

Dizüstü bilgisayarıma Windows ve Linux çift önyüklemeyi yüklemenin daha kolay bir yolunu bulmaya çalışıyorum, bu sırayla değil. Genel olarak yapmamız gereken şey önce Windows'u yüklemek, ardından linux'u yüklemek ve GRUB'un Windows'u işlemesine izin vermektir.

Bu yüzden elde etmeye çalıştığım şey o sinir bozucu kurulum işlemini (windows) atlatmanın ve doğrudan sürücüme doğrudan kopyalamak için bir görüntü kullanmanın bir yolunu bulmak. Bu aynı zamanda önyükleme yöneticimi (GRUB) korumamı da sağlar. (daha sonra geri yükleyemeyeceğimden değil, ancak tekelleştirmek Microsoft politikasıdır, bu durumda sistemdeki diğer önyükleme yöneticilerinin varlığını reddeder).

İlk olarak Windows 8.1'in yasal bir kopyasını aldım, sonra VirtualBox kullanarak sanal bir makineye kurmaya devam ettim. Sonra, GPT bölümlenmiş sabit sürücümde bir NTFS bölümü oluşturdum ve Windows bölümünün içeriğini .vdi görüntüsünden yeni oluşturulan bölüme kopyaladım.

Tabii ki, henüz çalışmıyor. Bootmgr'un nasıl değiştirileceğini bilmiyorum. O verir

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

çünkü önyükleme, sistem kurtarma, vb. için kullanılan diğer bölümdeki dosyayı bulamaz.

Şimdi, bootmgr sonunda Windows'u yüklemek için winload.exe'yi çalıştırdığını okudum. Bundan sonra ne yapacağım hakkında hiçbir fikrim yok.

Teorik olarak çalışması gerektiğini düşünüyorum çünkü Windows'u çalıştırmak için gereken tüm dosyalara sahibim. Ayrıca, bunu düşünen tek kişi olmamam gerektiğini düşünüyorum ve bu yüzden burada çok temel bir şeyi kaçırıyor olabilirim. Belki zaten yapılmıştır?

Önyüklemenin nasıl çalıştığı hakkında pek bir fikrim yok. Anlayabildiğim şey, Windows ve Linux'u çift önyüklediğinizde, windows önyükleyiciyi linux'lara zincirlemiş olmanızdır. Yani elde etmeye çalıştığım şey bir şekilde Windows bootloader'dan kurtulmak.

DÜZENLE

İkili dosyalara bakıyorum bootmgrve \Boot\BCD. bootmgrBCD dosyasını okur ve önyükleme yapabileceğiniz seçenekleri listeler.

Bu yüzden yürütme gibi bilgiler winload.exeBCD dosyasında bulunur. Şimdi, modülün bootmgrkendisi tarafından syslinux tarafından yürütüldüğünü düşünüyorum chain.c32. Ne bir şekilde pencereler bootloader yürütmek yapmanız ie çalışıyorum winload.exe(mümkünse) syslinux doğrudan veya değiştirmek bootmgrçalıştırır, böylece winload.exe(kimin yolu doğrudan olacaktır kendisini bootmgrBCD veya başka bir şey bakmadan yürütülebilir).

Hazırda bekletme (farklı bir prosedür gerektirir) bu adımda beni ilgilendirmez.

Ürün yazılımı türünü ve (EFI ise) ürün yazılımı kurulumunda Uyumluluk Destek Modülünü etkinleştirip etkinleştirmediğinizi belirtmek için sorunuzu düzenleyin

Ürün yazılımım EFI (CSM etkinken) ve normalde GRUB kullanarak Arch Linux'a önyükleme yapıyorum. Bunun eski sistemlerde ve EFI'da bootmgryürütüldüğünü keşfettim .System32\winload.exeSystem32\winload.efi

Ben 0.0buradan ne yapılması fikri. Son 10 gündür BCD'de değişiklikler yapmaya çalışıyorum ve bence başarıya ulaşmak üzereyim. Ama bu alakasız, çünkü gerçekten yapmak istediğim şey Windows Önyükleme Yöneticisini tamamen atlamak.

winload.efiEFI kabuğundan (sadece bir tahmin) veya GRUB'da başka bir modifikasyon yapmanın bir yolu olup olmadığı hakkında bir fikriniz varsa, Windows'u zincir yükleyici olmadan EFI modunda önyükleyecektir.

Herhangi bir tavsiye bekliyoruz.

ek

Aşağıdaki forum gönderileri bazı yararlı bilgiler sağlayabilir:

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

1.

Grub4dos şu anda bir önyükleyiciyi (NTLDR veya BOOTMGR gibi) zincir yükleyebilir, çünkü "normal" önyükleyicide bulunan kodun (yani 300 bayt makine kodu gibi bir şeyin) yerini alabilir.

Bu kod birkaç parametreyi ayarlar ve yükleyiciyi çağırır.

Bu bile farklı kodu anlamak ve çoğaltmak hiç de kolay değildi.

BOOTMGR gibi bir NT sistem yükleyicisi, tek bir .exe'de "gerçek mod" işletim sisteminde (tamamen DOS'un aksine değil) ve hem düz metin hem de Kayıt Defteri kovanlarını ayrıştırmak için tesisler / araçlarda az ya da çok vardır. kolayca sıfırdan yazılmış.

@ReactOS iyi adamları FREELDR (bu çok daha basit NTLDR'nin yerini almayı hedefliyor) yazmaya çalışıyor (ve inan bana ReactOS programcıları arasında gerçekten iyi ve iyi olanlar var).

Görünüyor onlar NTLDR ile deneysel bir Server 2003 önyükleme başardı (ama açıkça belgelenmiş değildir).

2.

(U) EFI desteği ile BootMgr, BIOS ve (U) EFI arasındaki farkın soyutlanmasına yardımcı olur. Örneğin, işte iki dizi:

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

WinLoad belirli bir ortamın (API dahil) bulunmasını bekler. BootMgr bununla ilgilenir, bu nedenle aynı WinLoad programı her iki ortamda da çalışır.

Aslında, (U) EFI önyükleme parametrelerini saklamak ve almak için bir yöntem tanımlar, bu nedenle BootMgr'un BCD'si BIOS / (U) EFI'dan bağımsız olarak aynı amacı kapsar.

Ancak BIOS ve (U) EFI farklılıklarının ötesinde, BootMgr bir "önyükleme seçimi" yapmanıza izin verirken, WinLoad nasıl önyükleneceğini bildiği belirli bir işletim sistemini önyükler.

WinLoad'ın mevcut olmasını beklediği ortamın miktarına bağlı olarak, WinLoad'ı doğrudan çağırmak mümkün olabilir. Michael Brown'ın wimboot'u doğrudan BootMgr PE'yi [1] çağırıyor, bu yüzden WinLoad'ı doğrudan daha fazla ortam istemesi dışında WinLoad'ı doğrudan çağırabilir. Deneyebilirsiniz!

[1] GRUB4DOS ve Syslinux 'chain.c32'nin çağırabileceği BootMgr ile karıştırılmamalıdır. Bu BootMgr, katıştırılmış BootMgr PE'yi nasıl çağıracağını bilen bir saplama içerir.


1
Henüz yeterli bilgi vermediniz. Düzen bu makine EFI firmware veya eski PC / AT tarzı firmware olup olmadığı Cevap Gönderen anlatmak için sorunuzu. EFI (ki, diskleri bölümlenmiş üzerine anda size MBR önyükleme programlarında bahsediyoruz biri benim programlarından birini kullanarak sürece muhtemelen saçma veya H. Peter Anvin'in) ve değil yolu makine özyüklenirler o .
JdeBP


@JdeBP Haklısın. Bir noktada, aslında her ikisini de kullanıyordum. Yöntem \ pc ile syslinux kullanıyordum. Sonra GRUB'u bir EFI bölümüne kurdum. Yani dizüstü bilgisayarım her ikisini de destekliyor, ancak her seferinde aynı sonucu elde ettim. Bu arada kendimi bilgilendirmeye çalışacağım. Öte yandan, neyi başarmaya çalıştığımı anlıyor musunuz? Daha önce tarif ettiğim şeyi unutmak, belki de yapılabilir olup olmadığı konusunda bana tavsiyede bulunabilirsin.
osolmaz

Ürün yazılımı türünü boş yere sormadım. Sağlamanız gereken hayati bir veri. Onsuz, insanlar düzgün bir cevap bile başlatamazlar. Düzenleme soru bize firmware türünü anlatmak ve (eğer EFI) Eğer üretici yazılımının uyumluluk Destek Modülü etkin olup olmadığını setupyardımcı programı.
JdeBP

@JdeBP Soruyu düzenledim.
osolmaz

Yanıtlar:


5

Orijinal sorunuza cevap vermek için hayır. Windows kendi önyükleyicisinden geçmeden yüklenemez (UEFI yüklemeleri durumunda, bootmgfw.efi). Bunun nedeni, Windows'un bu bootmanager'in orada olmasını ve winload.efi'yi çağırmasını beklemesidir. Bu gerçekleşmezse, sorunu çözene kadar Windows çökecektir. Bunun birçok nedeni var (pratik ve cahil). Çoğunlukla, Microsoft her şeyi işlemek için bootmanager yazdı (işletim sistemini yükleme, kurtarma ortamını yükleme, sözde pre-os ortamı, vb.). Şu anda herhangi bir akıl sağlığına kavuşmanın tek yolu Grub-efi kullanarak zincir yükü yapmaktır.


Bunu cevap olarak kabul etmeden önce şunu sormalıyım: Bu, çoğunlukla sürece dahil olan herhangi bir programı aldatmak için gereken düşük seviyeli saldırı miktarından dolayı görevin başarılması zor olacak mı; aldatma, Windows'un hala kendi bootmanager ile önyüklendiğini düşünmesi, gerçekte başka bir şeydi ... Ve Windows'un her sürümünün ayrı çaba gerektireceğini tahmin ediyorum. Ama bu görevi imkansız hale getirmiyor, gerçekten zor değil mi?
osolmaz

3
(Programlamada) tamamen imkansız olduğunu söylemezdim, ancak bootmgfw.efi'nin Windows işletim sistemine yaptığı çağrıları tersine çevirmek zorunda kalacaksınız. Bir OS yükleyiciye düşük seviyeli önyükleme protokol çağrılarını tersine çevirmek zorunda kalması ile bağlantılı düşük seviyeli saldırı miktarı zaman açısından oldukça pahalıdır. Sadece bootmgfw.efi'nin orada olduğuna inanmak için Windows'u kandırmakla kalmaz, aynı zamanda BCD'nin var olduğunu ve kendi araçlarıyla yaratıldığını vb.
ChrisR.

2

Windows EFI önyükleyicisini UEFI ürün yazılımındaki önyükleme seçenekleri listesine eklemeniz gerekir. Bu şekilde aşağıdakileri seçebileceksiniz:

  1. GRUB2 yüklenmeli veya
  2. Windows Bootloader yüklenmeli

DVD sürücüsü, harici sabit sürücüler veya ağ önyüklemesi gibi ek seçenekler de bu noktada görünmelidir. UEFI önyükleyici genellikle \EFI( /boot/efi/) bölümünde bulunur. Windows'u düzgün yüklemeden Windows sabit disk görüntüsünü yeni kopyaladığınız için, geçerli makinenizin EFI bölümü uygun önyükleyiciyi içermeyebilir. Bu nedenle

  1. Önyükleyiciyi EFI bölümüne kopyalayın
  2. Windows'u GRUB2 ile birlikte önyükleme seçeneği olarak ekleyin

Daha sonra BIOS'ta önyükleme sırasını değiştirerek hangi işletim sisteminin önyükleneceğini seçebilmeniz gerekir. Dizüstü bilgisayarımda, basıldığında F12hangi önyükleyicinin yükleneceğini seçmek için bir menü açılır.

Bu adımlar için kullanacağım efibootmgrve bu eğitimdeki adımları takip edeceğim :

İlgili dosyayı bootmgfw.efişu adreste \EFI\Microsoft\Boot\bootmgfw.efiveya /boot/efi/Microsoft/Boot/bootmgfw.efiLinux kullanırken EFI bölümüne kopyalamanız gerekir :

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

nerede MicrosoftWindows sürümü için özgün EFI dosyalarını içeren bir klasördür.

Sonra .efidosyayı kullanarak UEFI önyükleme girişlerine eklemeniz gerekir :

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

elbette değişikliği gereken yere /dev/sdave -p 1disk cihazı ve bölüm numarası doğru değerler.

Bir Lenovo dizüstü bilgisayarınız varsa aşağıdakilere dikkat edin:

Ayrıca, en az bir üreticinin (Lenovo), önyükleme yükleyicisinin adı "Windows Önyükleme Yöneticisi" veya "Red Hat Enterprise Linux" olmadığı sürece sistemin önyüklemeyi reddetmesine neden olan bilinen bir hata içeren ürünler gönderdiğini unutmayın.

PC'nizi başlatmanızın böyle bir şey göstermesi gerekir (önyükleme işlemi sırasında ilgili tuşları basılı tutarsanız):

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

(etc.)

ve bcdeditWindows'da şunu gösterir:

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

1
Çok güzel açıkladı, teşekkür ederim. Birkaç gün önce, aynı şeyi yapmayı başardım, ancak yine de Windows EFI önyükleme yöneticisi için ayrı bir bölüm kullanarak ve GRUB ile zincirleme yoluyla. Şimdi orijinal EPS'mi de kullanabileceğimi öğrendim. Ayrıca, bcdedit kullanmak yerine, BCD'yi düzeltmek için hivex kullandım; Linux'ta BCD dosyalarını manipüle edebilmek için ücretsiz araçlar koleksiyonu yazmak niyetindeyim. Ama elde etmeye çalıştığım şey farklı bir şey. Bootmgfw.efi bir şekilde winload.efi çalıştırırsa, neden winload.efi dosyasını doğrudan GRUB'dan yürütemiyorum?
osolmaz

Ah anlıyorum. Yani, Windows Önyükleme Yöneticisi'ni (bootmgfw.efi) yüklemeyi atlamak ve BCD Sistem Mağazasını okuyarak Windows Önyükleyici'yi (winload.efi) doğrudan yüklemek mi istiyorsunuz? ( Buradaki tanımları gözden geçirerek .) Bu ilginç, bunu yapan birini hiç duymadım. Motivasyonunuz nedir, winload.efi'yi doğrudan yüklemek neden gereklidir? Ayrıca, \EFI\Boot\Microsofttest için klasörün tam bir kopyası var mı (içinde birkaç dosya var)?
jmiserez

Bunu başarabilirsem, BCD'yi okumam bile gerekmiyordu, sadece bölüm için GRUB'a bir giriş ekleyebilirdim. (Burada hazırda bekletme ve sistem kurtarma işlemlerini hariç tutuyorum) Motivasyonum, daha sonra düzeltmek zorunda kalacağınızdan endişe etmeden pencereleri kurmak çok daha kolay olurdu. Sistem yöneticileri, toplu kurulumlar vb.Için (ve benim için ^^) yararlıdır. Neden doğrudan winload.efi yüklüyor: kapalı spec Windows kayıt defteri dosyaları (ikili) ile uğraşmak GRUB gibi düz metin yapılandırma dosyaları ile uğraşmaktan çok daha sıkıcı. Orta adamı ortadan kaldırmak daha kolaydır.
osolmaz

1
Ne demek istediğini anlıyorum, evet bu çok kullanışlı olurdu. Ben 1) bootmgfw.efi başlatıldığında winload.efi'ye geçerken herhangi bir değişken olup olmadığını merak ediyorum ve 2) güvenli önyükleme ile ilgili bir sorun ve gerekli bir sertifika zinciri türü varsa. Ne öğrendim mı inherit {bootloadersettings}BCD mağaza aslında anlamı içinde?
jmiserez

1
3) Hivex kullandığım için hangi nesneye karşılık geldiğini tahmin edebilirim. Kovanda bir "genel" ayarlar nesnesi vardır ve diğer tüm nesnelerin buna bir referansı vardır. Söyleyebileceğim, sadece iki nesne pencerelere önyükleme yapmak için yeterli: 1: sabit uuid {9dea862c-5cdd-4e70-acc1-f32b344d4795} 2 olan Windows Boot Manager nesnesi: bölüm bilgilerini ve önyükleyici yolunu içeren nesne gerçek Windows kökünüz için. En zor kısım, bölümü belirten ikili veri yapısını anlamaktı. Bu çoğunlukla wodny tarafından yapıldı: bitbucket.org/wodny/libbcd/src .
osolmaz

0

Kurulumları herhangi bir sırayla yapabilirsiniz, örneğin GNU / Linux Kurulumu ve ardından Windows veya tam tersi.

Tüm işletim sistemlerinizi kurduktan sonra aşağıdakileri yapmanız yeterlidir.

  1. "Boot Repair Disk" i buradan alın. http://sourceforge.net/projects/boot-repair-cd/

  2. Canlı önyüklenebilir bir USB Pen Drive oluşturun (pendrivelinux.com üzerindeki talimatlar)

  3. Veya ISO dosyasını CD'ye yazın.

  4. Bunu önyükleyin ve ekrandaki talimatları izleyin. Yüklü tüm işletim sistemlerini içeren yeniden yüklenmiş bir GRUB'a sahip olacaksınız.

Herşey gönlünce olsun.


1
Bunun farkındayım, istediğim farklı bir şey. Windows'un zincir yüklemesi olmadan doğrudan önyükleme yapıp yapamayacağını soruyorum.
osolmaz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.