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/systemd-nspawn@.service.d/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 bei der Verwendung grub-install /dev/sda
oder update-grub
für ein USB - auf Pi debootstrapped mit Debian Stretch. Selbst bei Verwendung von grub-uboot und grub-efi-arm gibt es immer noch diesen Fehler, der grub-probe
den kanonischen Pfad nicht finden kann.
Nicht nur das, sondern update-grub
wird auch sehen und wissen, was die Betriebssysteme sind, aber interessanterweise grub-install
erkennt das Debian-Betriebssystem nicht auf USB.
Beispiel
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#
Interessant, wenn ich eine Chroot erstelle und ausführen kann update-grub
, obwohl ich auf dem Betriebssystem bin, das ich auf den USB-Stick debootstrapped habe, sieht es kein eigenes Betriebssystem!
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:/#
Es sieht nur Raspbian. Dies geschieht nur, wenn versucht wird, GRUB im Container zu installieren und zu aktualisieren, aber wenn ich die Chroot beende.
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
Von außerhalb des Containers grub-uboot
wohlgemerkt , ich führe diesen Befehl mit installiertem auf Raspbian und keinem Grub auf dem USB aus, der debootstrapped Debian enthält.
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#
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, sie 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 werden schließlich alle Partitionstabellen neu oder alt.
Mit Qemu können Sie Raspberry Pi auf einem Standard-AMD / Intel-basierten PC emulieren . 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.
sda6
? Hilft meine Antwort hier ?