मैं GRUB की स्थापना कैसे करूं?


19

एक हार्ड ड्राइव जो मैं केवल डेटा स्टोरेज के लिए उपयोग करता हूं उसमें अभी भी पिछले Ubuntu इंस्टालेशन से GRUB है।

बाकी ड्राइव के डेटा को नुकसान पहुंचाए बिना मैं GRUB से इसे कैसे हटा सकता हूं?

पृष्ठभूमि

मैं कभी-कभी विभिन्न बूट ऑर्डर कॉन्फ़िगरेशन वाले कंप्यूटरों के बीच डेटा ड्राइव को स्थानांतरित करता हूं, इसलिए मैं चाहूंगा कि इसे प्रत्येक कंप्यूटर की BIOS सेटिंग्स में समायोजित करने से बचने के लिए गैर-बूट करने योग्य हो।

जब मैं कंप्यूटर पर केवल डेटा ड्राइव संलग्न होने पर बिजली देता हूं, तो निम्न प्रकट होता है:

error: no such device: fdf38dd4-9e9d-479d-b830-2a6989958503.
grub rescue> 

मैं पुराने बैकअप से पुष्टि कर सकता हूं /etc/fstabकि यह एक रूट विभाजन का यूयूआईडी था जिसे मैंने हाल ही में सुधार किया था और जो अब मौजूद नहीं है । यहां डेटा ड्राइव की विभाजन तालिका और कच्चे मास्टर बूट रिकॉर्ड है

कृपया ध्यान दें कि मैं उन प्राथमिकताओं में दिलचस्पी नहीं रखता जो मेरे प्राथमिक प्रश्न का उत्तर नहीं देते हैं। मैं इस मुद्दे के आसपास काम करने के कई तरीकों के बारे में सोच सकता हूं, लेकिन यह मुझे इस सिद्धांत पर परेशान करता है कि मुझे नहीं पता कि इसे सीधे कैसे हल किया जाए। प्रत्येक इंस्टॉलेशन प्रक्रिया में एक समकक्ष स्थापना रद्द करने की प्रक्रिया होनी चाहिए।


बस जिज्ञासु - यदि आप / बूट / ग्रब में फ़ाइलें हटाते हैं (जो मैंने माना था कि आपने किया था), क्या मब कोड वास्तव में मायने रखता है? मुझे नहीं लगता कि इसे किसी और चीज की आदत होगी, यह होगा? मैं गलत हो सकता है, लेकिन मुझे नहीं लगता कि इसका उपयोग किया जाएगा, और अगर मुझे डेटा के बारे में परवाह है तो मुझे इतने कम स्तर पर कुछ के साथ पेंच करने से नफरत होगी।
मार्टी फ्राइड

क्या आप कच्चे एमबीआर डेटा को डंप कर सकते हैं और इसे यहां पोस्ट कर सकते हैं? आपको कुछ ऐसा करने में सक्षम होना चाहिए sfdisk -d /dev/sdb > sdb.out
ब्रेकथ्रू

जवाबों:


25

आप केवल 0x00 डिस्क के पहले कुछ बाइट्स बनाकर डिवाइस को बूट करने योग्य नहीं बना सकते हैं।

आमतौर पर (और यह दोनों ग्रब, grub2 और ntldr iirc के लिए सही है) आपके ड्राइव का पहला पहला बाइट एक x86 jmp इंस्ट्रक्शन होने वाला है। यह डिस्कलैब से पहले भी होता है, क्योंकि डिवाइस को बूटस्ट्रैप करने के लिए निष्पादन करते समय, यह सीपीयू को डिवाइस की जानकारी को कोड के रूप में चूसने के लिए सेट करता है। यदि इसका अमान्य कोड है, तो यह एक बाधा को ट्रिगर करता है और BIOS अपवाद को संभालता है और अगले बूट करने योग्य डिवाइस पर जाता है।

