मैं GRUB `ntldr` कमांड (मॉड्यूल?) का उपयोग करने के तरीके के बारे में अधिक जान सकता हूं


16

मैं हाल ही में GRUB ntldrमॉड्यूल में ठोकर खाई है ।

जाहिर तौर पर इसके लिए इस्तेमाल की जाने वाली चीजों chainloaderमें से एक उदाहरण के लिए नीचे दिए उदाहरण में NT> = 6.0 वर्जन विंडोज के बूट के विकल्प के रूप में है। (बहुत आसान है अगर एक Windows विभाजन के लिए वॉल्यूम बूट रिकॉर्ड, उह, दूषित है।)

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
}

इस बूट निर्देश का उपयोग कैसे किया जा सकता है, इसके बारे में मैं और अधिक कैसे जान सकता हूं? मैं इसे सूचीबद्ध जब मैं में देखा नहीं देखा था HTML संस्करण के जीएनयू GRUB मैनुअल


Ckhan के जवाब का जवाब देना

आपका बहुत बहुत धन्यवाद! मैंने बहुत फैसला किया था कि मुझे GRUB ntldrकमांड / मॉड्यूल के बारे में अधिक जानने के लिए सोर्स कोड के माध्यम से खुदाई करने की कोशिश करनी होगी । लेकिन आपने मुझसे बेहतर काम किया होगा।

यह मेरे लिए कभी ईमेल अभिलेखागार को देखने के लिए नहीं हुआ होगा कि यह देखने के लिए कि कोड लिखने वाले व्यक्ति के लिए कौन से डिज़ाइन चर्चा करते हैं। यह तरीका लगता है कि यह भविष्य में बहुत मददगार हो सकता है। इसका उल्लेख करने के लिए धन्यवाद।

