grub-probe: error: gagal mendapatkan jalur kanonik / cow

14

Saya mencoba menginstal ulang grub dari drive USB. Saya menjalankan yang berikut ini:

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

Saya mendapatkan kesalahan berikut:

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

dapatkah seseorang menjelaskan kesalahannya, dan bagaimana cara menyelesaikannya?

Edit

Saya mencoba memperbaiki sistem dual-boot yang rusak, berjalan dari USB yang berisi linux mint.

elyashiv
sumber
OK, suntingan itu adalah langkah ke arah yang benar. Apakah kita berasumsi bahwa Anda sudah menginstal sistem Linux? Apakah ini boot dari sda6? Apakah jawaban saya di sini membantu?
terdon

Jawaban:

10

Ikuti langkah ini:

  1. Boot ke sesi Linux Live.

  2. Pasang /partisi OS yang Anda instal ke/mnt

    sudo mount /dev/sda6 /mnt
    
  3. Siapkan chrootlingkungan:

    sudo chroot /mnt
    
  4. Anda sekarang berada di instalasi Linux "palsu" yang memperlakukan /mntsebagai /. Ini berarti bahwa semua file yang diperlukan untuk GRUB berada di /boottempat sistem mengharapkannya dan Anda dapat menginstal GRUB seolah-olah Anda benar-benar menjalankan sistem yang diinstal:

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

Sekarang reboot dan Anda akan melihat menu GRUB muncul secara normal.

terdon
sumber
Saya mencoba menginstal dari perangkat usb. Bagaimanapun, saya mencoba juga tanpa pemasangan - kesalahan yang sama. dapatkah Anda menjelaskan kesalahannya?
elyashiv
@elyashiv harap edit pertanyaan Anda dan jelaskan apa yang Anda coba. Apakah Anda mencoba menyelamatkan sistem yang rusak? Apakah Anda mem-boot sistem langsung dari USB? Jika demikian, beri tahu kami . OS apa yang Anda gunakan? Apa yang membuat Anda berpikir GRUB memiliki root-deviceopsi dan apa yang Anda harapkan dari opsi itu? Sudahkah Anda mengatur chrootlingkungan? Setiap kali Anda mengajukan pertanyaan, Anda perlu menjelaskan dengan tepat apa yang Anda coba lakukan, kami tidak dapat menebaknya.
terdon
oops,
maksudku -root
@elyashiv juga tidak --root-directoryada. Baca jawaban saya di sini yang menjelaskan cara menginstal ulang grub.
terdon
lihat jawaban pertama di sini
elyashiv
1

Jika grub mengatakan bahwa ia tidak dapat menyelesaikan jalur kanonik sesuatu, itu berarti ia tidak ada atau realpath()gagal.

Dalam hal ini, coba:

$ realpath /cow
$ ls -la /cow

Jika kedua perintah mengatakan "tidak dapat menemukan file atau direktori", maka Anda harus membuatnya.

Jika perintah kedua berfungsi, tetapi yang pertama tidak, periksa mengapa realpath()tidak berhasil. Salah satu alasannya bisa jadi yang /proctidak dipasang. Dalam beberapa implementasi libc, /proc/self/fddigunakan untuk mendapatkan path kanonik file.

Sauron
sumber
0

Berdasarkan apa yang ditulis, sepertinya Anda mencoba menginstal GRUB ke / dev / sda. Anda tidak ingin memasang disk.

Anda mungkin mencari: grub-install /dev/sda

Halaman manual GRUB untuk referensi, atau Anda dapat man grub-installdari sistem Anda: http://linux.die.net/man/8/grub-install

tamarintech
sumber
0

Saya mendapatkan kesalahan ini juga, dan saya pikir itu tidak terjadi di chroot.

Latar Belakang

Saya pikir ini adalah ketika systemd tidak dapat menemukan jalan karena sudah terpasang di direktori. Jadi, perbedaannya adalah ketika Anda mengatur chroot Anda sudah mengkonfigurasi akses ke perangkat keras, termasuk drive.

Meskipun Anda dapat mengkonfigurasi akses ini di dalam Systemd itu tidak berarti Anda dapat mengkonfigurasi izin untuk drive tersebut dengan cara yang sama.

Misalnya, saya membuat file ini:

/etc/systemd/system/[email protected]/override.conf

Dan itu berisi pengaturan ini:

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

Ini masih tidak berfungsi saat menggunakan grub-install /dev/sdaatau update-grubuntuk USB pada Pi debootstrapped dengan Debian Stretch. Bahkan menggunakan grub-uboot dan grub-efi-arm masih ada kesalahan yang grub-probetidak dapat menemukan jalur kanonik.

