ग्रब-जांच: त्रुटि: विहित पथ / गाय प्राप्त करने में विफल


16

मैं USB ड्राइव से ग्रब को फिर से स्थापित करने की कोशिश कर रहा हूं। मैं निम्नलिखित चलाता हूं:

sudo mount /dev/sda6 /mnt
sudo grub-install --root-directory=/mnt /dev/sda

मुझे निम्नलिखित त्रुटि मिलती है:

grub-probe: error: failed to get canonical path of /cow.

क्या कोई त्रुटि की व्याख्या कर सकता है, और इसे कैसे हल किया जाए?

संपादित करें

मैं एक टूटे हुए दोहरे बूट सिस्टम को ठीक करने की कोशिश कर रहा हूं, जो कि लिनक्स टकसाल युक्त यूएसबी से चल रहा है।


ठीक है, वह संपादन सही दिशा में एक कदम है। क्या हम यह मान सकते हैं कि आपके पास पहले से ही लिनक्स सिस्टम स्थापित है? क्या इससे बूट होता है sda6? क्या मेरा जवाब यहाँ मदद करता है?
terdon

एफडब्ल्यूआईडब्ल्यू, कॉपी-ऑन-राइट फाइलसिस्टम /cowका संदर्भ देता है, जो कि सीडी या यूएसबी से बूट करते समय आरोहित होता है/
krubo

जवाबों:


10

इन कदमों का अनुसरण करें:

  1. लाइव लिनक्स सत्र में बूट करें।

  2. /अपने स्थापित OS के विभाजन को माउंट करें/mnt

    sudo mount /dev/sda6 /mnt
    
  3. एक chrootवातावरण सेट करें :

    sudo chroot /mnt
    
  4. अब आप एक "नकली" लिनक्स स्थापित कर रहे हैं जो इस तरह से व्यवहार /mntकरता है /। इसका मतलब यह है कि GRUB के लिए आवश्यक सभी फाइलें वह हैं /bootजहां सिस्टम उनसे अपेक्षा करता है और आप GRUB को वैसे ही स्थापित कर सकते हैं जैसे कि आप वास्तव में अपना स्थापित सिस्टम चला रहे थे:

    sudo update-grub
    sudo grub-install /dev/sda
    

अब रिबूट करें और आपको सामान्य रूप से GRUB मेनू दिखाई देना चाहिए।


मैं usb डिवाइस से इंस्टॉल करने की कोशिश कर रहा हूं । किसी भी तरह से, मैंने भी बिना किसी बढ़ते-बढ़ते एक ही त्रुटि की कोशिश की। क्या आप त्रुटि की व्याख्या कर सकते हैं?
इलयशिव

@elyashiv कृपया अपने प्रश्न को संपादित करें और समझाएं कि यह आप क्या प्रयास कर रहे हैं। क्या आप एक टूटी हुई व्यवस्था को बचाने का प्रयास कर रहे हैं? क्या आप USB से लाइव सिस्टम बूट कर रहे हैं? यदि हां, तो हमें बताएं । आप कौन सा ओएस उपयोग कर रहे हैं? आपको क्या लगता है कि GRUB के पास एक root-deviceविकल्प है और आप उस विकल्प से क्या करने की उम्मीद करते हैं? क्या आपने एक chrootवातावरण स्थापित किया है? जब भी आप कोई प्रश्न पूछते हैं, तो आपको यह समझाने की आवश्यकता होती है कि आप क्या करने की कोशिश कर रहे हैं, हम अनुमान नहीं लगा सकते।
terdon

उफ़, मेरा मतलब था -root-directory
elyashiv

@elyashiv --root-directoryया तो नहीं है । यहाँ मेरा उत्तर पढ़ें जो बताता है कि कैसे ग्रब को फिर से स्थापित करना है।
terdon

पहला उत्तर यहाँ
देखिए

1

यदि ग्रब कहता है कि यह किसी चीज़ के विहित मार्ग को हल नहीं कर सकता है, तो इसका मतलब है कि यह मौजूद नहीं है या realpath()विफल है।

इस मामले में, कोशिश करें:

$ realpath /cow
$ ls -la /cow

यदि दोनों कमांड कहते हैं "फ़ाइल या निर्देशिका नहीं ढूँढ सकते हैं", तो आपको एक बनाना होगा।