उदाहरण के लिए, मेरी डिस्क की शुरुआत के साथ शुरू होता है:

00000000  eb 63 90 d0 bc 00 7c fb  50 07 50 1f fc be 1b 7c  |.c....|.P.P....||

पहला भाग eb 63जो वर्तमान आईपी (तो 0x65) से 0x63 को ऑफसेट करने के लिए जंप है।

00000060  00 00 00 00 ff fa 90 90  f6 c2 80 74 05 f6 c2 70  |...........t...p|
00000070  74 02 b2 80 ea 79 7c 00  00 31 c0 8e d8 8e d0 bc  |t....y|..1......|

यहां से उत्पीड़न जारी है।

सेक्टर का अंत इस तरह दिखता है:

000001b0  cd 10 ac 3c 00 75 f4 c3  ed db 96 d6 00 00 80 01  |...<.u..........|
000001c0  01 00 83 fe ff ff 3f 00  00 00 c1 07 a6 0e 00 fe  |......?.........|
000001d0  ff ff 83 fe ff ff 00 60  00 11 00 00 38 29 00 fe  |.......`....8)..|
000001e0  ff ff 82 fe ff ff 00 08  a6 0e 00 58 5a 02 00 00  |...........XZ...|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|

यदि आपकी डिस्क को MBR पार्टीशन टेबल के रूप में स्वरूपित किया जाता है, तो उसे केवल दो चीजों की आवश्यकता होती है, वह विभाजन तालिका जो ऑफसेट पर है 0x1beऔर MBR हस्ताक्षर है, 55aaजो ऑफसेट के सेक्टर के बहुत अंत में होता है 0x1fe0x1beदशमलव ४४६ है।

निम्नलिखित वसीयत (निश्चित रूप से) डिवाइस को अनबूटेबल बनाती है। लेकिन यह वही है जो आप चाहते हैं। यदि आप अपने डिवाइस को बूट करने में असमर्थ बनाना चाहते हैं, तो ऐसा न करें, mmm-kay? मैं मान रहा हूं कि आपका डिवाइस है /dev/sdz, बस इसलिए कि बहुत से लोगों के पास नहीं है /dev/sdz, और यह कुछ बेवकूफ नौसिखिया के जोखिम को नेत्रहीन रूप से चिपकाने वाले आदेशों को कॉपी करता है।

सबसे पहले, एमबीआर को बैकअप के लिए एक फ़ाइल में कॉपी करें।

sudo dd if=/dev/sdz of=/some/where/safe/preferably/not/on/dev/sdz/backup.mbr bs=512 count=1

इसके बाद, उस फ़ाइल की एक प्रतिलिपि बनाएँ:

cp backup.mbr backup.mbr.test

इसके बाद, हमें एक लूपबैक डिवाइस बनाना होगा (ताकि सामग्री ट्रंक न हो जाए।) और परीक्षण के रूप में हमारे नकली सेक्टर 0 पर परिवर्तन लागू करें:

sudo losetup /dev/loop7 backup.mbr.test
sudo dd if=/dev/zero of=/dev/loop7 bs=446 count=1
sudo losetup -d /dev/loop7

hexdump फ़ाइल और सुनिश्चित करें कि संपूर्ण विभाजन तालिका बरकरार है:

sudo hexdump -C backup.mbr.test

आपको कुछ इस तरह देखना चाहिए:

00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000001b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 80 01  |................|
000001c0  01 00 83 fe ff ff 3f 00  00 00 c1 07 a6 0e 00 fe  |......?.........|
000001d0  ff ff 83 fe ff ff 00 60  00 11 00 00 38 29 00 fe  |.......`....8)..|
000001e0  ff ff 82 fe ff ff 00 08  a6 0e 00 58 5a 02 00 00  |...........XZ...|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200

