Ubuntu सर्वर, gpt विभाजन तालिका, mdadm, ग्रब बूट विफल


9

बुनियादी कार्य प्रणाली विवरण:

मैं एक सर्वर स्थापित करने के लिए Ubuntu 12.04 सर्वर सीडी का इस्तेमाल किया।

मेरे पास 4 डिस्क हैं। सभी डिस्क पर मैं निम्नलिखित के समान किया इस howto :

  • एक 2GB स्वैप विभाजन बनाया
  • एक 256 जीबी / बूट विभाजन बनाया
  • 64 GB RAID10 विभाजन (रूट के लिए) बनाया
  • बाकी हिस्सों को ले कर एक बड़ा RAID10 विभाजन बनाया

मैंने बूट को ext3 के रूप में स्वरूपित किया। मैं रूट और बड़े विभाजन पर RAID10 सेट करता हूं। मैं एक ext4 रूट स्वरूपित किया। मैंने बड़े वाले पर एक तार्किक आयतन बनाया और इसे ext4 स्वरूपित किया।

परिणामी प्रणाली ठीक काम करती है, और बूट ठीक है।

समस्या का विवरण:

फिर मैंने एक विफलता प्रक्रिया का दस्तावेजीकरण करने का फैसला किया। पहले कदम के रूप में, मैंने फैसला किया कि मैं ग्रब को पुनः स्थापित करूंगा।

# grub-install /dev/sda
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
# grub-install /dev/sdb
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..

तो ऐसा लगता है कि यह विफल रहा, लेकिन ऐसा भी लगता है कि इसने हार मान ली और बदलाव नहीं किया। इसलिए मैंने रिबूट किया। बूट फेल हो गया। यह सिर्फ काली स्क्रीन के साथ 4 लाइनों के नीचे एक निमिष कर्सर के साथ लटका हुआ है। यदि मैं "Shift" को दबाए रखता हूं, तो मुझे कर्सर के बाईं ओर "GRUB" शब्द मिलता है, लेकिन कोई इंटरेक्टिव प्रॉम्प्ट नहीं।

इस बिंदु पर, मैंने इस रिपोर्ट को उत्पन्न करने के लिए बूट-रिपेयर-डिस्क का उपयोग किया: http://paste.ubuntu.com/966531/

उपरोक्त रिपोर्ट में ध्यान दें, यह कहता है कि बूटलोडर core.img के लिए सही क्षेत्र को इंगित नहीं करता है। (sda वर्चुअल सीडी है; sdb बूट डिस्क है; sdc sdb का दर्पण है, लेकिन बूट मिरर नहीं होता है, बस एक अलग असंबंधित विभाजन होता है और ext3 को स्वरूपित किया जाता है; sdd और sde बूट के लिए स्थान बनाता है लेकिन यह स्वरूपित नहीं होता है)

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

# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

इस बिंदु पर, मैंने इस रिपोर्ट को बनाने के लिए बूट-रिपेयर-डिस्क का उपयोग किया: http://paste.ubuntu.com/966561/

ध्यान दें कि उपरोक्त रिपोर्ट में core.img के बारे में समस्या दूर हो गई है। यह सही क्षेत्र की ओर इशारा करता है।

अब अगर मैं बूट करने की कोशिश करता हूं, तो मुझे ग्रब प्रॉम्प्ट मिलता है। यदि मैं "सेट" चलाता हूं, तो मैं देखता हूं कि रूट पाया गया और सेट किया गया। अगर मैं "ls /" चलाता हूं, तो मैं vmlinuz कर्नेल फ़ाइल सहित छापे मात्रा से अपनी रूट निर्देशिका देखता हूं। यदि मैं "ls / vmlinuz" टाइप करता हूं तो यह "त्रुटि: फ़ाइल नहीं मिली।" यदि मैं कर्नेल को लोड करने का प्रयास करने के लिए "linux" कमांड का उपयोग करता हूं तो यह एक ही त्रुटि कहती है। यदि मैं "ls -l /" का उपयोग करता हूं तो vmlinuz फ़ाइल सूचीबद्ध नहीं है।

