GRUB `ntldr` komutunun (modül) nasıl kullanılacağı hakkında daha fazla bilgiyi nerede bulabilirim?


16

Kısa süre önce GRUB ntldrmodülüne rastladım .

Görünüşe göre kullanılabilecek şeylerden biri, chainloaderaşağıdaki örnekte olduğu gibi Windows'un NT> = 6.0 sürümlerini önyüklemenin alternatifidir . (Windows bölümü için Birim Önyükleme Kaydı bozuksa çok kullanışlıdır.)

menuentry "Windows 7 (bootmgr on /dev/sda1)" --class windows --class os {
    insmod part_msdos
    insmod ntfs
    insmod ntldr
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 1EA0019AA0017A13
    ntldr ($root)/bootmgr
}

Bu önyükleme yönergesinin nasıl kullanılabileceği hakkında daha fazla bilgiyi nereden edinebilirim? Ben baktığımda o listede görmedik HTML sürümü ait GNU GRUB kılavuzuna .


Ckhan adlı kullanıcının yanıtına cevap ver

Çok teşekkür ederim! GRUB ntldrkomutu / modülü hakkında daha fazla bilgi edinmek için kaynak kodunu kazmaya çalışmam gerektiğine karar verdim . Ama sen benden daha iyi bir iş çıkardın.

Kodu yazan kişinin hangi tasarım tartışmalarına sahip olabileceğini görmek için e-posta arşivlerine bakmak hiç aklıma gelmezdi. Bu yöntem, gelecekte çok yardımcı olabileceğine benziyor. Bahsettiğiniz için teşekkürler.

GRUB ntldrdesteği hakkındaki düşüncelerim

  1. Ayrımın ne anlama geldiğinden tam olarak emin olmasam da, ntldrbir komut değil bir modül. Veya isterseniz dinamik olarak yüklenmiş bir komut.

    Senin ardından kaynak kodu bağlantısını ve çizgiler 152 (bakarak GRUB_MOD_INIT) ve 159 ( GRUB_MOD_FINI) Eğer tahmin ediyorum ... unload modülü ... yüke kodunu görebilir ve.

    GRUB, görünüşe göre " komut " olduğunu düşündüğünüz birçok işlevi modül olarak uygulamaktadır. Kullanımda fark ettiğim tek fark, bir modülü kullanmadan önce, komutla yüklendiğinden emin olması gerektiğidir insmod ntldr.

    Kenara: GRUB'un neden desteklemediğini hep merak ettim reboot. Komutun var olduğu ortaya çıkıyor, ancak bir modül. rebootİade edilirse unknown command,insmod rebootGRUB'un rebootkomutu "hatırlamasına" izin verir .

    Kenara: GRUB bir modülü ne zaman ve neden " boşaltabilir ", henüz bir fikrim yok. Belki de " çöp toplama " benzer bir şey sonucudur ?? Bir kez yüklendiğinde, bir sistem kapatıldıktan ve yeniden başlatıldıktan sonra bile modüllerin sürdüğünü fark ettim. Tabii ki, buna güvenemezsiniz , ancak pratikte bu genellikle işe yarıyor gibi görünüyor.
  2. Onların dayalı olması ilginçtir ntldrüzerinde chainloader. Ben chainloader.ckoda bakmadım . Muhtemelen Intel 16 bit gerçek modda yeniden yerleştirme yükü yapıyor mu?

    Ben değilim uyguladıkları vermedi ziyade memnun ntldrbir seçenek olarak chainloader. Vladimir'e katılıyorum. Kapakların altındaki benzerlikler ne olursa olsun, kullanım sözdizimi çok farklıdır. Mevcut yaklaşım daha az kludgy.
  3. Bu komutu GRUB'a eklemek için gösterilen coşku eksikliğini görmek de ilginç. Görünüşe göre GRUB geliştiricileri, Windows Partition Boot Record'un (PBR) zarar görmesinin çok düşük olduğunu düşündüler . Ancak, yeterince sıradan bir kurulum sırasında nasıl yapılacağını öğrenebilirim.

    Bir kullanıcının sisteminde Windows yüklü olduğunu varsayarak başlayın. Artık Windows ile birlikte Ubuntu (12.04 LTS) yüklüyorlar . Ubuntu kurulumu sırasında bir noktada GRUB'un nereye kurulacağını belirleyebilirler. Tahmin etmeye başlayamadığım nedenlerden bazıları, GRUB'u Windows'un kurulu olduğu bölüme kurmaya karar veriyor.

    Yükleme tamamlanır ve Ubuntu'yu başarıyla başlatabilirler. Onlar Grub menüsünün girişi seçerek Windows'u başlatmaya çalıştığınızda Ancak, Windows gelmez değil başlatın. Bunun yerine Windows'u GRUB ile başlatmaya çalışmak GRUB menüsünü yeniden görüntüler mi?

    Neden? Görünüşe göre, GRUB'u gerçekten Windows bölümüne yüklemeyi seçtiklerinde, Windows bölümünün PBR'si GRUB'un PBR'si ile aşırı yazıldı. Bu nedenle chainloader +1bir Windows önyükleyiciyi zincirle yüklemez, bunun yerine GRUB'u yeniden yükler.

    IMO, en güvenli , hızlı bu durumda önyükleme Windows bir kullanıcıya izin vermek için bir yol GRUB yeni kullanmaktır ntldr. Bunun geliştiricilerin ilgisini çekip çekmeyeceğini merak ediyorum. Bu senaryoyu beklemediklerini umuyorum.

