Manjaro Retten

Nach einem Update wurde mein Manjaro aus dem Boot-Menu entfernt und somit konnte es nicht mehr gestartet werden.

Am einfachsten funktioniert die Rettung mit einer Live-CD von installierten Linux-System, was in meinem Fall ein Manjaro ist.

Da meine Festplatten verschlüsselt sind, können diese nicht einfach gemountet werden, sondern müssen erst entschlüsselt werden. Wenn eine graphische Live-CD gestartet wurde, kann diese direkt über den vorhanden Dateiexplorer durchgeführt werden. Dafür muss die verschlüsselte Festplatte angewählt werden und im aufgehenden Abfragedialog das Passwort eingegeben werden. Um die geöffneten Mapper zu finden kann einer der folgenden Befehle verwendet werden:

dmsetup ls
ls /dev/mapper/

Sollte immer die Festplatte direkt mit gemountet werden, kann man in der etc/crypttab die mapper-GUids ermittelt werden, um den cryptsetup-Befehl (luksOpen bzw. nur noch open) auszuführen. Dafür benötigt man den Namen (erste Spalte) aus der Datei. In der zweiten Spalte ist das Device benannt. Ist dort der Pfad zum Device hinterlegt, muss im nachfolgenden Befehl der Teil mit UUID=… durch diesen ausgetauscht werden:

sudo cryptsetup luksOpen UUID=4d76a98e-584c-4499-9643-1b6ce49eb61c luks-4d76a98e-584c-4499-9643-1b6ce49eb61c

Dieser Befehl muss für alle notwendigen Partitionen durchgeführt werden. Reine Datenplatten sind für die Wiederherstellung des System nicht zwingend notwendig und können ignoriert werden.

Nun kann das Device auf einen Ordner gemountet werden. In meinen Fall verwende ich BTRFS und muss daher noch die Option für das Subvolumen mit angeben, bei anderen Dateisystem einfach diesen Teil weglassen:

sudo mount -o subvol=@ /dev/mapper/luks-4d76a98e-584c-4499-9643-1b6ce49eb61c /mnt/

Weitere Pfade sind nicht notwendig, da diese mach dem Change-Root durch ein Mounten aller Einträge übernommen werden, wie es hier zu sehen ist:

Nun werden die Befehle in folgender Reihenfolge ausgeführt:

# Root-Verzeichnis wechseln
manjaro-chroot /mnt/
# Eie restlichen Festplatten nachmounten
mount -a

Nun ist es wichtig zu prüfen, ob ein Kernel im boot-Verzeichnis liegt. Wenn nicht, muss dieser erst erzeugt werden:

mkinitcpio -P

Die Ausgabe sollte auf Fehler geprüft werden und nochmal das boot-Verzeichnis prüfen. Dies solange wiederholen bis der Kernel sauber abliegt.

ACHTUNG: Wenn kein Kernel abgelegt wird, könnte es auch daran liegen, dass die Partition voll ist.

Nun soll der Bootloader wiederhergestellt werden, in unserem Fall grub:

sudo update-grub

Danach ist es sinnvoll, in boot/grub/grub.cfg im Bereich “10_Linux” zu prüfen, ob der Eintrag für das Booten vorhanden ist. Sollten sie ein Dual-Boot-System besitzen, werden die weiteren Betriebssystem meist nicht erkannt. Dies muss vorerst ignoriert werden, und wird dadurch behoben, dass sie nun in ihr System booten und den Befehl erneut ausführen. In diesem Fall werden die zusätzlichen System wieder mit angezeigt.

FAQ

Probleme mit dem Default-Subvolume

Wenn es Probleme mit Timeshift gibt, kann es daran liegen, dass die Parent-ID nicht 5 ist. Die ID 5 entspricht Original Top-Level Container der mit dem erstellen des Dateisystems erzeugt wird. Wenn die ID explizit angepasst wurde, dann die Nachfolgenden Kommandos ignorieren.

Um dies zu prüfen, kann dies wie folgt ermittelt werden:

# Ermittelt die Default-ID
sudo btrfs subvol get-default /
# Ermittelt die Liste der vorhanden Subvolume, dabei steht nach "top level" die id
sudo btrfs subvol list /

Sollte der Eintrage nicht 5 sein, kann dieser wie folgt angepasst werden:

sudo btrfs subvol set-default 5

Anzeige des freien Speicherplatz bei btrfs

Manchmal kann es auch sein, dass das System nicht mehr bootet, weil der Speicherplatz auf der Festplatte beim Update ausgegangen ist. Hierbei kommt es häufig zu unterschiedlichen Werten zwischen dem df-Befehl und der Dateigrößen im Dateiexplorer. Diese liegt daran, dass mit df nur der komplette Inhalt der Partition angezeigt wird. Dies schließt den Speicher aller Snapshots ebenfalls mit ein. Um den reinen Speicherplatz im Dateisystem zu ermitteln, muss hier direkt mit dem btrfs-Befehl gearbeitet werden.

# Zeige die Übersicht für einen Ordner an (die Option -s definiert dass nur die Summe angezeigt wird)
sudo btrfs filesys du -s /home
# Zeige die Verwendung an
sudo btrfs filesys df /