अब, 0x1beजहां आप 80हेक्सडंप्ड आउटपुट पर देखते हैं , यह भी हो सकता है 00और अभी भी मान्य हो सकता है। (यह विभाजन तालिका में "बूट करने योग्य" ध्वज है, आप इसे अकेले छोड़ सकते हैं, क्योंकि यह पूरी तरह से सबसे आधुनिक BIOS द्वारा अनदेखा किया गया है ...) बाइट 0x1bfहालांकि लगभग कभी नहीं होगा 0x00(यह सबसे अधिक है 0x01लेकिन यह अन्य मूल्यों को ले सकता है) यह backup.mbrसुनिश्चित करने के लिए आपके खिलाफ तुलना कर सकता है कि अतीत कुछ भी नहीं 0x1beबदला है।

एक बार जब आप संतुष्ट हो जाते हैं कि आपने परिवर्तन को सही तरीके से लागू किया है, तो आप डिस्क के पहले भाग पर फ़ाइल को सीधे कॉपी कर सकते हैं। कारण है कि आप फ़ाइल को /dev/zeroफिर से करने के बजाय टाइपोस के खिलाफ सुरक्षा के लिए करना चाहते हैं । यदि आप गलती से चूक जाते हैं, count=1तो आपके पास बुरा समय आने वाला है, दूसरी तरफ एक फ़ाइल की नकल करने से ईओएफ कभी भी अतीत में नहीं चलेगा। इसलिए यह अधिक सुरक्षित है।

sudo dd if=backup.mbr.test of=/dev/sdz

hexdumpयह सुनिश्चित करने के लिए आपकी डिस्क आगे है कि परिवर्तन अपेक्षित रूप से लिया गया है।

hexdump -C /dev/sdz | head

की तुलना करें 0x200खिलाफ backup.mbr.testयकीन है कि यह तुम क्या चाहते हो बनाने के लिए।

अंत में, यदि कुछ भी कारण से आप कुछ भी कर सकते हैं, तो आप एमबीआर के बैकअप को ड्राइव पर वापस कॉपी कर सकते हैं:

sudo dd if=backup.mbr of=/dev/sdz

उम्मीद है की यह मदद करेगा।


1
मैं आपको एक गंभीर नॉब त्रुटि की आशंका और रोकथाम के लिए एक प्लस दे रहा हूं।
Psitae

एक गुच्छा के लिए धन्यवाद, मैंने यथासंभव कई noob त्रुटियों को रोकने के लिए अपना सर्वश्रेष्ठ प्रदर्शन किया: बैकअप बनाना, ब्लॉक डिवाइस में सीधे नहीं लिखना countभूल गया है, सीधे एक सामान्य ब्लॉक डिवाइस नाम का उपयोग नहीं करना, यह निर्दिष्ट करना कि बैकअप फ़ाइल बनाई जानी चाहिए। डिवाइस को परिवर्तित किया जा रहा है, एक सफल क्लियरिंग कैसा दिखता है, यदि आप स्क्रू करते हैं तो पूर्ववत् कैसे करें, इसका एक उदाहरण। मुझे पता है कि यदि आप यह जानने के लिए पर्याप्त हैं कि मुझे क्या मिल रहा है, तो आप बच्चे के कदमों के माध्यम से काट सकते हैं और यह सब एक ही आदेश में कर सकते हैं। लेकिन अगर आप अभी भी सीख रहे हैं तो मैं आपको वह आदेश नहीं देने जा रहा हूं। ;)
सर्वव्यापी ity

2

चेतावनी: अत्यधिक खतरनाक

आप स्वयं लिनक्स से dd कमांड का उपयोग कर सकते हैं (यह विभाजन तालिका हटाता है):

 # dd if=/dev/null of=/dev/sdX bs=512 count=1

विभाजन तालिका के बिना, एमबीआर को हटा दें (नीचे टिप्पणी देखें):

# dd if=/dev/null of=/dev/sdX bs=446 count=1

बदलें /dev/hdXजैसे अपने वास्तविक डिवाइस नाम के साथ /dev/hdafdisk -lडिवाइस का नाम जानने के लिए कमांड का उपयोग करें :

