สอบสวนด้วง: ข้อผิดพลาด: ล้มเหลวในการรับเส้นทางที่ยอมรับจาก / วัว


15

ฉันพยายามติดตั้งด้วงใหม่จากไดรฟ์ USB ฉันเรียกใช้ต่อไปนี้:

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

ฉันได้รับข้อผิดพลาดต่อไปนี้:

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

บางคนสามารถอธิบายข้อผิดพลาดได้และจะแก้ไขได้อย่างไร

แก้ไข

ฉันกำลังพยายามซ่อมแซมระบบดูอัลบูตที่ทำงานอยู่จาก USB ที่มีลินุกซ์มิ้นต์


ตกลงการแก้ไขนั้นเป็นขั้นตอนในทิศทางที่ถูกต้อง เราจะสมมติว่าคุณติดตั้งระบบ Linux อยู่แล้ว? มันบูตมาจากsda6ไหน? คำตอบของฉันที่นี่ช่วยได้ไหม
terdon

คำตอบ:


10

ทำตามขั้นตอนเหล่านี้:

  1. บูตเข้าสู่เซสชัน Live Linux

  2. เมานต์/พาร์ติชันของระบบปฏิบัติการที่คุณติดตั้งไว้/mnt

    sudo mount /dev/sda6 /mnt
    
  3. ตั้งค่าchrootสภาพแวดล้อม:

    sudo chroot /mnt
    
  4. ขณะนี้คุณอยู่ใน "ปลอม" ลินุกซ์ติดตั้งถือว่าว่าเป็น/mnt /ซึ่งหมายความว่าไฟล์ทั้งหมดที่จำเป็นสำหรับด้วงอยู่ใน/bootที่ที่ระบบคาดว่าจะเป็นและคุณสามารถติดตั้งด้วงเช่นเดียวกับที่คุณใช้ระบบที่ติดตั้งจริง:

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

ตอนนี้รีบูตและคุณจะเห็นเมนูด้วงปรากฏขึ้นตามปกติ


ฉันพยายามติดตั้งจากอุปกรณ์ usb ฉันพยายามด้วยโดยไม่ต้องติดตั้ง - ข้อผิดพลาดเดียวกัน คุณสามารถอธิบายข้อผิดพลาดได้หรือไม่?
elyashiv

@elyashiv โปรดแก้ไขคำถามของคุณและอธิบายว่าคุณพยายามทำอะไร คุณพยายามช่วยชีวิตระบบที่เสียหายหรือไม่? คุณกำลังบูทระบบสดจาก USB หรือไม่? ถ้าเป็นเช่นนั้นบอกเรา คุณใช้ระบบปฏิบัติการอะไร? อะไรที่ทำให้คุณคิดว่า GRUB มีroot-deviceตัวเลือกและสิ่งที่คุณคาดหวังว่าตัวเลือกนั้นจะทำอย่างไร คุณได้ตั้งค่าchrootสภาพแวดล้อมหรือไม่? เมื่อใดก็ตามที่คุณถามคำถามคุณต้องอธิบายอย่างชัดเจนว่าคุณพยายามทำอะไรเราไม่สามารถเดาได้
terdon

อ๊ะฉันหมายถึง -root-directory
elyashiv

@elyashiv ไม่มี--root-directoryทั้ง ไปอ่านคำตอบของฉันที่นี่เพื่ออธิบายวิธีการติดตั้งด้วงใหม่
terdon

ดูคำตอบแรกที่นี่
elyashiv

1

หากด้วงบอกว่ามันไม่สามารถแก้ไขเส้นทางที่ยอมรับได้ของบางอย่างก็หมายความว่ามันไม่มีอยู่จริงหรือrealpath()ล้มเหลว

ในกรณีนี้ลอง:

$ realpath /cow
$ ls -la /cow

หากทั้งสองคำสั่งระบุว่า "ไม่สามารถหาไฟล์หรือไดเรกทอรี" คุณต้องสร้างมันขึ้นมา