यदि आप अनुसरण करना चाहते हैं, तो ओवरबॉय का विवरण दें:

मैंने देखा कि कोई /boot/grub/grub.cfg भी नहीं है, इसलिए मैं भाग गया

# grub-mkconfig -o /boot/grub/grub.cfg

लेकिन समस्या बनी हुई है।

यदि मैं "गपशप" टूल का उपयोग करता हूं, तो इस व्यवहार में कोई बदलाव नहीं है।

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

मैंने भी इस पृष्ठ को पढ़ा है , लेकिन उबंटू "ग्रब" कमांड के साथ नहीं आता है, इसलिए मैं इसका ठीक से पालन नहीं कर सकता। मैं बस उस कमांड को स्थापित कर सकता था, लेकिन मुझे यह पता लगाने के लिए अधिक उत्सुक है कि कैसे उबंटू इंस्टॉलर एक अलग सेटअप होने के बजाय इसे स्थापित करने में कामयाब रहा। क्या यह ब्लॉकलिस्ट का उपयोग करता था?

यहाँ बूट-रिपेयर-डिस्क पर बूट किया गया है, जबकि यहाँ जुदाई का आउटपुट है, (यहाँ sdb पहली हार्ड डिस्क है, जब डिस्क से बूट किया जाता है, और "बूट" 2 पेस्ट लिंक में "bios_grub" में बदल जाता है:

Model: ATA Hitachi HUA72303 (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name   Flags
1      17.4kB  2000MB  2000MB  linux-swap(v1)  swap1
2      2000MB  2256MB  256MB   ext3            boot1  boot (this says bios_grub in 2nd link)
3      2256MB  66.3GB  64.0GB                  root1  raid
4      66.3GB  3001GB  2934GB                  data1  raid

यहाँ तुलना के लिए एक असंबंधित सुपर पुरानी आभासी मशीन है ( बूट-मरम्मत-डिस्क से अपरिचित किसी के लिए ): http://paste.ubuntu.com/966799/

यहाँ समस्या प्रणाली से नवीनतम पेस्ट है, ऊपर grub-mkconfig चलाने के बाद, और "bios_grub" को वापस "बूट" पर सेट करना। http://paste.ubuntu.com/966808/

दोनों की तुलना, यह दिलचस्प है:

sdb2: __________________________________________________________________________

File system:       
Boot sector type:  Grub2's core.img
Boot sector info: 
Mounting failed:   mount: unknown filesystem type ''

md/bcserver8:0: ________________________________________________________________

File system:       ext4
Boot sector type:  -
Boot sector info: 
Operating System:  Ubuntu 12.04 LTS
Boot files:        /boot/grub/grub.cfg /etc/fstab /boot/grub/core.img

ऐसा लगता है कि छापे में बूट फाइलें हैं, और sdb2 प्रारूपित नहीं है। (इसके बावजूद, सिस्टम ग्रब-इंस्टॉल चलाने से पहले बूट हुआ)। बचाव सीडी से, "माउंट-एक्स एक्सटी 3 / देव / एसडीबी 2 / बूट" विफल हो जाता है। लेकिन यह समझ में आता है कि यह चीजों को भ्रमित करेगा, क्योंकि ग्रब विभाजन 2 का स्पष्ट रूप से उपयोग करता है (2 को पार्टी में कमांड जो bios_grub सेट करता है)।

तो मैंने कुछ इस तरह किया:

# mkfs.ext3 -L boot1 /dev/sdb2
# mv boot boot_on_root
# mkdir boot
# mount /dev/sdb2 boot
# rsync -avHP boot_on_root/ boot/
# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

फिर रिबूट किया गया, और मेरे पास फिर से काली स्क्रीन है, कोई संकेत नहीं। http://paste.ubuntu.com/966848/

तो इस बिंदु पर, मेरा अनुमान है कि जब bios_grub सेट किया गया है, ग्रब MBR पर इंस्टॉल नहीं हो रहा है, और ext3 पर ext3 फाइल सिस्टम को नहीं, बल्कि विभाजन पर ही, जैसे कि यह EFI था ... जो स्पष्ट रूप से गड़बड़ करेगा वहाँ ext3 फ़ाइल सिस्टम। EFI के बारे में मेरे संक्षिप्त पढ़ने से और, यह लग रहा था कि EFI मान लेता है कि पहला विभाजन बूट है, लेकिन मेरे मामले में पहला स्वैप है, और यह भी होना चाहिए कि यह कुछ असम्बद्ध होने के बजाय FAT होना चाहिए ... इसलिए इससे बहुत कम या कुछ नहीं होता है भावना, मैं अभी भी एक सुराग के बिना पूरी तरह से खो रहा हूँ। [संपादित करें: अब मेरे पास एक सुराग है ... अपडेट के लिए थोड़ा नीचे छोड़ें]

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

GPT detected.       You may want to retry after creating a
BIOS-Boot partition (>1Mo, flag). Do you want to continue?

तो मैंने हाँ क्लिक किया, और यह कहा कि यह सफलतापूर्वक मरम्मत की, और एक और पेस्ट बनाया: http://paste.ubuntu.com/966862/

लेकिन मेरे पास अभी भी ब्लिंकिंग कर्सर के साथ एक काली स्क्रीन है।

अब मेरा सिद्धांत यह है कि बूट को एक गैर-वसा वाले गैर-ईएफआई चीज द्वारा अधिलेखित कर दिया गया था जो कि केवल ग्रब कोड है जो अन्यथा सेक्टर 0-63 में पहले होता था। मैं सौभाग्य से इस पृष्ठ पर एक बहुत ही स्पष्ट कथन में भाग गया, जिसने संभवतः मेरी समझ को पूरा किया कि इसका क्या अर्थ है। और फिर जब मैंने पाया कि जेरेमी ने एक जवाब पोस्ट किया है जो अगर सच है, तो पुष्टि करता है कि यह लापता कुंजी अवधारणा है। http://blog.psych0tik.net/2011/08/grub-embedding-blocklists-and-bios_grub-partitions/

प्रशन:

क्या हो रहा है? ग्रब बूट करने में विफल क्यों होना चाहिए? यह क्यों कहता है "फ़ाइल नहीं मिली"?

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

उबंटू सीडी इंस्टॉलर इसे इस समस्या के बिना कैसे स्थापित करता है, और बिना bios_grub सेटिंग के?

मैं EFI का उपयोग करने पर भी विचार करूंगा। यदि यह एक अच्छा विचार है, और इसे स्थापित करने का एक मानक तरीका है, तो मैं हमेशा नई चीजें सीखने के लिए तैयार हूं।

सबसे तेज जवाब जो मुझे खुश करेगा, यहां तक ​​कि मेरे सभी सवालों का जवाब दिए बिना, कमांड का एक सेट होगा जो मैं रेस्क्यू सीडी से उसी तरह से बूटलोडर को ठीक करने के लिए चला सकता हूं जैसे कि इंस्टॉल सीडी ने किया था। यह भी अच्छा होगा अगर मैं उन्हें सीडी के बजाय बूट सिस्टम के साथ चला सकता हूं।


क्या आप पार्टीशन से प्रिंट आउटपुट जोड़ सकते हैं?
जेरेमी

आप देख सकते हैं कि लाइन 993 पर 2 पेस्ट लिंक में, लेकिन अनुरोध के अनुसार, मैं इसे अपने प्रश्न पर जोड़ूंगा।
पीटर

जवाबों:


8

समाधान bios_grub विभाजन का उपयोग करना है, जो कि / boot विभाजन के समान नहीं है।

डिफ़ॉल्ट रूप से bios_grub विभाजन 1MiB है, और इसे bios_grub को ध्वजांकित किया जाना चाहिए। मेरा मेरी डिस्क पर पहला विभाजन है। यदि आपका विभाजन 2 वास्तव में है / जैसा कि पक्षपाती सुझाव है, तो यह सही नहीं होगा और आपको एक और 1MiB विभाजन बनाना चाहिए।

GPT और GRUB2 के साथ न्यूनतम फाइल सिस्टम में तीन विभाजन होते हैं: bios_grub, root, swap। (पूरी तरह से स्वैप आवश्यक नहीं है)

केवल "ग्रब-इनस्टॉल" चलाने के बाद ग्रब बूट करने में विफल क्यों होता है?

अज्ञात ... आपको लगता है कि यह कुछ भी संशोधित नहीं करेगा अगर यह स्पष्ट रूप से कहता है कि यह एम्बेड नहीं कर सकता है तो यह काम नहीं कर सकता है।

यह क्यों कहता है "फ़ाइल नहीं मिली"?

/ vmlinuz एक सिम्लिंक है जो बूट विभाजन का उपयोग करता है, और बूट विभाजन भ्रष्ट है। Bios_grub कोड इसके ext3 संरचना के शीर्ष पर लिखा गया था। इसका शायद मतलब था कि / बूट माउंट नहीं किया गया था, और वहां देखी गई ग्रब फाइलें वास्तव में रूट सिस्टम पर थीं, जिसमें कर्नेल शामिल नहीं था।

क्यों मैं इस विभाजन के बिना स्थापित नहीं करना चाहता हूँ

एक GPT विभाजन तालिका में बूटलोडर के लिए कोई जगह नहीं है, एमबीआर के विपरीत। इसलिए बूट कोड को रखने के लिए एक विशिष्ट विभाजन बनाया जाना चाहिए। "ग्रब-इनस्टॉल" चलाने से पहले, इस विभाजन को कमांड के साथ निर्दिष्ट करें:

    parted /dev/sda set 1 bios_grub on

मैंने सोचा था कि मुझे एक अलग / बूट की आवश्यकता थी। उबंटू सीडी इंस्टॉलर इसे bios_grub सेटिंग के बिना कैसे स्थापित करता है?

यह आवश्यकता उबंटू इंस्टॉलर के लिए आवश्यक है, लेकिन लगता है कि यह एक अस्थिर प्रणाली है जो आसानी से टूट जाती है।

जब GRUB कहता है "इस GPT विभाजन लेबल में कोई BIOS बूट विभाजन नहीं है ", इसका अर्थ है bios_grub विभाजन, नहीं / बूट।


धन्यवाद। यह वास्तव में बहुत करीब है जो मैं अभी काम कर रहा हूं। मेरा "मैं अभी भी एक सुराग के बिना पूरी तरह से खो गया हूँ।" ऊपर अनुभाग। अब मेरा सिद्धांत यह है कि बूट को एक गैर-वसा वाले गैर-ईएफआई चीज द्वारा अधिलेखित कर दिया गया था जो कि केवल ग्रब कोड है जो अन्यथा सेक्टर 0-63 में पहले होता था। मैं एक प्रयोग पर काम कर रहा हूं, और फिर आपको बता दूंगा कि यह कैसे चलता है।
पीटर

क्या आप उबंटू का उपयोग कर रहे हैं? वहाँ एक तरह से Ubuntu इंस्टॉलर ठीक से bios_grub विभाजन का उपयोग कर स्थापित कर सकता है?
पीटर

@ पेटर मैं उबंटू का उपयोग करता हूं, और यदि आप एक इंस्ट्रूमेंट पार्टिशन करते हैं तो इंस्टॉलर को इसे सही तरीके से सेट करना चाहिए। मुझे पता है कि यह मेरे लिए 11.10 इंस्टॉलर के साथ किया था।
जेरेमी

आपका बहुत बहुत धन्यवाद। यह उत्तर है। आगे मैं और अधिक जटिल सेटअप (बूट पर छापा और lvm) के साथ कोशिश करूंगा और फिर मैं आपके उत्तर को विवरण के साथ संपादित करूंगा।
पीटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.