अधिकांश वितरण श्रृंखला UEFI और ग्रब क्यों करते हैं?


31

अधिकांश वितरण UEFI सिस्टम पर एक अतिरिक्त बूट लोडर स्थापित करते हैं। UEFI अपने आप में एक बूट लोडर है, यह विभिन्न ऑपरेटिंग सिस्टम या व्यक्तिगत कर्नेल का चयन करने के लिए एक मेनू प्रदान करता है। इसके अलावा, यूईएफआई सेटिंग्स को यूजर्स जैसे टूलस्पेस के साथ आसानी से बदला जा सकता है efibootmgr

कर्नेल 3.3 के बाद से EFI_STUB का समर्थन करता है, जिसका अर्थ है कि कर्नेल को सीधे UEFI से लोड किया जा सकता है। क्या कारण है कि वितरण एक अतिरिक्त बूट लोडर का उपयोग करने का निर्णय लेते हैं? लिनक्स / यूईएफआई पर अधिकांश ट्यूटोरियल मुख्य रूप से EFI_STUB के साथ लिनक्स को बूट करने के बजाय अतिरिक्त बूट लोडर (rEFInd, grub2, ELILO, आदि) को सेट करने पर ध्यान केंद्रित करते हैं।

वितरण में केवल एक चीज गायब है समर्थन है। चूंकि अधिकांश वितरण एक दूसरे बूट लोडर श्रृंखला को वितरित करते हैं, कर्नेल को UEFI बूट मेनू में नहीं जोड़ा जाता है, न ही इसे EFI सिस्टम विभाजन में कॉपी किया जाता है।

तीन स्क्रिप्ट्स सभी जादू करने के लिए पर्याप्त हैं। एक जो ईपीआर के लिए इनट्रामर्फ्स को कॉपी करता है। एक दूसरा व्यक्ति कर्नेल को ESP में कॉपी करता है और UEFI बूट मेनू में एक नई प्रविष्टि बनाता है। तीसरी स्क्रिप्ट ईएसपी से पुराने कर्नेल और इनट्राम्राम्स को हटा देती है और यूईएफआई बूट मेनू प्रविष्टि को हटा देती है। यह उपयोगकर्ता इंटरैक्शन के बिना पूरी तरह से स्वचालित कर्नेल / initramfs अपडेट / पर्स को अनुमति देता है। मैं एक वर्ष से अधिक समय से इस दृष्टिकोण का उपयोग कर रहा हूं और इसने त्रुटिपूर्ण रूप से काम किया है।

अधिकांश वितरण EFI_STUB के बजाय ग्रब का उपयोग क्यों करते हैं?

लिंक:

संपादित करें: मैं पूरी तरह से ग्रब समर्थन को हटाने के बारे में बात नहीं कर रहा हूं, लेकिन उन लोगों के लिए एक विकल्प प्रदान करने के लिए जो इसे विभिन्न कारणों से उपयोग करना चाहते हैं। वितरण grub-efiउन लोगों के लिए एक पैकेज प्रदान कर सकते हैं जो UEFI और ग्रब को एक पैकेज देना चाहते हैं और एक पैकेज efistub-bootजिसमें मेरे द्वारा उल्लिखित स्क्रिप्ट हैं।


4
उन्हें क्यों करना चाहिए? उन्होंने पहले से ही ग्रब कॉन्फ़िगरेशन फ़ाइल बनाने / उत्पन्न करने के तरीकों की स्थापना की है। इसके अलावा यह मदद करता है अगर सभी सिस्टम (गैर-यूईएफआई और यूईएफआई) समान व्यवहार करते हैं।
उलरिच डांगेल

अच्छा लग रहा है। लेकिन उस लिंक के अनुसार यदि आप चाहें तो इसे कर सकते हैं, हो सकता है कि यह डिस्ट्रोस के लिए अपने आप ही आपके लिए करने के लिए एक संभावित दलदल हो। Betcha कुछ अंत में आप विकल्प tho दे देंगे।
गोल्डीलॉक्स

