grub-probe: hata: / cow kurallı yolunu alamadı


16

Grub'u bir USB sürücüden yeniden yüklemeye çalışıyorum. Aşağıdakileri çalıştırıyorum:

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

Aşağıdaki hatayı alıyorum:

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

Birisi hatayı açıklayabilir ve nasıl çözebilir?

Düzenle

Linux nane içeren bir USB'den çalışan bozuk bir çift önyükleme sistemini onarmaya çalışıyorum.


Tamam, bu düzenleme doğru yönde atılmış bir adım. Yüklü bir Linux sisteminiz olduğunu varsayalım mı? Önyükleme yapıyor sda6mu? Buradaki cevabım yardımcı oluyor mu?
terdon

FWIW, bir CD veya USB'den önyükleme yaparken monte edilen Yazmaya Kopyala dosya sistemine /cowatıfta bulunuyor/
krubo

Yanıtlar:


10

Bu adımları takip et:

  1. Canlı bir Linux oturumuna önyükleme yapın.

  2. Monte /etmek için yüklü OS bölüm/mnt

    sudo mount /dev/sda6 /mnt
    
  3. Bir chrootortam oluşturun:

    sudo chroot /mnt
    
  4. Bir "sahte" artık Linux o davranır yüklemek /mntolarak /. Bu, GRUB için gerekli olan tüm dosyaların /bootsistemin beklediği yerde olduğu ve GRUB'u gerçekte kurulu sisteminizi çalıştırıyormuş gibi yükleyebileceğiniz anlamına gelir :

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

Şimdi yeniden başlatın ve GRUB menüsünün normal göründüğünü görmelisiniz.


Ben yüklemeye çalışıyorum dan usb cihaz. herhangi bir şekilde, ben de monte etmeden denedim - aynı hata. hatayı açıklayabilir misin?
elyashiv

@elyashiv lütfen sorunuzu düzenleyin ve ne denediğinizi açıklayın. Bozuk bir sistemi kurtarmaya mı çalışıyorsunuz? USB'den canlı bir sistem mi başlatıyorsunuz? Varsa, bize bildirin . Hangi işletim sistemini kullanıyorsunuz? GRUB'un bir root-deviceseçeneği olduğunu düşündüren nedir ve bu seçeneğin ne yapmasını beklersiniz? Bir chrootortam kurdunuz mu? Ne zaman bir soru sorduğunuzda, tam olarak ne yapmaya çalıştığınızı açıklamanız gerekir, tahmin edemeyiz.
terdon

ayy, demek istediğim -kök dizin
elyashiv

@elyashiv de --root-directoryyok. Grubun nasıl yeniden yükleneceğini açıklayan cevabımı buradan okuyun .
terdon

ilk cevaba buradan bakın
elyashiv

1

Grub, bir şeyin kanonik yolunu çözemediğini söylüyorsa, var olmadığı veya realpath()başarısız olduğu anlamına gelir .

Bu durumda şunları deneyin:

$ realpath /cow
$ ls -la /cow

Her iki komut da "dosya veya dizin bulamıyor" diyorsa, bir tane oluşturmanız gerekir.

İkinci komut çalışır, ancak ilki çalışmazsa, neden realpath()çalışmadığını kontrol edin . Sebeplerden biri /procmonte edilmemiş olabilir . Bazı libc uygulamalarında /proc/self/fd, bir dosyanın kurallı yolunu elde etmek için kullanılır.


0

Yazılanlara dayanarak, / dev / sda'ya GRUB kurmaya çalıştığınız anlaşılıyor. Diski takmak istemezsiniz.

Muhtemelen aradığınız: grub-install /dev/sda

Referans için GRUB man sayfası veya man grub-installsisteminizden yapabilirsiniz : http://linux.die.net/man/8/grub-install


0

Ben de bu hatayı alıyorum ve bir chroot içinde olduğunu sanmıyorum.

Arka fon

Sanırım bu bir dizinde takılı olduğu için systemd yolu bulamıyor. Bu nedenle, fark, sürücüler de dahil olmak üzere, donanıma erişimi önceden yapılandırdığınız bir chroot ayarlamanızdır.

Bu erişimi Systemd içinde yapılandırabilmenize rağmen, bu sürücüler için izinleri aynı şekilde yapılandırabileceğiniz anlamına gelmez.

Örneğin, bu dosyayı oluşturdum:

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

Ve bu ayarları içerir:

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

Debian Stretch ile açılmış Pi'de bir USB için grub-install /dev/sdaveya update-grubUSB için kullanılırken bu hala çalışmaz . Grub-uboot ve grub-efi-arm kullanarak bile grub-probe, kanonik yolu bulamayan hata var .