หากคำสั่งที่สองใช้งานได้ แต่คำสั่งแรกใช้ไม่ได้ให้ตรวจสอบสาเหตุที่realpath()ใช้งานไม่ได้ สาเหตุหนึ่งอาจเป็นเพราะ/procไม่ได้เมานต์ ในบางการใช้งานของ libc /proc/self/fdจะใช้ในการรับเส้นทางที่ยอมรับของไฟล์


0

ขึ้นอยู่กับสิ่งที่เขียนดูเหมือนว่าคุณกำลังพยายามติดตั้ง GRUB to / dev / sda คุณไม่ต้องการติดตั้งดิสก์

คุณอาจกำลังมองหา: grub-install /dev/sda

หน้าคน GRUB สำหรับการอ้างอิงหรือคุณสามารถman grub-installจากระบบของคุณ: http://linux.die.net/man/8/grub-install


0

ฉันได้รับข้อผิดพลาดนี้ด้วยและฉันไม่คิดว่ามันจะเกิดขึ้นใน chroot

พื้นหลัง

ฉันคิดว่านี่เป็นตอนที่ systemd ไม่สามารถหาเส้นทางได้เพราะมันถูกเมาท์ในไดเรกทอรี ดังนั้นความแตกต่างคือเมื่อคุณตั้งค่า chroot คุณได้กำหนดค่าการเข้าถึงฮาร์ดแวร์รวมถึงไดรฟ์

แม้ว่าคุณจะสามารถกำหนดค่าการเข้าถึงนี้ภายใน 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สำหรับ USB บน Pi debootstrapped ด้วย Debian Stretch แม้การใช้ grub-uboot และ grub-efi-arm ยังมีข้อผิดพลาดที่grub-probeไม่สามารถหาเส้นทางที่เป็นที่ยอมรับ

ไม่เพียงแค่นั้น แต่update-grubจะเห็นและรู้ว่าระบบปฏิบัติการคืออะไร แต่น่าสนใจที่grub-installไม่รู้จักระบบปฏิบัติการ Debian บน USB

ตัวอย่าง

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#

ที่น่าสนใจเมื่อฉันสร้าง chroot และสามารถทำงานupdate-grubได้แม้ว่าฉันจะอยู่บนระบบปฏิบัติการที่ฉัน debootstrapped ไปที่ USB ตัวมันก็ไม่เห็นระบบปฏิบัติการของตัวเอง!

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:/#

มันเห็น Raspbian เท่านั้น สิ่งนี้เกิดขึ้นเฉพาะเมื่อพยายามติดตั้งและอัปเดต GRUB ภายในคอนเทนเนอร์ แต่เมื่อฉันออกจาก chroot

ดูวิธีการใช้งานในตอนนี้เพราะฉันไม่ได้ยกเลิกการต่อเชื่อมไดเรกทอรี chroot:

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

จากนอกใจคุณฉันกำลังใช้คำสั่งนี้พร้อมกับgrub-ubootติดตั้งบน Raspbian และไม่มี Grub บน USB ที่มี debootstrapped Debian

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#

สิ่งนี้ไม่ได้เกิดขึ้นโดยใช้หนึ่งในภาพที่ไม่เป็นทางการสำหรับ Debian ARMแต่เห็นได้ชัดว่านี่ยังคงเป็นการปรับแต่งที่ยังไม่สามารถทำการ debootstrapping ได้

การแก้ไขปัญหา

จริงๆแล้วมีบางครั้งที่มันจะดีกว่าเพียงแค่สร้างเส้นทาง ความเป็นไปได้ต่อไปเท่านั้น (และโอกาสที่จะเกิดขึ้น) คือการเขียน GRUB และสำหรับสิ่งที่ฉันกำลังจะอ่านในหน้านี้

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

อีกสิ่งหนึ่งที่ฉันต้องการแบ่งปันเกี่ยวกับปัญหานี้คือวิธีแก้ปัญหาที่อาจใช้งานได้ แต่การตระหนักถึงการ์ด microSD นั้นมีความละเอียดอ่อนมาก ฉันสร้างอิมเมจ Linux ของตัวเองแล้วเรียนรู้อย่างรวดเร็ว สิ่งที่ดีที่สุดที่ควรทำคือใช้ Qemu ทุกครั้งที่ทำได้ แต่เพื่อพยายามล้างตารางพาร์ติชั่นเก่าคุณอาจลองเรียกใช้sgdisk --zap-allบนไดรฟ์