GRUB ntldrसमर्थन के बारे में मेरे विचार

  1. हालांकि मैं वास्तव में निश्चित नहीं हूं कि भेद का मतलब कितना है, ntldrएक मॉड्यूल है, एक कमांड नहीं। या यदि आप चाहें तो शायद एक गतिशील रूप से भरी हुई कमांड।

    अपने स्रोत कोड लिंक का अनुसरण करते हुए और 152 ( GRUB_MOD_INIT) और 159 ( GRUB_MOD_FINI) लाइनों को देखकर आप लोड करने के लिए कोड देख सकते हैं और ... मैं अनुमान लगा रहा हूं ... मॉड्यूल को लोड करें।

    GRUB जाहिरा तौर पर कई कार्यों को लागू करता है जो आपको लगता है कि मॉड्यूल के रूप में " कमांड " हो सकते हैं । उपयोग में एकमात्र अंतर जो मुझे पता है कि एक मॉड्यूल का उपयोग करने से पहले यह सुनिश्चित करना चाहिए कि इसे कमांड के साथ लोड किया गया है insmod ntldr

    एक तरफ: मैं हमेशा सोचता था कि GRUB समर्थन क्यों नहीं करता है reboot। यह पता चलता है कि कमांड मौजूद है, लेकिन यह एक मॉड्यूल है। अगर rebootलौटता है unknown command, तोinsmod rebootGRUB को rebootकमांड को "याद" करने की अनुमति देता है ।

    एक तरफ: कब और क्यों GRUB एक मॉड्यूल को " अनलोड " कर सकता है , मुझे अभी तक पता नहीं है। शायद यह " कचरा संग्रह " के समान कुछ का परिणाम है ?? मैंने देखा है कि एक बार लोड हो जाने के बाद भी मॉड्यूल चालू रहना पड़ता है, भले ही कोई सिस्टम डाउन हो जाए और रिबूट हो जाए। बेशक, आप उस पर निर्भर नहीं हो सकते हैं , लेकिन यह प्रतीत होता है कि यह अक्सर अभ्यास में कैसे काम करता है।
  2. यह दिलचस्प है कि वे आधारित ntldrहैं chainloader। मैंने chainloader.cकोड को नहीं देखा है । मुझे लगता है कि यह शायद इंटेल 16-बिट वास्तविक मोड में एक स्थानांतरित लोड भी करता है?

    मैं कर रहा हूँ बल्कि खुशी है कि उन्हें लागू नहीं किया था ntldrके एक विकल्प के रूप chainloader। मैं व्लादिमीर से सहमत हूं। कवर के तहत जो भी समानताएं हैं, उपयोग वाक्यविन्यास बहुत अलग है। वर्तमान दृष्टिकोण कम गुदगुदी है।
  3. इस कमांड को GRUB में जोड़ने के लिए उत्साह की स्पष्ट कमी को देखना भी दिलचस्प है। जाहिरा तौर पर GRUB डेवलपर्स ने विंडोज पार्टीशन बूट रिकॉर्ड (PBR) को नुकसान पहुंचाने की सोची थी। हालाँकि, मैं यह पता लगा सकता हूं कि एक साधारण पर्याप्त इंस्टॉल के दौरान इसे कैसे किया जाए।

    किसी उपयोगकर्ता द्वारा अपने सिस्टम पर स्थापित विंडोज को मानकर शुरू करें। वे अब उबंटू (12.04 LTS) "विंडोज़ के साथ " स्थापित करते हैं । उबंटू स्थापित के दौरान एक बिंदु पर वे स्पष्ट रूप से तय कर सकते हैं कि वे कहाँ स्थापित करना चाहते हैं। जिन कारणों से मैं अनुमान लगाना शुरू नहीं कर सकता, उनमें से कुछ में विभाजन को GRUB स्थापित करने का निर्णय लिया गया है जिसमें विंडोज स्थापित है।

    स्थापित पूरा हो गया है और वे सफलतापूर्वक उबंटू शुरू कर सकते हैं। हालाँकि, जब वे GRUB मेनू में प्रविष्टि का चयन करके Windows को प्रारंभ करने का प्रयास करते हैं, तो Windows प्रारंभ नहीं होता है। बजाय GRUB के साथ विंडोज शुरू करने का प्रयास GRUB मेनू को फिर से प्रदर्शित करता है?

    क्यों? खैर, जाहिरा तौर पर जब वे GRUB को विंडोज़ विभाजन में स्थापित करने के लिए चुने जाते हैं, तो वास्तव में जो कुछ हुआ था, वह था विंडोज विभाजन के लिए PBR को GRUB के PBR के साथ लिखा गया था। इसलिए chainloader +1विंडोज बूटलोडर को चेन लोड नहीं करता है, बल्कि GRUB को फिर से लोड करता है।

    IMO, उपयोगकर्ता को उस स्थिति में विंडोज को बूट करने की अनुमति देने का सबसे सुरक्षित त्वरित तरीका है GRUB के नए का उपयोग करना ntldr। मुझे आश्चर्य है कि यह डेवलपर्स के लिए ब्याज की होगी। मुझे उम्मीद है कि उन्होंने इस परिदृश्य का अनुमान नहीं लगाया था।

मुझे आश्चर्य है कि विंडोज वालों के अलावा अन्य बूटलोडर्स ntldrऔर bootmgrGRUB ntldrकमांड क्या लोड कर सकते हैं?


1
उत्तम सामग्री! मुझे वास्तव में लगता है कि आपको ग्रब-डेवेल मेलिंग सूची पर एक पंक्ति छोड़नी चाहिए, और उन्हें इस प्रश्न पर एक नज़र रखने के लिए कहना चाहिए और शायद कुछ अनुत्तरित प्रश्नों और / या हमारी कुछ मान्यताओं को सुधारने पर झंकार करना चाहिए। पहली बार में सवाल खोलने के लिए धन्यवाद!
ckhan

जवाबों:


14

अनिर्धारित सुविधा पर शोध करना

आप सही ntldrकमांड हैं (यह कमांड है, मॉड्यूल नहीं है) प्रलेखित नहीं है। तो यह कोड पुरातत्व में कुछ रोमांच के लिए एक महान बहाना है ।