यदि दूसरा कमांड काम करता है, लेकिन पहला नहीं करता है, तो जांचें कि realpath()काम क्यों नहीं करता है। इसका एक कारण यह हो सकता है कि /procमाउंट न किया गया हो। Libc के कुछ कार्यान्वयन में, /proc/self/fdफ़ाइल का कैनोनिकल पथ प्राप्त करने के लिए उपयोग किया जाता है।


0

जो लिखा गया था उसके आधार पर, ऐसा लगता है कि आप GRUB को / dev / sda में स्थापित करने का प्रयास कर रहे हैं। आप डिस्क को माउंट नहीं करना चाहते हैं।

आप शायद देख रहे हैं: grub-install /dev/sda

संदर्भ के लिए GRUB मैन पेज, या आप man grub-installअपने सिस्टम से ले सकते हैं: http://linux.die.net/man/8/grub-install


0

मुझे भी यह त्रुटि मिलती है, और मुझे नहीं लगता कि यह एक चिरौटे में होता है।

पृष्ठभूमि

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

हालाँकि आप इस एक्सेस को Systemd के अंदर कॉन्फ़िगर कर सकते हैं, जिसका मतलब यह नहीं है कि आप उन ड्राइव्स के लिए अनुमतियों को उसी तरह कॉन्फ़िगर कर सकते हैं।

उदाहरण के लिए, मैंने यह फ़ाइल बनाई:

/etc/systemd/system/systemd-nspawn@.service.d/override.conf

और इसमें ये सेटिंग्स हैं:

[Service]
DeviceAllow=char-usb_device rwm
DeviceAllow=char-usb
[Files]
Bind=/var/cache/apt/pkgcache.bin
Bind=/var/cache/apt/srcpkgcache.bin

यह तब भी काम नहीं करता है, जब पीब पर यूएसबी का उपयोग किया जाता है grub-install /dev/sdaया update-grubडेबियन स्ट्रेच के साथ डीबूटस्ट्रैप किया जाता है। यहां तक ​​कि ग्रब-यूबूट और ग्रब-एफी-आर्म का उपयोग करते हुए अभी भी त्रुटि है कि grub-probeकैनोनिकल पथ नहीं मिल सकता है।

इतना ही नहीं, हालांकि यद्यपि update-grubयह देख और जान लेंगे कि ऑपरेटिंग सिस्टम क्या हैं, लेकिन दिलचस्प रूप grub-installसे यह स्वीकार नहीं करता है कि डेबियन ऑपरेटिंग सिस्टम यूएसबी पर है।

उदाहरण

root@raspixmc:/home/pi# grub-install /dev/sda
Installing for arm-uboot platform.
grub-install: warning: no hints available for your platform. Expect 
reduced performance.
grub-install: warning: WARNING: no platform-specific install was 
performed.
Installation finished. No error reported.
root@raspixmc:/home/pi#

दिलचस्प है, जब मैं update-grubचेरोट बनाता हूं और चला सकता हूं, भले ही मैं ऑपरेटिंग सिस्टम पर हूं कि मैंने यूएसबी को डीबूटस्ट्रैप किया है, यह खुद का ऑपरेटिंग सिस्टम नहीं देखता है!

root@raspixmc:/home/pi# mount /dev/sda1 /mnt
root@raspixmc:/home/pi# cd /mnt
root@raspixmc:/mnt# mount --bind /dev dev/
root@raspixmc:/mnt# mount --bind /sys sys/
root@raspixmc:/mnt# mount --bind /proc proc/
root@raspixmc:/mnt# mount --bind /dev/pts dev/pts
root@raspixmc:/mnt# chroot . bin/bash
root@raspixmc:/# update-grub
Generating grub configuration file ...
Found Raspbian GNU/Linux 9 (stretch) on /dev/mmcblk0p2
done
root@raspixmc:/#

यह केवल रास्पियन को देखता है। यह केवल कंटेनर के अंदर GRUB को स्थापित और अद्यतन करने की कोशिश करते समय होता है, लेकिन जब मैं चेरोट से बाहर निकलता हूं।

देखो कि यह अब कैसे काम करता है क्योंकि मैंने चेरोट निर्देशिका को अनमाउंट नहीं किया:

/dev dev/
/sys sys/
/proc proc/
/dev/pts dev/pts

कंटेनर माइंड के बाहर से, मैं इस कमांड grub-ubootको Raspbian पर इंस्टॉल कर रहा हूं और USB पर डेबस्ट्रस्त्र डेबियन युक्त कोई ग्रब नहीं है।