1
@Bakuriu सिस्टम को समझने में आसान है, एक सरल बूट अनुक्रम, कम निष्पादित कोड और उदाहरण के लिए थोड़ा तेज़ बूट अप समय।
मार्को

4
यह सवाल ऑफ-होल्ड रखा जाना चाहिए, क्योंकि दिया गया कारण गलत है। प्रश्न का एक सरल असंबद्ध उत्तर है: UEFI बूट मेनू प्रदान नहीं करता है। कुछ कार्यान्वयन करते हैं। कुछ नहीं, क्योंकि विंडोज 8 के लिए अपने लक्ष्य बूट समय तक पहुंचने के लिए, BIOS इनपुट डिवाइस को इनिशियलाइज़ भी नहीं करता है । उपयोगकर्ता अकेले एक कुंजी दबाता है या नहीं यह देखने के लिए अकेले प्रतीक्षा करें। तो आपको लिनक्स पर जाने के लिए विंडोज से गुजरना होगा, या इसके विपरीत। पूर्व कुछ प्रणालियों पर काम करता है, लेकिन मुझे संदेह है कि कल्पना इसकी गारंटी देती है। उत्तरार्द्ध काम नहीं करता है (आप GRUB से UEFI सेटअप दर्ज कर सकते हैं, लेकिन लिनक्स से नहीं)।
sourcejedi

1
@sourcejedi आप दावा करते हैं कि आपके स्रोतों से मेल नहीं खाता। यूईएफआई एक बूट मेनू (यूआई विक्रेताओं पर असंगत) प्रदान करता है। mjg59 का मतलब है कि आप दार्शनिक समझौता (W8 EULA को स्वीकार किए बिना) बूट मेनू में नहीं आ सकते। लेकिन यह समस्या गैर- EFISTUB ग्रब बूट लोडर वाले इंस्टॉलर के लिए समान होगी। तो इसका जवाब नहीं है कि हम EFISTUB पर अधिक ग्रब क्यों पसंद करेंगे।
लिंग्ज़ु जियांग

जवाबों:


10

यह देखते हुए कि यूईएफआई को केवल 2005 में परिभाषित किया गया था, वहाँ विरासत उपकरण का एक गुच्छा है जो कल्पना का समर्थन नहीं करता है। UEFI को एक मानक वितरण में जोड़ने के लिए एक के बजाय दो कोड रास्तों के परीक्षण की आवश्यकता होगी, और न केवल बूट कोड कुख्यात रूप से बारीक है, यह परीक्षण करने के लिए कोड के सबसे अधिक परेशान करने वाले समय लेने वाले बिट्स में से एक है।


5
न केवल यह चिड़चिड़ा समय है परीक्षण करने के लिए, यह सबसे अधिक परेशान करने वाला कोड है जो संभवतः गलत है। विचार करें: आप क्या पसंद करते हैं, किसी प्रकार का मुद्दा, जबकि सिस्टम चालू है और अधिकतर सामान्य रूप से चल रहा है, या सिस्टम को बूट करने में सक्षम नहीं है? बूट लोडर निश्चित रूप से सॉफ़्टवेयर के उन टुकड़ों में से एक है जो मुझे लगता है कि जब तक यह आवश्यक नहीं है, तब तक इसे छूने के बारे में सबसे दृढ़ता से महसूस होता है।
बजे एक CVn

@ माइकलकजर्लिंग की उपरोक्त टिप्पणी एक उत्तर में होनी चाहिए। नए बूट लोडर पर स्विच करना बहुत जोखिम भरा है। डिस्ट्रो-रचनाकार चाहते हैं कि उनके उपयोगकर्ताओं को एक अच्छा अनुभव हो, लेकिन इससे भी अधिक, वे चाहते हैं कि एकल संभावित नए उपयोगकर्ता को एक निर्दोष पहली बार अनुभव हो। मुझे खेद है कि मैंने वितरण को "डिस्ट्रो" कहा, लेकिन यह रचनाकारों के साथ संयोजन में ठीक लगा।
जोहान