sgdisk --zap-all /dev/sdd

ในความเป็นจริงบางครั้งถ้ามันให้ข้อผิดพลาดในครั้งแรกและไม่ใช่ข้อผิดพลาดแบบอ่านอย่างเดียวคุณสามารถเรียกใช้อีกครั้งและในที่สุดก็จะตารางพาร์ติชันใหม่หรือเก่า

และคุณสามารถใช้ Qemu เพื่อเลียนแบบ Raspberry Piบนพีซีมาตรฐานของ AMD / Intel ฉันอยากจะแนะนำ ฉันรู้ว่านี่เป็นข้อมูลมากกว่าที่เกี่ยวข้องกับการโพสต์ต้นฉบับ แต่ฉันคิดว่าน่าจะเป็นวิธีที่ได้รับข้อผิดพลาดนี้ มันเป็นอายุของภาชนะบรรจุ


0

สำหรับทุกคนที่กำลังดิ้นรนกับสิ่งนี้ที่พยายามใช้ USB แบบสดหรือวิธีการอื่นในการติดตั้งหรือติดตั้งด้วง - ฉันเคยจัดการเรื่องนี้มาสองสามครั้งแล้วลืมเอกสารก่อนแม้ว่าฉันตั้งใจจะทำ

ปัญหาที่คุณเผชิญคือด้วงไม่สามารถเข้าถึงพา ธ ที่คุณอ้างถึงว่าเป็นต้นทาง (/ boot) หรือปลายทาง (ระบบและ chroot ของคุณสามารถดู/dev/sdaตัวอย่างได้หรือไม่) หรือทั้งสองอย่าง เมื่อคุณเตรียมที่จะ chroot คุณสร้างการผูกติดที่สามารถเข้าถึงได้ในสภาพแวดล้อม chroot หรือคุณทำเช่นนั้นภายใน chroot โดยใช้ Mount -t มีคำแนะนำมากมายออนไลน์ที่ทำอย่างใดอย่างหนึ่ง

คุณต้องตรวจสอบให้แน่ใจว่าคุณผูก / dev หรือพาร์ติชันเฉพาะที่มีไฟล์บูตใน / boot (เช่น / dev / sda1) / boot เป็นพาร์ติชันแยกต่างหากหรือไดเรกทอรีใน / chroot ต้องการเข้าถึงไดรฟ์ที่คุณจะติดตั้งด้วงเพื่อให้ fdisk -l ใน chroot เพื่อให้แน่ใจว่าคุณสามารถเห็นอุปกรณ์ที่แสดงอยู่ในเอาต์พุต โปรดทราบว่าหากคุณไม่มีพาร์ติชันสำหรับบูตแยกต่างหาก แต่คุณมีไดเรกทอรีบู๊ตใน / รูทพร้อมกับไฟล์บู๊ต (ไม่ใช่แค่จุดต่อ) คุณต้องติดตั้งพาร์ติชั่นที่มีรูท คุณไม่ต้องเมานต์ใด ๆ กับ / root / boot

คุณต้องตรวจสอบให้แน่ใจว่าคุณได้ผูกระบบไฟล์ proc และระบบไฟล์ sys แต่คำแนะนำทุกอย่างที่ฉันเห็นมีทั้งสองอย่าง ฉันเพิ่งเห็น / dev พลาดบางครั้ง อาจมีบางกรณีที่คุณไม่ต้องการ แต่ฉันไม่รู้

tl; dr: ตรวจสอบให้แน่ใจว่าคุณผูก mount / dev


ทำไมคุณถึงพูดถึงchrootเมื่อคำถามไม่เกี่ยวกับ`` chroot``?
G-Man กล่าวว่า 'Reinstate Monica'

OP กล่าวว่า "ทำงานจาก USB ที่มี linux mint" นั่นจะเป็น chroot
Daira Hopwood
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.