Acaba Windows dışındaki bootloader'lar ntldrve bootmgrGRUB ntldrkomutu yüklenebilir mi?


1
Harika şeyler! Gerçekten grub-devel posta listesine bir satır bırakmalı ve bu soruya bir göz atmalarını isteyebilir ve belki de bazı cevaplanmamış sorulara girebilir ve / veya bazı varsayımlarımızı düzeltebilirsiniz. Soruyu ilk etapta açtığınız için teşekkürler!
ckhan

Yanıtlar:


14

Belgelenmemiş özelliğin araştırılması

ntldrKomuta haklısınız (modül değil, komuttur) belgelenmemiştir. Bu yüzden kod arkeolojisindeki bazı maceralar için harika bir bahane .

Belgelenmemiş bir özellik bulduğumda yapılacak ilk şey kaynakları kontrol etmektir.

  • Savannah git repo'daki kaynak, Ağustos 2010'da ana hatta birleştirildiğini gösteriyor.

  • Kaynak dalı artık görünmüyor, ancak yine de Nisan 2010'da o yılın başlarında ortaya çıktığını görebilirsiniz . "Vladimir 'kodlayıcı' Serbinenko" dan check-in yorumu

    ntldr support. (based on information from nyu but no code from him)
    

chainloaderKomuta çok yakından dayanıyor , o kadar çok ki başlık açıklamasındaki dosya adı hala güncellenmedi.

Artık tam bir iade ve bir isme sahip olduğumuza göre, posta arşivlerini kontrol edebiliriz. Geliştiricilerin bu özelliği bir yıl önce grub-devel posta listesinde eklemeyle ilgili tartışmaları nerede olduğunu görebilirsiniz :

Bu konuyla ilgili bazı alıntılar:

Robert Millan Bu düzeltme eki, NTLDR önyükleme semantiği için bir yükleyici uygular (BootMGR'de aynıdır, bu nedenle her ikisi de desteklenir)

Robert Millan Bu özelliği hiç istiyorsak, bağımsız bir komut yerine zincir yükleyicide bir seçenek olması gerektiğini düşünüyorum. Zincir yükleyiciyle hemen hemen aynıdır, tek fark ntldr'nin PBR'nin yerine PBR tarafından PBR'den sonra yük olmasıdır.

Vladimir Serbinenko Ben ntldr bu PBR sadece bölümü tanımlamak için süper blok olarak kullandığından herhangi bir sorun olduğunu sanmıyorum. Bu nedenle, bu yüklemeyi $ root'u geçen özel bir durum olarak görmeyi tercih ederim, sadece formu biraz garip

Yves Blusseau Komut hakkında, sadece bir komutumuz varsa kullanıcı için daha basit olacağını düşünüyorum: bootloader türünü tespit etmeye çalışacak olan zincir yükleyici (grub4dos gibi). Bu sadece benim kişisel görüşüm.

Vladimir Serbinenko Buna katılmıyorum. chainloader ve ntldr aynı sözdizimini paylaşmaz: chainloader bir bootector beklerken ntldr bir ntldr ot bootmgr dosyası bekler. GRUB2, biri "çekirdek" komutu olan GRUB1'in kötü tasarım kararlarını kırmak için yapılır. GRUB4DOS bu konuda GRUB1'i takip ediyor.

Robert Millan Alright. Ayrı bir komut yapalım. Yine de chainloader.c ile kod paylaşmak gerektiğini düşünüyorum (bazı ifdefs ile).

Sorunuzu cevaplama

Bütün bunları inceledikten sonra, nasıl kullanılabileceği hakkında ne biliyoruz?

  • Zincir yükleyiciye dayanır.

  • Tek bir argüman alır: açılacak dosya.

  • Bölüm önyükleme kaydını önler: böylece orada bozulmayı atlayabilir. Bunu nasıl test ettiklerini ayrıntılı olarak anlatan bu gönderiye bakın .

  • Sadece 160 satır kod var , orada fazla bir şey olmadığını görebilirsiniz.

Umarım faydalı olmuştur!

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.