बुनियादी कार्य प्रणाली विवरण:
मैं एक सर्वर स्थापित करने के लिए 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 का उपयोग करने पर भी विचार करूंगा। यदि यह एक अच्छा विचार है, और इसे स्थापित करने का एक मानक तरीका है, तो मैं हमेशा नई चीजें सीखने के लिए तैयार हूं।
सबसे तेज जवाब जो मुझे खुश करेगा, यहां तक कि मेरे सभी सवालों का जवाब दिए बिना, कमांड का एक सेट होगा जो मैं रेस्क्यू सीडी से उसी तरह से बूटलोडर को ठीक करने के लिए चला सकता हूं जैसे कि इंस्टॉल सीडी ने किया था। यह भी अच्छा होगा अगर मैं उन्हें सीडी के बजाय बूट सिस्टम के साथ चला सकता हूं।