# fdisk -l

स्रोत

  1. http://www.cyberciti.biz/faq/linux-how-to-uninstall-grub/

उन बाइट काउंट्स को मनमाने ढंग से मनमाना लगता है। क्या आप जानते हैं कि क्या वे GRUB2 के लिए समान हैं?
æंड्रिक्स

1
बाइट की गिनती इसलिए है क्योंकि विभाजन तालिका 446 और 512 के बीच है। बेशक, यह सवाल है कि आप ग्रब एमबीआर को क्यों निकालना चाहते हैं ... यह केवल अप्रयुक्त बैठे हुए कुछ भी चोट नहीं पहुंचा रहा है। यदि आप इसके बजाय एक और बूट लोडर चाहते हैं, तो इसे स्थापित करें और यह ग्रब को बदल देगा।
psusi

3
वाह, इस प्रकार के उत्तर में "चेतावनी: अतिरिक्त भाषा" होनी चाहिए, जो बड़े लाल अक्षरों में लिखा गया है। मुझे यकीन है कि ओपी ऐसा करने में सक्षम है, लेकिन मैं कुछ नौसिखिया उपयोगकर्ता को टर्मिनल में पहली कमांड को कॉपी करते हुए देखने से नफरत करूंगा, यहां तक ​​कि "विभाजन तालिका" क्या है, यह जानने के बिना
सर्गेई

1
है यह कर । पहला कमांड विभाजन तालिका को मिटा देगा (जैसा कि ओपी ने उल्लेख किया है), लेकिन दूसरी कमान अपरिभाषित व्यवहार का कारण बनेगी यदि एमबीआर ठीक से कॉन्फ़िगर नहीं किया गया है।
ब्रेकथ्रू

1
उम्म .. मुझे नहीं पता कि आप लोग बाहर क्यों जा रहे हैं, जो आदेश टैचीयों ने चिपकाए हैं वे कुछ भी नहीं करते हैं। आप के साथ परीक्षण कर सकते हैं touch testfile, dd if=/dev/urandom of=testfile bs=512 count=1, sudo losetup /dev/loop7 testfile, sudo dd if=/dev/null of=/dev/loop7 bs=446 count=1, sudo hexdump -Cv /dev/loop7। जैसा कि आप देख सकते हैं /dev/nullकि 0 स्रोत नहीं है, यह एक ईओएफ स्रोत है। आप का उपयोग करने की आवश्यकता ddसे कुछ भी कॉपी नहीं करेंगे और नहीं करेंगे । दूसरा @Breakthrough, सेक्टर 0 की पहली बाइट होने पर कोई अपरिभाषित व्यवहार संभव नहीं है । मुझे नहीं पता कि आप ऐसा क्यों सोचते हैं। /dev/null/dev/zero0x00
ओमनीपोएंटेंटिटी

1

के साथ मेरा अनुभव

sudo install-mbr -i n -p D -t 0 /dev/sda

यह है कि, यह सफलतापूर्वक /dev/sda(जहां मेरा विंडोज 7 स्थापित है) से ग्रब 2 को सफलतापूर्वक स्थापित किया गया है, इसलिए सवाल का पहला भाग "मैं / देव / एसडीए से ग्रब कैसे निकालूं?" उत्तर दिया गया है।

हालांकि, प्रश्न का दूसरा भाग, जो "मैं / देव / एसडीए के एमबीआर को कैसे पुनर्स्थापित करूं?" install-mbrMBR को पुनर्स्थापित करने में कमांड विफल होने के बाद से उत्तर नहीं दिया गया है । नतीजतन, विंडोज किसी भी अधिक बूट नहीं करता है और विंडोज बूट प्रबंधक एक क्षतिग्रस्त एमबीआर के बारे में एक त्रुटि की रिपोर्ट करता है और उपयोगकर्ता को विंडोज मरम्मत सीडी से मरम्मत करने के लिए कहता है।


