grub-thăm dò: lỗi: không nhận được đường dẫn chuẩn / bò


13

Tôi đang cố gắng cài đặt lại grub từ ổ USB. Tôi chạy như sau:

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

Tôi nhận được lỗi sau đây:

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

ai đó có thể giải thích lỗi, và làm thế nào để giải quyết nó?

Biên tập

Tôi đang cố gắng sửa chữa một hệ thống khởi động kép bị hỏng, chạy từ USB có chứa linux mint.


OK, chỉnh sửa đó là một bước đi đúng hướng. Chúng tôi có cho rằng bạn đã cài đặt hệ thống Linux không? Nó khởi động từ sda6đâu? Có câu trả lời của tôi ở đây giúp đỡ?
terdon

Câu trả lời:


10

Thực hiện theo các bước sau:

  1. Khởi động vào phiên Linux trực tiếp.

  2. Gắn kết /phân vùng của hệ điều hành đã cài đặt của bạn vào/mnt

    sudo mount /dev/sda6 /mnt
    
  3. Thiết lập chrootmôi trường:

    sudo chroot /mnt
    
  4. Bây giờ bạn đang ở trong bản cài đặt Linux "giả" xử lý /mntnhư /. Điều này có nghĩa là tất cả các tệp cần thiết cho GRUB đều ở /bootnơi hệ thống mong đợi chúng và bạn có thể cài đặt GRUB giống như khi bạn thực sự chạy hệ thống đã cài đặt của mình:

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

Bây giờ khởi động lại và bạn sẽ thấy menu GRUB xuất hiện bình thường.


Tôi đang cố gắng cài đặt từ thiết bị usb. bằng mọi cách, tôi cũng đã thử mà không gắn - lỗi tương tự. bạn có thể giải thích lỗi không?
elyashiv

@elyashiv vui lòng chỉnh sửa câu hỏi của bạn và giải thích những gì bạn đang cố gắng. Bạn đang cố gắng giải cứu một hệ thống bị hỏng? Bạn đang khởi động một hệ thống trực tiếp từ USB? Nếu vậy, hãy cho chúng tôi . Bạn đang sử dụng hệ điều hành nào? Điều gì khiến bạn nghĩ GRUB có một root-devicetùy chọn và bạn mong đợi tùy chọn đó sẽ làm gì? Bạn đã thiết lập một chrootmôi trường? Bất cứ khi nào bạn đặt câu hỏi, bạn cần giải thích chính xác những gì bạn đang cố gắng làm, chúng tôi không thể đoán.
terdon

Rất tiếc, ý tôi là -root-thư mục
elyashiv

@elyashiv cũng không --root-directorycó. Đi đọc câu trả lời của tôi ở đây giải thích làm thế nào để cài đặt lại grub.
terdon

nhìn vào câu trả lời đầu tiên ở đây
elyashiv

1

Nếu grub nói rằng nó không thể giải quyết đường dẫn chính tắc của một cái gì đó, điều đó có nghĩa là nó không tồn tại hoặc realpath()thất bại.

Trong trường hợp này, hãy thử:

$ realpath /cow
$ ls -la /cow

Nếu cả hai lệnh đều nói "không thể tìm thấy tệp hoặc thư mục", thì bạn phải tạo một tệp.

Nếu lệnh thứ hai hoạt động, nhưng lệnh thứ nhất không hoạt động, hãy kiểm tra tại sao realpath()không hoạt động. Một trong những lý do có thể /proclà không được gắn kết. Trong một số triển khai libc, /proc/self/fdđược sử dụng để có được đường dẫn chính tắc của một tệp.


0

Dựa trên những gì đã được viết, có vẻ như bạn đang cố gắng cài đặt GRUB thành / dev / sda. Bạn không muốn gắn đĩa.

Có lẽ bạn đang tìm kiếm: grub-install /dev/sda

Trang người dùng GRUB để tham khảo hoặc bạn có thể man grub-installtừ hệ thống của mình: http://linux.die.net/man/8/grub-install


0

Tôi cũng nhận được lỗi này và tôi không nghĩ rằng nó xảy ra trong một chroot.

Lý lịch

Tôi nghĩ rằng đây là khi systemd không thể tìm thấy đường dẫn bởi vì nó được gắn trong một thư mục. Vì vậy, sự khác biệt là khi bạn thiết lập một chroot, bạn đã cấu hình quyền truy cập vào phần cứng, bao gồm cả ổ đĩa.

Mặc dù bạn có thể định cấu hình quyền truy cập này bên trong Systemd, điều đó không có nghĩa là bạn có thể định cấu hình quyền cho các ổ đĩa đó theo cùng một cách.

Chẳng hạn, tôi đã tạo tập tin này:

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

Và nó chứa các cài đặt này:

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

Điều này vẫn không hoạt động khi sử dụng grub-install /dev/sdahoặc update-grubcho USB trên Pi gỡ lỗi với Debian Stretch. Ngay cả khi sử dụng grub-uboot và grub-efi-arm vẫn có lỗi đó grub-probekhông thể tìm thấy đường dẫn chính tắc.