root@raspixmc:/mnt# update-grub
Generating grub configuration file ...
Found Raspbian GNU/Linux 9 (stretch) on /dev/mmcblk0p2
Found Debian GNU/Linux 9 (stretch) on /dev/sda1
done
root@raspixmc:/mnt#

यह डेबियन एआरएम के लिए अनधिकृत रूप से उपलब्ध चित्रों में से एक का उपयोग करके नहीं होता है , लेकिन जाहिर है कि यह अभी भी एक कस्टमाइज़ेशन है जो अभी तक डिबूटस्ट्रैपिंग के लिए उपलब्ध नहीं है।

समस्या निवारण

वास्तव में ऐसे समय होते हैं जब यह सिर्फ एक रास्ता बनाना बेहतर होता है। केवल अगली संभावना (और एक संभावित एक) बस GRUB लिखने के लिए है। और इसके लिए मैं सिर्फ इस पेज पर पढ़ने जा रहा हूं।

https://www.dedoimedo.com/computers/grub-2.html

एक और बात जो मैं इस मुद्दे के बारे में साझा करना चाहता हूं वह एक समाधान है जो काम कर सकता है, लेकिन यह महसूस करें कि माइक्रोएसडी कार्ड बहुत संवेदनशील हैं। मैं अपनी खुद की लिनक्स छवियां बना रहा हूं और यह तेजी से सीखा है। सबसे अच्छी बात यह है कि जब भी आप कर सकते हैं Qemu का उपयोग करें, लेकिन एक पुराने विभाजन तालिका को साफ़ करने के लिए आप sgdisk --zap-allड्राइव पर चलने का प्रयास कर सकते हैं ।

sgdisk --zap-all /dev/sdd

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

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


0

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

आप जिस समस्या का सामना कर रहे हैं, आपके पास उस रास्ते तक पहुंच नहीं है, जिसे आप स्रोत (/ बूट) या गंतव्य के रूप में संदर्भित कर रहे हैं (क्या आपका सिस्टम और /dev/sdaउदाहरण के लिए देख सकते हैं ?) या दोनों। जब आप चेरोट करने की तैयारी करते हैं तो आप बाइंड माउंट्स बनाते हैं जो चेरोट वातावरण में सुलभ होते हैं, या आप माउंट -t का उपयोग करके चेरोट के भीतर ऐसा करते हैं। ऑनलाइन बहुत सारे गाइड हैं जो इसे किसी भी तरह से करते हैं।

आपको यह सुनिश्चित करने की आवश्यकता है कि आप बूट फ़ाइलों में / बूट (जैसे / dev / sda1) युक्त विशिष्ट विभाजन (s) या केवल विभाजन (s) करते हैं। / बूट या तो एक अलग विभाजन है या निर्देशिका में / चुरोट को उस ड्राइव तक पहुंच की आवश्यकता है जो आप होंगे (पुनः) grub स्थापित कर रहे हैं ताकि chroot में fdisk -l करें यह सुनिश्चित करने के लिए कि आप आउटपुट में सूचीबद्ध डिवाइस देख सकते हैं। यह भी ध्यान दें, यदि आपके पास एक अलग बूट पार्टीशन नहीं है, लेकिन आपके पास बूट डायरेक्टरी / रूट इन बूट फाइल्स हैं (सिर्फ एक आरोह बिंदु नहीं) तो आपको केवल विभाजन वाले रूट को माउंट करना होगा। फिर आपको / root / बूट के लिए कुछ भी माउंट करने की आवश्यकता नहीं है।

आपको यह भी सुनिश्चित करने की आवश्यकता है कि आप proc फाइल सिस्टम और sys फाइलसिस्टम को बांधते हैं, लेकिन मैंने जो भी गाइड देखा है, उन दोनों को देखा है। मैंने अभी-अभी देखा है / कभी-कभी याद किया है। ऐसे कुछ मामले हो सकते हैं जब आपको इसकी आवश्यकता नहीं है, लेकिन मुझे उनके बारे में पता नहीं है।

tl; dr: सुनिश्चित करें कि आप माउंट / देव को बांधते हैं


chrootजब आप इस बारे में बात नहीं कर रहे हैं कि सवाल `चरोत` के बारे में क्यों नहीं है?
जी-मैन का कहना है कि 'मोनिका'

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