1

इस विषय पर विकिपीडिया लेख पढ़ने के बाद मैं कुछ अतिरिक्त समाधानों का प्रस्ताव करना चाहता हूँ:

  1. बूट ऑर्डर को BIOS में बदलें :)

  2. सबसे अच्छा और सबसे सुरक्षित एक: fdiskउस ड्राइव पर किसी भी विभाजन से "बूट करने योग्य" ध्वज को हटाने के लिए उपयोग करें। अधिकांश MBR एक "बूट करने योग्य" पार्टीशन से चेन-लोड करने के लिए देखते हैं, इसलिए मैं GRUB से अपेक्षा करूंगा कि यदि ऐसा कोई विभाजन नहीं है। हालांकि परीक्षण नहीं किया गया।

    यदि उपरोक्त मदद नहीं करता है, तो मानक एमबीआर कोड का एक मुफ्त क्लोन स्थापित करने का प्रयास करें:

  3. mbrपैकेज स्थापित करें और install-mbrइस तरह कमांड का उपयोग करें:

    sudo apt-get install mbr
    sudo install-mbr -i n -p D -t 0 /dev/sda
    

क्रेडिट: कैसे करें: उबंटू लाइव सीडी का उपयोग करके विंडोज एमबीआर पुनर्प्राप्त करें

विकिपीडिया लेख को पढ़ने से, मुझे यह आभास होता है कि एमबीआर की पहचान करने वाली एकमात्र चीज उसके हस्ताक्षर हैं जो कि सेक्टर के सबसे अंत में है (बाइट्स 510 और 511)। एमबीआर के पहले 446 बाइट्स में मशीन निर्देश शामिल थे। BIOS को पहले 446 बाइट्स की वास्तविक सामग्री की परवाह किए बिना बूटलोडर पर नियंत्रण स्थानांतरित करना है, बशर्ते कि एमबीआर वर्तमान में है:

आईबीएम पीसी-संगत कंप्यूटरों पर, ROM BIOS में बूटस्ट्रैपिंग फर्मवेयर निहित होता है और मास्टर बूट रिकॉर्ड को निष्पादित करता है। [14] ... इस प्रकार, एमबीआर की शुरुआत में वास्तविक मोड मशीन भाषा निर्देश शामिल होने की उम्मीद है। [१४] BIOS संग्रहण डिवाइस से एमबीआर को भौतिक मेमोरी में पढ़ता है, और फिर बूट कोड की शुरुआत के लिए माइक्रोप्रोसेसर को निर्देशित करता है।

एमबीआर के कोड सेक्शन के प्रतिबंधित आकार के कारण, इसमें आमतौर पर केवल एक छोटा प्रोग्राम होता है जो मेमोरी में स्टोरेज डिवाइस से अतिरिक्त कोड (जैसे बूट लोडर) को कॉपी करता है। नियंत्रण फिर इस कोड को दिया जाता है, जो वास्तविक ऑपरेटिंग सिस्टम को लोड करने के लिए जिम्मेदार है।

...

BIOS में बूटस्ट्रैप अनुक्रम पहले मान्य MBR को लोड करेगा जो कि पता 0x7C00 पर कंप्यूटर की भौतिक मेमोरी में मिलता है। BIOS कोड में निष्पादित अंतिम निर्देश एमबीआर कॉपी की शुरुआत के लिए प्रत्यक्ष निष्पादन के लिए, उस पते पर एक "कूद" होगा। अधिकांश BIOS के लिए प्राथमिक सत्यापन अंत में 0xAA55 हस्ताक्षर है, हालांकि एक BIOS कार्यान्वयनकर्ता अन्य जांचों को शामिल करना चुन सकता है, इस तरह का सत्यापन कि एमबीआर में डिस्क की रिपोर्ट की गई क्षमता से परे क्षेत्रों के संदर्भ में प्रविष्टियों के बिना एक वैध विभाजन तालिका है।