Sadece bu değil update-grub, aynı zamanda işletim sistemlerinin ne olduğunu görecek ve bilecek, ancak ilginç bir grub-installşekilde Debian işletim sisteminin USB'de olduğunu tanımıyor.

Misal

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#

İlginçtir, bir chroot oluşturup çalıştırabildiğimde update-grub, USB'nin kendisine açtığım işletim sisteminde olmama rağmen kendi işletim sistemini görmüyor!

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

Sadece Raspbian'ı görür. Bu yalnızca GRUB'u kabın içine kurmaya ve güncellemeye çalışırken, ancak kroottan çıktığımda olur.

Şimdi nasıl çalıştığını izleyin çünkü chroot dizinlerinin bağlantısını kesmedim:

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

Konteyner dışından aklınızda, ben bu komutu grub-ubootRaspbian yüklü ve ben debootstrapped Debian içeren USB üzerinde Grub ile çalıştırıyorum .

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#

Bu, Debian ARM için gayri resmi olarak mevcut görüntülerden biri kullanılarak gerçekleşmez , ancak açıkçası bu hala debootstrapping için mevcut olmayan bir özelleştirmedir.

Sorun giderme

Gerçekten sadece bir yol oluşturmanın daha iyi olduğu zamanlar vardır. Bir sonraki olasılık (ve muhtemel bir olasılık) basitçe GRUB yazmaktır. Ve bunun için sadece bu sayfada okuyacağım.

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

Bu konuda paylaşmak istediğim bir diğer şey de işe yarayabilecek bir çözüm, ancak microSD kartların çok hassas olduğunu fark etmek. Kendi Linux görüntülerimi oluşturdum ve bunu hızlı öğrendim. Yapılacak en iyi şey, mümkün olduğunca Qemu kullanmaktır, ancak eski bir bölüm tablosunu temizlemeye çalışmak sgdisk --zap-alliçin sürücüde çalışmayı deneyebilirsiniz .

sgdisk --zap-all /dev/sdd

Aslında, bazen ilk kez hata veriyorsa ve salt okunur bir hata değilse , tekrar çalıştırabilirsiniz ve sonunda tüm bölüm tabloları yeni veya eski olur.

Ve yapabilirsiniz Ahududu Pi taklit etmek QEMU kullanmak standart bir AMD / Intel tabanlı PC'de. Öneririm. Bu orijinal yazı ile ilgili daha fazla bilgi olduğunu biliyorum, ama bence bu hata türetilmiştir. Kap yaşı.


0

Grub'u yeniden yüklemek veya yüklemek için canlı bir USB veya başka bir kroot aracı kullanmaya çalışan herkesle mücadele eden herkes için - Bunu birkaç kez ele aldım ve istediğim halde daha önce belgelemeyi unuttum.

Karşılaştığınız sorun grub'un kaynak (/ önyükleme) veya hedef (sisteminiz ve bağlantınız /dev/sdaörneğin görebilir mi?) Veya her ikisi olarak bahsettiğiniz yola erişememesidir . Kroke hazırlanırken, kroot ortamında erişilebilen bağlama bağları oluşturursunuz veya bunu mount -t kullanarak kök içinde yaparsınız. Her iki şekilde de çevrimiçi olarak birçok rehber var.

/ Dev veya yalnızca / boot içindeki önyükleme dosyalarını içeren belirli bölümleri bağladığınızdan emin olmanız gerekir (örn. / Dev / sda1). / boot, ayrı bir bölüm veya / dizinindeki bir dizindir. Ayrıca, ayrı bir önyükleme bölümünüz yoksa, ancak önyükleme dosyalarıyla birlikte bir önyükleme dizininiz varsa (yalnızca bir bağlama noktası değil), yalnızca kök içeren bölümü bağlamanız gerekir. Daha sonra / root / boot'a bir şey bağlamanız gerekmez.

Ayrıca proc fileystem ve sys dosya sistemini bağladığınızdan emin olmalısınız, ancak gördüğüm her kılavuzda bu ikisi var. Az önce gördüm / dev bazen kaçırdı. İhtiyacınız olmayan bazı durumlar olabilir, ama onları bilmiyorum.

tl; dr: mount / dev'i bağladığınızdan emin olun


Neden bahsediyorsun chrootsoru about`` chroot`` değilken?
G-Man,

OP "linux nane içeren bir USB'den çalışıyor" diyor. Bu bir chroot olacak.
Daira Hopwood
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.