Không chỉ vậy mà mặc dù update-grubsẽ thấy và biết hệ điều hành là gì, nhưng thú vị là grub-installkhông nhận ra hệ điều hành Debian có trên USB.

Thí dụ

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#

Thật thú vị, khi tôi tạo một chroot và có thể chạy update-grub, mặc dù tôi đang sử dụng hệ điều hành mà tôi đã gỡ lỗi cho chính USB nhưng nó không thấy hệ điều hành của chính nó!

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

Nó chỉ thấy Raspbian. Điều này chỉ xảy ra khi cố gắng cài đặt và cập nhật GRUB bên trong container, nhưng khi tôi thoát khỏi chroot.

Xem cách nó hoạt động vì tôi đã không ngắt các thư mục chroot:

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

Từ bên ngoài bộ chứa, bạn đang chạy lệnh này với grub-ubootcài đặt trên Raspbian và không có Grub trên USB có chứa Debian gỡ lỗi.

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#

Điều này không xảy ra khi sử dụng một trong những hình ảnh có sẵn không chính thức cho Debian ARM , nhưng rõ ràng đây vẫn là một tùy chỉnh chưa có sẵn để gỡ lỗi.

Xử lý sự cố

Thực sự có những lúc tốt hơn là chỉ tạo ra một con đường. Khả năng tiếp theo duy nhất (và khả năng có thể xảy ra) là chỉ cần viết GRUB. Và vì điều đó tôi sẽ đọc trên trang này.

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

Một điều khác tôi muốn chia sẻ về vấn đề này là một giải pháp có thể hoạt động, nhưng nhận ra thẻ nhớ microSD rất nhạy cảm. Tôi đã xây dựng hình ảnh Linux của riêng mình và học được điều này nhanh chóng. Điều tốt nhất để làm là sử dụng Qemu bất cứ khi nào bạn có thể, nhưng để cố gắng xóa bảng phân vùng cũ, bạn có thể thử chạy sgdisk --zap-alltrên ổ đĩa.

sgdisk --zap-all /dev/sdd

Trong thực tế, đôi khi nếu nó xảy ra lỗi lần đầu tiên và đó không phải là lỗi chỉ đọc, bạn có thể chạy lại và cuối cùng tất cả các bảng phân vùng mới hoặc cũ.

Và bạn có thể sử dụng Qemu để mô phỏng Raspberry Pi trên PC dựa trên AMD / Intel tiêu chuẩn. Tôi muốn giới thiệu nó. Tôi biết đây là thông tin nhiều hơn liên quan đến bài viết gốc, nhưng tôi nghĩ đó có khả năng là lỗi này xuất phát từ đâu. Đó là thời đại container.


0

Đối với bất kỳ ai đang vật lộn với điều này đang cố gắng sử dụng USB trực tiếp hoặc các phương tiện khác để cài đặt lại hoặc cài đặt grub - tôi đã xử lý vấn đề này một vài lần và quên tài liệu trước đó mặc dù tôi dự định.

Vấn đề bạn gặp phải là grub không có quyền truy cập vào đường dẫn mà bạn đang đề cập đến như là nguồn (/ boot) hoặc đích (hệ thống và chroot của bạn có thể nhìn thấy /dev/sdachẳng hạn?) Hoặc cả hai. Khi bạn chuẩn bị chroot, bạn tạo ra các mount liên kết có thể truy cập trong môi trường chroot hoặc bạn làm như vậy trong chroot bằng mount -t. Có rất nhiều hướng dẫn trực tuyến làm điều đó một trong hai cách.

Bạn cần đảm bảo rằng bạn liên kết / dev hoặc chỉ (các) phân vùng cụ thể có chứa các tệp khởi động trong / boot (ví dụ / dev / sda1). / boot là một phân vùng riêng hoặc một thư mục trong / Chroot cần truy cập vào ổ đĩa mà bạn sẽ (cài đặt lại) để cài đặt fdisk -l trong chroot để đảm bảo bạn có thể thấy thiết bị được liệt kê trong đầu ra. Cũng lưu ý, nếu bạn không có phân vùng khởi động riêng, nhưng bạn có thư mục khởi động trong / root với các tệp khởi động (không chỉ là điểm gắn kết) thì bạn chỉ phải gắn phân vùng chứa root. Sau đó, bạn không phải gắn kết bất cứ thứ gì vào / root / boot.

Bạn cũng cần đảm bảo rằng bạn liên kết hệ thống tập tin Proc và hệ thống tập tin sys, nhưng mọi hướng dẫn tôi thấy đều có hai điều đó. Đôi khi tôi chỉ thấy / dev bỏ lỡ. Có thể có một số trường hợp khi bạn không cần nó, nhưng tôi không biết về chúng.

tl; dr: đảm bảo bạn liên kết mount / dev


Tại sao bạn lại nói về chrootkhi câu hỏi không phải là về 'tôi chroot``?
G-Man nói 'Phục hồi Monica'

OP cho biết "chạy từ USB chứa linux mint". Đó sẽ là một chroot.
Daira Hopwood
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.