it-swarm.com.de

Grub-Probe: Fehler: Kanonischer Pfad von / cow konnte nicht ermittelt werden

Ich versuche, grub von einem USB-Laufwerk neu zu installieren. Ich führe folgendes aus:

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

Ich erhalte folgende Fehlermeldung:

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

kann jemand den Fehler erklären und wie man ihn löst?

Bearbeiten

Ich versuche, ein kaputtes Dual-Boot-System zu reparieren, das von einem USB-Stick mit Linux Mint ausgeführt wird.

15
elyashiv

Folge diesen Schritten:

  1. Starten Sie eine Live Linux-Sitzung.

  2. Hängen Sie die / - Partition Ihres installierten Betriebssystems in /mnt Ein.

    Sudo mount /dev/sda6 /mnt
    
  3. Richten Sie eine chroot -Umgebung ein:

    Sudo chroot /mnt
    
  4. Sie befinden sich jetzt in einer "gefälschten" Linux-Installation, die /mnt Als / Behandelt. Dies bedeutet, dass sich alle für GRUB] erforderlichen Dateien in /boot Befinden, wo das System sie erwartet, und dass Sie GRUB so installieren können, als ob Sie haben tatsächlich Ihr installiertes System ausgeführt:

    Sudo update-grub
    Sudo grub-install /dev/sda
    

Starten Sie nun neu und Sie sollten sehen, dass das Menü GRUB] normal angezeigt wird.

10
terdon

Wenn grub sagt, dass es den kanonischen Pfad von etwas nicht auflösen konnte, bedeutet dies, dass es nicht existiert oder realpath() fehlgeschlagen ist.

Versuchen Sie in diesem Fall:

$ realpath /cow
$ ls -la /cow

Wenn beide Befehle "Datei oder Verzeichnis können nicht gefunden werden" anzeigen, müssen Sie eine erstellen.

Wenn der zweite Befehl funktioniert, der erste jedoch nicht, überprüfen Sie, warum realpath() nicht funktioniert. Einer der Gründe kann sein, dass /proc Nicht gemountet ist. In einigen Implementierungen von libc wird /proc/self/fd Verwendet, um den kanonischen Pfad einer Datei abzurufen.

1
Sauron

Für alle, die damit zu kämpfen haben und versuchen, einen Live-USB oder andere Chroot-Methoden zu verwenden, um grub neu zu installieren oder zu installieren - ich habe mich ein paar Mal damit befasst und vergessen, es vorher zu dokumentieren, obwohl ich es beabsichtigt hatte.

Das Problem, mit dem Sie konfrontiert sind, ist, dass grub keinen Zugriff auf den Pfad hat, den Sie entweder als Quelle (/ boot) oder als Ziel (können Ihr System und chroot beispielsweise /dev/sda Sehen?) Oder beides haben. Wenn Sie sich auf das Chroot vorbereiten, erstellen Sie Bindungs-Mounts, auf die in der Chroot-Umgebung zugegriffen werden kann, oder Sie tun dies innerhalb der Chroot mit mount -t. Es gibt so viele Online-Anleitungen, die dies so oder so tun.

Sie müssen sicherstellen, dass Sie/dev oder nur die spezifischen Partitionen binden, die die Startdateien in/boot enthalten (z. B./dev/sda1)./boot ist entweder eine separate Partition oder ein Verzeichnis in/Die Chroot benötigt Zugriff auf das Laufwerk, auf dem Sie grub (neu) installieren. Führen Sie daher fdisk -l in der Chroot aus, um sicherzustellen, dass das in der Ausgabe aufgeführte Gerät angezeigt wird. Beachten Sie auch, dass Sie nur die Partition bereitstellen müssen, die root enthält, wenn Sie keine separate Boot-Partition haben, aber ein Boot-Verzeichnis in/root mit den Boot-Dateien (nicht nur einen Mount-Punkt). Sie müssen dann nichts an/root/boot mounten.

Sie müssen auch sicherstellen, dass Sie das proc-Dateisystem und das sys-Dateisystem binden, aber jede Anleitung, die ich gesehen habe, hat diese beiden. Ich habe gerade gesehen/Entwickler manchmal verpasst. Es kann Fälle geben, in denen Sie es nicht benötigen, aber ich kenne sie nicht.