जब भी मुझे कोई अनिर्दिष्ट सुविधा मिलती है, तो पहली बात यह है कि स्रोतों की जांच करें।

  • सावन गिट रेपो के स्रोत से पता चलता है कि इसे अगस्त 2010 में मुख्य लाइन में मिला दिया गया था।

  • स्रोत शाखा अब और अधिक नहीं लगती है, लेकिन आप अभी भी देख सकते हैं कि यह उस वर्ष की शुरुआत में, अप्रैल 2010 में अस्तित्व में आई । चेकइन की टिप्पणी, "व्लादिमीर 'फकरोड' सेर्बिनेंको" से थी

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

यह chainloaderकमांड पर बहुत बारीकी से आधारित है , इतना है कि हेडर टिप्पणी में फ़ाइल का नाम अभी भी अपडेट नहीं किया गया है।

अब जबकि हमारे पास एक सटीक चेकइन और एक नाम है, हम मेलिंग अभिलेखागार की जांच कर सकते हैं। आप देख सकते हैं कि डेवलपर्स ने ग्रब-डेवेल मेलिंग सूची पर एक साल पहले इस सुविधा को जोड़ने के बारे में चर्चा की थी :

उस धागे से कुछ प्रासंगिक अंश:

रॉबर्ट मिलन यह पैच NTLDR बूट शब्दार्थ के लिए एक लोडर को लागू करता है (जो कि BootMGR में समान हैं, इसलिए दोनों समर्थित हैं)

रॉबर्ट मिलन यदि हम यह सुविधा चाहते हैं, तो मुझे लगता है कि यह स्टैंडअलोन कमांड के बजाय चेनलोडर में एक विकल्प होना चाहिए। यह वास्तव में चेन लोडर के समान ही है, अंतर केवल इतना है कि ntldr को PBR के बजाय GRUB द्वारा PBR के बाद लोड किया जाता है।

व्लादिमीर सेर्बिनेंको मुझे नहीं लगता कि यह कोई समस्या है क्योंकि ntldr इस PBR का उपयोग केवल विभाजन की पहचान करने के लिए सुपरब्लॉक के रूप में करता है। जैसा कि मैं इस लोडिंग को $ जड़ से गुजरने के विशेष मामले के रूप में मानता हूं, बस इसका रूप थोड़ा अजीब है

Yves Blusseau कमांड के बारे में, मुझे लगता है कि यह उपयोगकर्ता के लिए सरल होगा यदि हमारे पास केवल एक कमांड है: chainloader (जैसे grub4dos में) जो बूटलोडर के प्रकार का पता लगाने की कोशिश करेगा। यह केवल मेरी निजी राय है।

व्लादिमीर सेर्बिनेंको मैं इससे सहमत नहीं हूं। चेन लोडर और ntldr एक ही सिंटैक्स साझा नहीं करते हैं: चेन लोडर एक बूस्टर की अपेक्षा करता है जबकि ntldr एक ntldr ओटी बूटमेग फ़ाइल की अपेक्षा करता है। GRUB2 को GRUB1 के खराब डिजाइन निर्णयों को तोड़ने के लिए किया जाता है, जिनमें से एक "कर्नेल" कमांड है। GRUB4DOS इस विषय पर GRUB1 का अनुसरण करता है।

रॉबर्ट मिलन ठीक है। चलो इसे एक अलग कमांड बनाते हैं। मुझे लगता है कि यह अभी भी chainloader.c के साथ कोड साझा करना चाहिए हालांकि (कुछ ifdefs के साथ)।

आपके सवाल का जवाब दे रहा हूं

इन सब पर विचार करने के बाद, हम इस बारे में क्या जानते हैं कि इसका उपयोग कैसे किया जा सकता है?

  • यह चैनलोडर पर आधारित है।

  • यह एक एकल तर्क लेता है: फ़ाइल को खोलने के लिए।

  • यह विभाजन बूट रिकॉर्ड से बचा जाता है: इसलिए यह वहां भ्रष्टाचार को दरकिनार कर सकता है। इस पोस्ट को देखें कि उन्होंने कैसे परीक्षण किया।

  • यह केवल 160 लाइनों का कोड है , आप देख सकते हैं कि वहां बहुत कुछ नहीं है।

आशा है कि यह उपयोगी था!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.