@ जोहान msw उत्तर में उस बिंदु को संपादित करने के लिए स्वतंत्र है, मुझे कोई आपत्ति नहीं है। (यह अपने आप में एक जवाब होने के लिए पर्याप्त नहीं है, IMO।) टोबू और गोल्डलाइलॉक्स दोनों इस मुद्दे पर भी स्पर्श करते हैं।
एक CVn

3

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

मुझे यकीन है कि हर किसी के पास उन विशेषताओं और विकल्पों की एक सूची है, जिन्हें वे डिस्ट्रोस को गोद लेते देखना चाहते हैं (मैं आपको कुछ पृष्ठ, लोल दे दूँगा), और इसमें कोई संदेह नहीं है कि उनमें से कई "पूरी तरह से आसान, कोई परेशानी नहीं, ईमानदारी से करेंगे। .. "। हालांकि, उन्हें लागू करने के लिए व्यक्ति घंटों की अनंत राशि नहीं है। जब इस तरह के निर्णयों का सामना करना पड़ता है ("क्या हम इस सुविधा में काम करते हैं, बनाम कुछ अन्य?") प्राथमिक प्रश्न होना चाहिए:

  • क्या ये ज़रूरी हैं? (यहाँ उत्तर नहीं है)।
  • कितने लोगों को फायदा होगा, और कितना? (IMO: कुछ, और बहुत कुछ नहीं)
  • क्या कोई उचित विकल्प है जिसके द्वारा उपयोगकर्ता बिना कुछ किए हमारे स्वयं को समायोजित कर सकता है? (स्पष्ट रूप से वहाँ है।)

लोग सभी पर डिस्ट्रोस का उपयोग करते हैं इसका कारण यह है कि हर कोई संसाधन की कमी के अधीन है (अन्यथा, बस एक टीम को किराए पर लें, उन्हें कुछ स्थान और उपकरण खरीद लें, और आपके लिए वे सब कुछ करें जो आप चाहते हैं)। तो वास्तविकता यह है कि डिस्ट्रोस अपने उपयोगकर्ताओं की सामान्यीकृत आवश्यकताओं को दर्शाते हैं।

उस ने कहा, मुझे लगता है कि समय के साथ इसे एक विकल्प के रूप में अपनाया जाएगा, और मैंने इस सवाल को उठाया।


2

ग्रब के अलावा UEFI बूटलोडर्स को लक्षित करना गुणवत्ता नियंत्रण और समर्थन को जटिल करेगा। डिस्ट्रोस यूईएफआई युक्ति के बजाय ग्रब को लक्षित कर रहे हैं क्योंकि ग्रब मुफ्त सॉफ्टवेयर, हैक करने योग्य, अधिक लचीला और उच्च गुणवत्ता वाला है। आप अभी भी एक ट्यूटोरियल का पालन करके और यूईएफआई विभाजन को बढ़ते हुए एक शुद्ध-यूईएफआई बूट प्राप्त कर सकते हैं /boot, क्योंकि यदि आप ऐसा करते हैं, तो रखरखाव आप पर है।


आपकी गुणवत्ता पर जोर बहस का विषय है, लेकिन मुझे लगता है कि इसका कारण यह है कि वैसे भी इससे कोई लेना-देना नहीं है। उनके पास पहले से ही खराब तरीके से लिखी गई शेल स्क्रिप्ट की हज़ारों लाइनें हैं, ताकि वे 20 अच्छे लोगों को क्यों चाहेंगे?
15

1