tl; dr: Stellen Sie sicher, dass Sie mount/dev binden

0
user327540

Ich bekomme diesen Fehler auch und ich glaube nicht, dass er in einer Chroot passiert.

Hintergrund

Ich denke, dies ist, wenn systemd den Pfad nicht finden kann, weil er in einem Verzeichnis gemountet ist. Der Unterschied besteht also darin, dass Sie beim Einrichten einer Chroot bereits den Zugriff auf Hardware, einschließlich Laufwerke, konfigurieren.

Obwohl Sie diesen Zugriff in Systemd konfigurieren können, bedeutet dies nicht, dass Sie die Berechtigungen für diese Laufwerke auf dieselbe Weise konfigurieren können.

Zum Beispiel habe ich diese Datei erstellt:

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

Und es enthält diese Einstellungen:

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

Dies funktioniert immer noch nicht, wenn grub-install /dev/sda Oder update-grub Für einen mit Debian Stretch debootstrapped USB on Pi verwendet wird. Selbst bei Verwendung von grub-uboot und grub-efi-arm gibt es immer noch den Fehler, dass grub-probe Den kanonischen Pfad nicht finden kann.

Nicht nur das, aber obwohl update-grub Die Betriebssysteme sehen und wissen wird, erkennt grub-install Interessanterweise nicht, dass das Debian-Betriebssystem auf USB ist.

Beispiel

[email protected]:/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.
[email protected]:/home/pi#

Interessant, wenn ich eine Chroot erstelle und update-grub Ausführen kann, obwohl ich auf dem Betriebssystem bin, das ich auf den USB selbst debootstrappt habe, sieht es kein eigenes Betriebssystem!

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

Es sieht nur Raspbian. Dies geschieht nur, wenn versucht wird, GRUB im Container) zu installieren und zu aktualisieren, aber wenn ich die Chroot verlasse.

Sehen Sie, wie es jetzt funktioniert, weil ich die Chroot-Verzeichnisse nicht ausgehängt habe:

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

Wohlgemerkt, ich führe diesen Befehl von außerhalb des Containers aus, wobei grub-uboot Auf Raspbian installiert ist und kein Grub auf dem USB mit debootstrapped Debian.

[email protected]:/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
[email protected]:/mnt#

Dies geschieht nicht mit einem der inoffiziell verfügbaren Images für Debian ARM , aber dies ist offensichtlich immer noch eine Anpassung, die für das Debootstrapping noch nicht verfügbar ist.

Fehlerbehebung

Es gibt wirklich Zeiten, in denen es besser ist, nur einen Pfad zu erstellen. Die einzige nächste Möglichkeit (und eine wahrscheinliche) besteht darin, einfach GRUB zu schreiben. Und dafür werde ich nur auf dieser Seite lesen.

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

Eine andere Sache, die ich über dieses Problem mitteilen möchte, ist eine Lösung, die möglicherweise funktioniert, aber erkennt, dass microSD-Karten sehr empfindlich sind. Ich habe meine eigenen Linux-Images erstellt und dies schnell gelernt. Verwenden Sie am besten Qemu, wann immer Sie können. Um jedoch zu versuchen, eine alte Partitionstabelle zu löschen, können Sie versuchen, sgdisk --zap-all Auf dem Laufwerk auszuführen.

sgdisk --zap-all /dev/sdd

In der Tat, manchmal, wenn es das erste Mal einen Fehler gibt und es kein schreibgeschützter Fehler ist, können Sie es erneut ausführen und es wird schließlich alles die Partitionstabellen neu oder alt.

Und Sie können verwenden Sie Qemu, um Raspberry Pi zu emulieren auf einem Standard-AMD/Intel-basierten PC. Ich würde es empfehlen. Ich weiß, dass dies mehr Informationen sind als der ursprüngliche Beitrag, aber ich denke, dass dieser Fehler wahrscheinlich so abgeleitet wird. Es ist das Containerzeitalter.

0
w3techie

Basierend auf dem, was geschrieben wurde, scheint es, als würden Sie versuchen, GRUB to/dev/sda. Sie möchten die Festplatte nicht mounten) zu installieren.

Sie suchen wahrscheinlich: grub-install /dev/sda

GRUB Manpage als Referenz, oder Sie können man grub-install von Ihrem System: http://linux.die.net/man/8/grub-install

0
tamarintech