webentwicklung-frage-antwort-db.com.de

"Root-Gerät kann nicht gefunden werden" bei einer neuen ArchLinux-Installation

Ich habe die neueste Version von ArchLinux (2014.06.01) auf einem MacBook Pro 8,1 (15 ", falls dies hardwarebezogen ist) installiert. Folgen Sie dazu den Anweisungen im Official Install Guide . Wenn Sie jedoch versuchen, das neu installierte System neu zu starten, gelangt ich in eine Wiederherstellungs-Shell:

ERROR: device 'UUID=<snip>' not found. Skipping fsck.
ERROR: Unable to find root device 'UUID=<snip>'.
You are being dropped to a recovery Shell
    Type 'exit' to try and continue booting
sh: can't access tty: job control turned off
[rootfs /]# 

(Ich habe die UUID entfernt, weil ich sie nicht abtippen wollte, aber sie ist dieselbe, die mir von blkid (von der Installationsdiskette) für die Partition gegeben wurde, auf der ArchLinux installiert ist.)

AndereonlineQuellen weist darauf hin, dass dies auf ein veraltetes pacman-, udev-, filesystem- oder linux-Paket zurückzuführen ist. Sie beschreiben dieses Problem jedoch erst nach einem Kernel-Update von einem funktionierenden System, nicht nach einer Neuinstallation. Ich habe diese Pakete aus der Arch-chroot-Umgebung zwangsweise neu installiert, während sie auf der Installationsdiskette gebootet wurden, aber das hat die Situation nicht geändert.

Stattdessen zeigt ein wenig Experimentieren mit meinem grub.cfg, dass alles, worüber man sich beschwert, der root -Parameter des linux-Befehls ist, der die zu verwendende vmlinuz -Datei auswählt. In der Tat gibt das Ändern von root=UUID=<snip> in root=LABEL=ArchLinux oder root=/dev/sda8 (beide beschreiben, wo ArchLinux installiert ist und ich die zweite Version zuvor mit einer anderen Distribution erfolgreich verwendet habe) Unable to find root device 'LABEL=ArchLinux' bzw. Unable to find root device '/dev/sda8'. Außerdem scheint GRUB in der Lage zu sein, die Partition über die UUID zu finden, nur der Linux-Kernel beschwert sich darüber, dass sie nicht gefunden wurde, da die ursprüngliche Ramdisk ordnungsgemäß geladen ist (dh dies ist kein GRUB - Fehler wie beschrieben hier aber eher ein Linux-Fehler).

Als Randnotiz: Die Wiederherstellungsshell ist stark eingeschränkt, und die Standardausgabe scheint nicht ordnungsgemäß zu funktionieren. Trotzdem funktioniert ls, und das Auflisten von Dateien zeigt ein grundlegendes (temporäres) Dateisystem, aber alle Plattengeräte scheinen im /dev zu fehlen. Ich weiß jedoch nicht, ob dies Teil des Fehlers ist oder nicht.

Dies ist ähnlich, aber nicht dasselbe wie Linux findet beim Booten kein Root-Dateisystem , da die Partition von Anfang an ext4 war. Ebenfalls nicht genau das gleiche, aber möglicherweise relevant ist ArchLinux kann unter Macbook Pro 7.1 nicht gestartet werden - fällt in die Wiederherstellungs-Shell . Dort wird es jedoch in eine ramfs-Shell anstelle einer rootfs-Shell abgelegt, und die Fehlermeldungen unterscheiden sich .

36
hlt

Anstatt mit dem normalen Image zu booten, habe ich die Fallback-Version verwendet und es geschafft, das System zu booten. Es stellte sich heraus, dass Linux keine Laufwerke erkennen konnte, da der Hook blockmkinitcpio (verantwortlich für das Blockieren von Geräten) im Standard-Image fehlte. Dies lag daran, dass es nach autodetect in /etc/mkinitcpio.conf eingefügt wurde. Um dies zu beheben, muss die Zeile HOOKS=... in dieser Datei so geändert werden, dass block vor autodetect steht.

Vor dem Update:

HOOKS="base udev autodetect block modconf filesystems keyboard fsck"

Nach dem Update:

HOOKS="base udev block autodetect modconf filesystems keyboard fsck"

Wenn Sie mkinitcpio -p linux ausführen, um die initramfs neu zu generieren, wurde das Problem dauerhaft behoben.

33
hlt

Ich bin auf ein ähnliches Problem gestoßen, aber mit einem anderen Setup. Ich verwende ArchLinux in einer virtuellen Maschine und mein Bootloader ist Syslinux. Ich habe deinen Trick benutzt, um die Reihenfolge der Kernel-Hooks zu ändern, bin aber trotzdem in einer rootfs-Shell gelandet.

Was das Problem für mich behoben hat, war das Ändern der Zeile APPEND in meinem syslinux.cfg von

APPEND root=UUID=<snip>

zu

APPEND root=PARTUUID=<snip>

Sie können die PARTUUID einfach an den syslinux.cfg anhängen, indem Sie einen Befehl wie blkid | grep sda1 | awk '{ print $7 }' >> /boot/syslinux/syslinux.cfg verwenden, vorausgesetzt, Ihre Root-Partition ist /dev/sda1.

Anschließend können Sie Ihren bevorzugten Texteditor verwenden, um die Linie an die entsprechende Stelle zu verschieben.

BEARBEITEN: Ich habe gerade erkannt, dass die Spaltennummer im kleinen awk-Skript variieren kann. Schauen Sie sich die Ausgabe also besser an, bevor Sie sie in syslinux.cfg einfügen.

1
IlikePepsi