fehlerhaften Boot-Prozess fixen
Manchmal passiert es dann doch und die Dreckskiste will einfach nicht mehr hochfahren!
Doch halt! Ist es nicht gerade die Stärke von Linux, auf genau solche Situationen reagieren zu können? Ein Griff in die PATH Variable einer Linux Distribution bietet für viele Notfälle das richtige Werkzeug. Und so gehört auch die chroot-Umgebung definitiv zum Linux-Rescue-Einmaleins.
‚chroot‘ ist eine Funktion um das root-Verzeichnis zu ändern. In erster Linie kann man sich damit eine Sandbox bauen um sicherheitskritische Features zu testen. Es lässt sich damit aber auch Änderungen an der Software-Ausstattung durchführen, Dateiänderungen vornehmen oder Fehlerdiagnose betreiben.
In meinem Fall Looped der Rechner wegen einer falsch-konfigurierten Anwendung vor sich hin und kommt alleine nicht mehr aus dem Quark.
Um diesem Problem nun Herr zu werden, bleibt nichts anderes übrig als mit Hilfe einer Live-CD in ein funktionierendes Ubuntu zu booten.
Dort angekommen, starten wir ein Terminal und treffen einige Vorbereitungen um unsere chroot-Umgebung ans Laufen zu bringen. /mnt soll unser Ziel sein. Zunächst mounten wir die Festplatte, von der sich nicht booten lassen will:
In meinem Beispiel handelt es sich um eine LVM-Festplatte, daher kann die zu mountende Adresse abweichen und z.B. auch so lauten:
mount /dev/sda5 /mnt
Anschließend benötigen wir noch 3 weitere Unterverzeichnisse: /proc, /sys, und /dev
mount -t proc /proc /mnt/proc/
mount -o bind /sys /mnt/sys/
mount -o bind /dev /mnt/dev/
Es folgt eine kurze Erklärung im Schnelldurchlauf:
/proc ist ein Dateisystem und beinhaltet System- und Prozessparameter zwischen Kernel und Hardware.
/sys ist ebenfalls ein Dateisystem und beinhaltet Informationen über das System samt Komponenten, sprich Hardware.
/dev beinhaltet auch Informationen über die Hardware und bildet diese in Form von Gerätedateien ab.
Normalerweise würde der ‚mount‘-Befehl ganz klassisch ein Gerät oder Verzeichnis an Ort und Stelle lediglich einhängen. Die ‚-o bind‘ Option hingegen überträgt das angegebene Verzeichnis bzw. Dateisystem und überschreibt es im Ziel.
Ist alles erledigt, können wir mit …
sudo chroot /mnt
… ins /mnt als neues root-Verzeichnis wechseln. Nun arbeiten wir auf der Maschine quasi, als hätten wir von unserer loopenden Festplatte gestartet.
Da wir anhand der recht aussagekräftigen Meldungen während des Boot-Vorgangs bereits wissen, dass der SSSD-Dienst der Bösewicht ist, schalten wir diesen nun vorerst aus:
systemctl disable sssd
Außerdem entfernen wir den Dienst sicherheitshalber einfach noch komplett:
apt-get purge sssd
Anschließend verlassen wir die chroot-Umgebung mit …
exit
… und starten die Maschine neu.
Wieder drin! Nach erneutem Systemstart flimmert auch schon wieder die Anmeldemaske über den Bildschirm.
Wie man sieht, ist die Wiederherstellung eines verhunzt-konfigurierten Linux keine Raketenwissenschaft.