असली समस्या यह है कि लोग यह नहीं समझते कि यह कैसे काम करता है। उदाहरण के लिए, आपके प्रश्न में आप यह उल्लेख करते हैं कि तीन लिपियाँ वे सभी आवश्यक हैं, और यहाँ अधिकांश उत्तर सभी / किसी भी अतिरिक्त रखरखाव के बारे में हैं जो इसे काम करने के लिए आवश्यक होंगे - लेकिन सच्चाई यह है कि आपको उन लिपियों की आवश्यकता नहीं है या कोई अतिरिक्त काम।

आपको केवल ESP को माउंट करने के लिए - या जहाँ भी आप कर्नेल को रखना चाहते हैं, बाँधना है /boot , जिसमें आप एक ही लाइन के साथ कर सकते हैं /etc/fstab। ऐसा करें और वर्तमान कर्नेल अद्यतन स्क्रिप्ट के सभी बस काम करना जारी रखेंगे।

मेरा `/ etc / fstab 'जैसा दिखता है:

LABEL=ESP /esp vfat defaults 0 2
#
#^ i like a separate mount point - not necessary though
#
/esp/EFI/arch_root /boot none bind,defaults 0 2
#
#^ i keep separate installations in separate directories
#

निर्माता-विशिष्ट सेटिंग्स के बारे में, हालांकि, यहां एक अच्छा बिंदु है। UEFI स्पष्ट रूप से करता है बूट मेनू के लिए इंटरफ़ेस निर्दिष्ट नहीं । यह कब्रों के लिए है और मशीनों के बीच संगत नहीं होगा। यह कष्टप्रद है, लेकिन सच है।

और इसलिए, जबकि एक लोडर जैसे grubवास्तव में केवल अधिक काम के लिए बनाता है , एक मेनू अनुप्रयोग - जैसे कि rEFInd - मतभेदों को बराबर करता है और सब कुछ सरल करता है।


1
मुझे समझ नहीं आता कि यह कैसे काम कर सकता है। ध्यान दें कि कर्नेल और initramfs के फ़ाइल नामों में संस्करण शामिल है। यदि कोई स्क्रिप्ट नहीं है तो आप एक नया स्थापित करने के बाद अपने पुराने कर्नेल को बूट करेंगे। या अलग तरह से व्यक्त: आप नए को इंगित करने के लिए डिफ़ॉल्ट कर्नेल को कैसे बदलते हैं? (मेरी स्क्रिप्ट efobootmgrबूट ऑर्डर को अपडेट करने और डिफ़ॉल्ट कर्नेल को बदलने के लिए उपयोग करती है)।
मार्को

@ मार्को - अच्छी तरह से डिफ़ॉल्ट बूट पथ है \EFI\BOOT\BOOTX64.efiऔर इसलिए इसका नाम दिया जा सकता है। UEFI कैंट (युक्ति द्वारा) कर्नेल को तर्क को पहले स्थान पर संभालता है - और इसलिए उस मामले में initramfs / कर्नेल छवि को एक साथ बांधने की आवश्यकता है। लेकिन मुझे पता है कि आप के नामकरण के बारे में क्या मतलब है - मुझे लगता है कि केवल डेबियन ही ऐसा करते हैं, और मैं इसे अनुत्पादक मानता हूं। आपके कर्नेल का पारंपरिक नाम है vmlinuz। वैसे भी, ऐसा करने का सही तरीका एक बूट प्रबंधक के साथ है जो लोडर नहीं है । एक EFI ऐप का उपयोग करें जो आपका कर्नेल ढूंढता है और उसका नाम EFI को बूट करने के लिए पास करता है - जैसे rEFInd करता है।
mikeserv 10

मैं डेबियन का उपयोग करता हूं और कर्नेल का नाम उदाहरण के लिए है vmlinuz-4.2.0-1-amd64जिसे मैं छोड़ता हूं और फिर efibootmgrबूट सूची में इसे जोड़ने और इसे डिफ़ॉल्ट बनाने के लिए उपयोग करता हूं । मैं देखता हूं कि कर्नेल का नामकरण BOOTX64.efiएक समाधान हो सकता है। लेकिन किसी भी तरह से मुझे ऐसा करने के लिए एक स्क्रिप्ट की आवश्यकता होगी और इसके अलावा यदि वे आसानी से एक ही नाम रखे जाने पर कई गुठली रखने की अनुमति नहीं देते हैं।
मार्को

@ मार्को - आपको एक पूरी अलग स्क्रिप्ट की आवश्यकता नहीं है - आपके पैकेज मैनेजर - उपयुक्त, शायद - वैसे भी कुछ स्क्रिप्ट चल रही होगी जब इनट्रामाफ़्स बनाने के लिए एक कर्नेल स्थापित किया जाता है। अपनी कर्नेल के नाम को पहले से ही काम करने के लिए शायद यह एक सौ काम कर रहा है, लेकिन आप जो भी चाहते हैं उसका नाम बदलने के लिए सिर्फ एक अतिरिक्त लाइन ही काम करेगी। और आप आसानी से उतने ही गुठली रख सकते हैं, जितने की आप एक बूट ट्री रखते हैं । rEFInd इसे अपने खोज पथों में डिफ़ॉल्ट बूट छवि को हाल ही में संशोधित कर्नेल छवि बनाकर संभालता है।
15

पैकेज मैनेजर द्वारा स्थापित स्टॉक स्क्रिप्ट को संशोधित करना एक बुरा विचार है। उन्हें अपडेट किया जा सकता है जो बदले में आपके बदलावों को मिटा देता है और - इस विशेष मामले में - एक अनबूटेबल सिस्टम के परिणामस्वरूप भी हो सकता है। उपयोगकर्ता लिपियों के लिए निर्देशिकाएँ हैं जिन्हें कर्नेल / इनट्रामाफ़्स इंस्टॉलेशन के बाद लगाया जाता है और इसका उपयोग इसके लिए बिल्कुल एक उद्देश्य के लिए किया जाता है। BTW: आप अपनी टिप्पणियों में स्क्रिप्ट संपादित करने का सुझाव दे रहे हैं। हालाँकि, आपके उत्तर में आपको "आपको उन लिपियों या किसी अतिरिक्त कार्य की आवश्यकता नहीं है", जो कि सही नहीं है (कम से कम डेबियन के लिए)।
मार्को

0

वे अस्थायी कार्यान्वयन समाधान के रूप में UEFI और GRUB को श्रृंखलाबद्ध करते हैं।

चूंकि यूईएफआई समर्थन और साथ के मुद्दे (जैसे सिक्योर बूट) हल हो जाते हैं, अधिक से अधिक वितरण सीधे इसका उपयोग करेंगे। इस समय के दौरान यह अभी भी बहुत नया है: Google ट्रेंड्स सीमित गोद लेने के बजाय दिखाते हैं: http://www.google.com/trends/explore?q=cannot+boot+uefi#q=uefi%2C%20%20efi%2C % 20% 20bios और cmpt = q

दूसरों ने शुद्ध यूईएफआई समाधान के लिए जाने और / या गैर-यूईएफआई और शुद्ध यूईएफआई दोनों प्रणालियों का एक साथ समर्थन करने के संभावित नुकसान का उल्लेख किया है। एक UEFI कर्नेल एक गैर-UEFY सिस्टम पर काम कर सकता है, लेकिन कर्नेल अपडेट टूल को GRUB मेनू या UEFI बूट मेनू या दोनों, इत्यादि को अपडेट करने की आवश्यकता होती है।

यह वास्तव में उल्लिखित गुणवत्ता नियंत्रण के बारे में है: महत्वपूर्ण रूप से इस कोड के साथ समस्याओं का एक उच्च प्रभाव पड़ता है: जब कंप्यूटर नए उपयोगकर्ताओं को बूट करने में विफल रहता है, यानी संभावित लिनक्स धर्मान्तरित होता है, तो यह कचरा के रूप में खोदेगा और वापस कुछ "सुरक्षित" पर जाएगा।

लेकिन जैसा कि मैंने कहा कि जैसे-जैसे तकनीक अपनाएगी, यह मानक बन जाएगा।


मुझे उम्मीद है कि नहीं - लेकिन यह ज्यादातर इसलिए है क्योंकि मुझे यूईएफआई के लॉकडाउन मोड और माइक्रोसॉफ्ट के "वादे" के बारे में गंभीर चिंताएं हैं, यह सुनिश्चित करने के लिए कि लिनक्स के उपयोग के लिए हमेशा एक हस्ताक्षरित छवि होगी ...
Shadur

0

फर्मवेयर बग के आसपास काम करने के लिए अतिरिक्त कोड आवश्यक है

ग्रब का पीछा नहीं करते समय, वितरण फर्मवेयर पर सही ढंग से बूट करने के लिए अधिक भरोसा कर रहा है। जैसा कि किसी भी सॉफ़्टवेयर में समस्याएँ होंगी, फ़र्मवेयर का भी खतरा है। अब लिनक्स डिस्ट्रीब्यूशन को इन फर्मवेयर बग्स को वर्कअराउंड करने के लिए भी लिखना होगा।

उदाहरण के रूप में एक वास्तविक जीवन का मामला। Asrock H81 प्रो BTC P1.80 मदरबोर्ड बूट मेनू प्रविष्टियों के निर्माण की अनुमति देता है efibootmgr। कई बूट मेनू प्रविष्टियां बनाई जा सकती हैं, और बूट ऑर्डर को बदलकर efibootmgr --bootorder XXXX,YYYY,ZZZZया अस्थायी अगले बूट विकल्प का उपयोग करके सेट किया जा सकता है efibootmgr --bootnext XXXX। ये दोनों कमांड रिटर्न आउटपुट जो आपको यह विचार देते हैं कि बूट ऑर्डर बदल गया है या अगला बूट चलेगा, उदाहरण के लिए BootNext: XXXX। हालाँकि, रिबूट फर्मवेयर पर रिबूट किए गए नए बूट विकल्प की उपेक्षा करता है और पिछले BootCurrent:मूल्य में रिबूट करता है । एक स्थायी बूट ऑर्डर परिवर्तन केवल फर्मवेयर सेटअप उपयोगिता से किया जा सकता है। और एक गैर स्थायी परिवर्तन उपलब्ध नहीं है।


-2

मुझे लगता है कि यदि बूटिंग केवल EFI द्वारा दी जाती है और हम बूटलोडर को हटा देते हैं तो यह एचडब्ल्यू विक्रेता और ऑपरेटिंग सिस्टम निर्माताओं दोनों के लिए मुश्किल होगा। HW विक्रेता के पास ओएस बनाने वाली कंपनियों के लिए परीक्षण करने के लिए अधिक गुठली होगी, यह ऐसा होगा जैसे कि उनके कर्नेल को अलग-अलग एफडब्ल्यू द्वारा लोड किया जाता है।

इसके अलावा EFI से कर्नेल के सीधे बूटिंग के साथ, जहां स्टैक सुरक्षित बूट में फिट होगा? वर्तमान परिदृश्य में, एक बार नियंत्रण OS बूटलोडर पर जाता है, फिर बूटलोडर यह जांचता है कि कर्नेल सही तरीके से हस्ताक्षरित है या नहीं। यदि हम ईएफआई से सीधे कर्नेल लोड करते हैं तो मुझे लगता है कि यह केवल गड़बड़ पैदा करेगा क्योंकि पूरे स्टैक में गड़बड़ी हो जाएगी। बस एक राय कि मुझे क्या समझ है।


यह मूर्खतापूर्ण है। बूटलोडर कुंजी की जांच करने का कारण यूईएफआई नहीं है। चेन-लोडिंग एक हस्ताक्षरित कर्नेल को सुरक्षित करने के लिए बेमानी है जो आप फर्मवेयर में कुंजी की जांच करते हैं - जिस तरह से इसे काम करना चाहिए
15
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.