इसलिए मेरी समझ यह है कि MBR ​​को हमेशा एक बूटलोडर माना जाता है, और इसके पहले 446 बाइट्स को शून्य करने से डिस्क से बूट करने की कोशिश करने से BIOS बंद नहीं होगा - लेकिन यह अमान्य कोड निष्पादित करने का प्रयास करते समय कंप्यूटर को हैंग करने की संभावना है।

अद्यतन: इसके अलावा, यह आलेख बताता है कि BIOS के लिए "अन-बूट करने योग्य" देखने के लिए डिस्क बनाने के लिए आपको वास्तव में सेक्टर और किसी भी डिस्क संपादक का उपयोग करके सेक्टर के एमबीआर हस्ताक्षर को संपादित करना चाहिए। मुझे यकीन नहीं है कि यह ओएस को प्रभावित करने वाला है क्योंकि डिस्क पर विभाजन तालिका देख रहा है ... लेकिन कम से कम आप हमेशा उन बाइट्स को वापस संशोधित कर सकते हैं ...


0

एक और सरल उपाय।

मेरे मामले में मेरे पास डेबियन लिनक्स था लेकिन मैंडिन्वा का उपयोग करना चाहता था, दूसरों के लिए भी काम करेगा

अपने पीसी को बंद करें, फिर उस डिस्क को हटा दें जो बूट न ​​हो जिसे आप बूट नहीं करना चाहते (जिसमें ग्रब है)

सीधे तौर पर मैनड्राइव आईएसओ या अन्य वेरिएंट से बने बूट करने योग्य यूएसबी में रखा जाता है, जिसमें आप वहां से बूट करने योग्य यूएसबी स्टिक बनाने के उपकरण होते हैं, जो कि आइसो फाइलों में से गूगल का उपयोग करते हैं (या आप हमें सीडी रोम से जला हुआ इंस्टॉलर बना सकते हैं)

अब अधिकांश लिनक्स इंस्टॉलर आपको मूल्यांकन करने के लिए क्या करना है, कोशिश करते हैं और खेलते हैं / उपयोग करते हैं या पोर्टेबल लाइनक्स या इसे स्थापित करने के लिए सेटअप चलाते हैं। इस बिंदु पर हम बस प्रतीक्षा करते हैं (कर्सर नीचे ले जाएं ताकि स्क्रीन प्रतीक्षा करेगी लेकिन माउस से प्रवेश न करें या क्लिक करें)।

बस इस बिंदु पर याद दिलाएं कि आपका USB / या / CDRom शुरू हो गया है और चल रहा है। अब हार्डडिस्क को वापस करने का अपना समय है जिसे हमने अस्थायी रूप से हटा दिया है एक मिनट प्रतीक्षा करें (कुछ बायोस को एक छोटे इंतजार की आवश्यकता होती है एक मिनट और अधिक पर्याप्त है)

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


0

पुराना सवाल, लेकिन जैसा कि कल मेरे साथ हुआ, मैंने इसे इस तरह हल किया: मैंने कंप्यूटर को बंद कर दिया, शारीरिक रूप से कम हो गई हार्ड ड्राइव को डिस्कनेक्ट कर दिया, फिर से कंप्यूटर शुरू किया, फिर

~ $ sudo update-grub

यह किया, मैंने कंप्यूटर को बंद कर दिया, हार्ड ड्राइव और मेरे पुराने विंडोज 7 विभाजन को फिर से जोड़ दिया, जो अब 2 साल पहले से मौजूद नहीं है, आखिरकार नहीं दिखा।

मैं समझता हूं कि यह डाउन टू अर्थ समाधान है, लेकिन यह काम करता है। एक दिन मैं उस हार्ड ड्राइव को पूरी तरह से मिटा दूँगा, और GRUB का कोई भी शेष चिह्न गायब हो जाएगा।

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