Bukan hanya itu tetapi meskipun update-grubakan melihat dan tahu apa sistem operasi itu, tetapi menariknya grub-installtidak mengenali sistem operasi Debian pada USB.

Contoh

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#

Menarik, ketika saya membuat chroot dan dapat berjalan update-grub, meskipun saya berada di sistem operasi yang saya debootstrap ke USB itu sendiri tidak melihat sistem operasinya sendiri!

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

Itu hanya melihat Raspbian. Ini terjadi hanya ketika mencoba menginstal dan memperbarui GRUB di dalam wadah, tetapi ketika saya keluar dari chroot.

Tonton cara kerjanya sekarang karena saya tidak meng-unmount direktori chroot:

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

Dari luar wadah pikiran Anda, saya menjalankan perintah ini dengan grub-ubootdiinstal pada Raspbian dan tidak ada Grub pada USB yang mengandung Debian debootstrapped.

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#

Ini tidak terjadi menggunakan salah satu gambar yang tersedia secara tidak resmi untuk ARM Debian , tetapi jelas ini masih merupakan kustomisasi yang belum tersedia untuk debootstrapping.

Penyelesaian masalah

Sungguh ada saat-saat ketika lebih baik hanya membuat jalan. Satu-satunya kemungkinan berikutnya (dan kemungkinan) adalah cukup menulis GRUB. Dan untuk itu saya hanya akan membaca di halaman ini.

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

Hal lain yang ingin saya bagikan tentang masalah ini adalah solusi yang mungkin berhasil, tetapi menyadari kartu microSD sangat sensitif. Saya telah membangun gambar Linux saya sendiri dan belajar ini dengan cepat. Hal terbaik untuk dilakukan adalah menggunakan Qemu kapan saja Anda bisa, tetapi untuk mencoba menghapus tabel partisi lama Anda mungkin mencoba menjalankannya sgdisk --zap-alldi drive.

sgdisk --zap-all /dev/sdd

Bahkan, kadang-kadang jika itu memberikan kesalahan pertama kali dan itu bukan kesalahan hanya baca, Anda bisa menjalankannya lagi dan akhirnya semua tabel partisi baru atau lama.

Dan Anda dapat menggunakan Qemu untuk meniru Raspberry Pi pada PC berbasis AMD / Intel standar. Saya akan merekomendasikannya. Saya tahu ini lebih banyak informasi daripada yang berkaitan dengan posting asli, tapi saya pikir itu kemungkinan bagaimana kesalahan ini diturunkan. Ini adalah usia wadah.

w3techie
sumber
0

Bagi siapa pun yang berjuang dengan ini yang mencoba menggunakan USB langsung atau cara chroot lain untuk menginstal ulang atau menginstal grub - Saya sudah berurusan dengan ini beberapa kali dan lupa untuk mendokumentasikannya sebelumnya walaupun saya bermaksud.

Masalah yang Anda hadapi adalah grub tidak memiliki akses ke jalur yang Anda maksud sebagai sumber (/ boot) atau tujuan (dapatkah sistem dan chroot Anda melihat /dev/sdacontohnya?) Atau keduanya. Saat Anda bersiap untuk chroot, Anda membuat ikatan bind yang dapat diakses di lingkungan chroot, atau Anda melakukannya di dalam chroot menggunakan mount -t. Ada begitu banyak panduan online yang melakukannya dengan cara apa pun.

Anda perlu memastikan bahwa Anda mengikat / dev atau hanya partisi tertentu yang berisi file boot di / boot (mis. / Dev / sda1). / boot adalah partisi yang terpisah atau direktori di / Chroot membutuhkan akses ke drive yang akan Anda instal (ulang) grub untuk melakukan fdisk -l di chroot untuk memastikan Anda dapat melihat perangkat yang tercantum dalam output. Perhatikan juga, jika Anda tidak memiliki partisi boot terpisah, tetapi Anda memiliki direktori boot di / root dengan file boot (bukan hanya titik mount) maka Anda hanya perlu me-mount partisi yang berisi root. Maka Anda tidak perlu me-mount apa pun ke / root / boot.

Anda juga perlu memastikan Anda mengikat sistem file proc dan sistem file sys, tetapi setiap panduan yang saya lihat memiliki keduanya. Saya baru saja melihat / dev kadang-kadang ketinggalan. Mungkin ada beberapa kasus ketika Anda tidak membutuhkannya, tetapi saya tidak tahu mereka.

tl; dr: pastikan Anda mengikat mount / dev

pengguna327540
sumber
Mengapa Anda berbicara chrootketika pertanyaannya bukan tentang `` chroot``?
G-Man Mengatakan 'Reinstate Monica'
OP mengatakan "berjalan dari USB yang berisi linux mint". Itu akan menjadi chroot.
Daira Hopwood