Wie bereite ich chroot richtig vor, um eine fehlerhafte Linux-Installation wiederherzustellen?

52

Diese Frage bezieht sich auf häufig gestellte Fragen. Das Verfahren wird häufig erwähnt oder mit Offsite verknüpft, wird jedoch häufig nicht klar und richtig angegeben. Um nützliche Informationen an einem Ort zu konzentrieren, soll mit dieser Frage ein klarer, korrekter Bezug für dieses Verfahren hergestellt werden.


Was sind die richtigen Schritte, um eine Chroot- Umgebung für ein Wiederherstellungsverfahren vorzubereiten ?

In vielen Situationen ist es am besten, eine fehlerhafte Linux-Installation innerhalb der Installation zu reparieren. Aber wenn das System nicht bootet, wie können Sie es von innen beheben?

Angenommen, Sie schaffen es, ein alternatives System zu starten. Dort müssen Sie auf Ihre defekte Installation zugreifen, um sie zu reparieren. Viele Wiederherstellungs- How-Tos empfehlen die Verwendung von chroot , um Programme auszuführen, als ob Sie tatsächlich mit der fehlerhaften Installation gebootet wären.

  • Was ist die grundlegende Vorgehensweise?
  • Gibt es akzeptierte Best Practices, die befolgt werden müssen?
  • Welche Variablen müssen berücksichtigt werden, um die grundlegenden Vorbereitungsschritte an eine bestimmte Wiederherstellungsaufgabe anzupassen?

Da dies Community-Wiki ist, können Sie diese Frage auch bearbeiten, um sie zu verbessern.

Quacksalber
quelle

Antworten:

72

Hier sind einige Ressourcen:

"Change root" oder "chrooting" ist eine Methode zum Vergrößern eines Teils Ihres Dateisystems, sodass beispielsweise auf das verwiesen /pathwird, worauf früher zugegriffen wurde /mnt/path. Der Begriff "root" im Ausdruck "chroot" bezieht sich auf das Root-Dateisystem /und nicht auf den Root-Benutzer. (In der Regel benötigen Sie jedoch Root-Benutzerrechte, um chroot auszuführen.)

Vorbereitung

  • Alle Schritte in diesem Handbuch müssen als Root-Benutzer ausgeführt werden.

  • Angenommen, Ihre Festplatte befindet sich unter / dev / sda1 und der Dateityp lautet ext3. Wenn Sie den Speicherort und den Dateityp Ihrer Festplatte nicht kennen, lesen Sie die Ausgabe von fdisk -l.

  • Stellen Sie sicher, dass die Architekturen des Systems, in das Sie gebootet haben (z. B. eine 32-Bit-LiveCD) und das System, in das Sie einsteigen möchten (z. B. eine 32-Bit-Installation auf Ihrer Festplatte), übereinstimmen. Sie können die Architektur bestimmen, mit der Sie gebootet haben uname -m.

  • Stellen Sie sicher, dass alle benötigten Kernelmodule geladen wurden.

  • Richten Sie Ihr Netzwerk ein, wenn Sie es benötigen (z. B. um aktualisierte Pakete zu installieren).

  • Initialisieren Sie gegebenenfalls Ihre Swap-Partition (z swapon /dev/sda3. B. ).

Die Chroot durchführen

cd /
mount -t ext3 /dev/sda1 /mnt
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev

Wenn sich Ihr /bootVerzeichnis auf einer anderen als Ihrer Partition /befindet und Sie Dateien darauf bearbeiten möchten (z. B. wenn Sie mit GRUB arbeiten, ein Kernel-Upgrade durchführen usw.), müssen Sie diese Partition auch bereitstellen. Wenn es sich um / dev / sda2 handelt und der Dateityp ext2 ist, führen Sie Folgendes aus:

mount -t ext2 /dev/sda2 /mnt/boot

Ähnliches gilt für alle anderen Teile Ihres Dateisystems ( /var, /usr), die sich auf separaten Partitionen befinden, auf die Sie jedoch Zugriff benötigen. Im Allgemeinen brauchen Sie keinen Zugriff auf / home, wenn Sie chrooten, um etwas zu reparieren, sodass Sie sich nicht darum kümmern müssen.

(Es ist auch möglich, Dateisysteme nach dem Chroot zu mounten, aber es ist klüger, dies vorher zu tun. Der Grund dafür ist, dass die Umgebung außerhalb des Kernels die gemounteten Dateisysteme nicht kennt, wenn Sie dies vergessen mounten Sie sie, bevor Sie die Chroot beenden. Das System kann sie auch beim Herunterfahren nicht mounten. Dies könnte diese Dateisysteme beschädigen.)

Wenn Sie Ihr Netzwerk eingerichtet haben und es im Chroot-System verwenden möchten, kopieren Sie /etc/resolv.confes, damit Sie Domänennamen auflösen können:

cp -L /etc/resolv.conf /mnt/etc/resolv.conf

Jetzt können Sie in das bereitgestellte Dateisystem wechseln:

chroot /mnt /bin/bash

(Wenn dies zu einem Fehler führt chroot: cannot run command '/bin/bash': Exec format error, weist dies normalerweise darauf hin, dass Sie mit einer Architektur (z. B. x86_32) gebootet haben und versuchen, in eine andere zu chrooten (z. B. x86_64). Die Lösung besteht darin, eine LiveCD zu verwenden, die dieselbe Architektur wie das gewünschte System aufweist chroot in.)

Zu diesem Zeitpunkt führen Sie den Kernel, mit dem Sie gebootet haben, noch aus, aber alle Pfade /pathbeziehen sich auf das, was früher war /mnt/path.

Wenn Sie mit GRUB arbeiten, müssen Sie sicherstellen, dass Ihre /etc/mtabDatei auf dem neuesten Stand ist:

grep -v rootfs /proc/mounts > /etc/mtab

An dieser Stelle kann es auch hilfreich sein, Folgendes zu tun:

source /etc/profile
export PS1="(chroot) $PS1"  # add a reminder to your prompt

Mach deine Drecksarbeit

Zu diesem Zeitpunkt können Sie alle erforderlichen Schritte zur Fehlerbehebung ausführen:

  • Setzen Sie GRUB erneut auf den MBR Ihrer Festplatte
  • ein vergessenes Passwort zurücksetzen
  • Kernel-Upgrade (oder Downgrade) durchführen
  • Erstellen Sie Ihre Initramdisk neu
  • Repariere deine / etc / fstab
  • Installieren Sie Pakete mit Ihrem Paketmanager neu
  • wie auch immer

Aufräumen

Wenn Sie fertig sind, stellen Sie sicher, dass alle laufenden Programme gestoppt wurden. Dann verlassen Sie die Chroot:

exit

Hängen Sie jetzt alle bereitgestellten Partitionen aus:

umount /mnt/boot # if you mounted this or any other separate partitions
umount /mnt/{proc,sys,dev}

Versuchen Sie zum Schluss, die Festplatte abzumelden:

umount /mnt

Wenn Sie die Fehlermeldung erhalten, dass / mnt (oder eine andere Partition) ausgelastet ist, kann dies eine der folgenden zwei Ursachen haben:

  • Ein Programm wurde in der Chroot laufen gelassen.

  • Oder häufiger: Auf diesem Mount ist noch ein Mountpunkt vorhanden. Zum Beispiel ist / mnt / usr immer noch aktiviert, wenn versucht wird, / mnt zu deaktivieren.

In letzterem Fall müssen Sie den fehlerhaften Einhängepunkt einfach zuerst aushängen. Führen Sie den mountBefehl ohne Parameter aus, um eine Erinnerung an alle aktuellen Einhängepunkte zu erhalten .

Endlich:

reboot
dubiousjim
quelle
10
Zur Vorbereitung hinterlasse ich in der Regel ein Skript chroot.shim Stammverzeichnis jedes von mir verwendeten Systems, dessen Inhalt mehr oder weniger mit dem oben genannten übereinstimmt. Wenn ich von einer Live-CD oder so etwas in dieses System chrooten muss, mounte ich einfach das Root-Dateisystem und führe das chroot-Skript aus. Kein hektischeres Googeln nach den richtigen Befehlen.
Ryan Thompson
4
Sie, Sir, haben meinen Speck gerettet - eine brillante Zusammenfassung. In solchen Situationen wünschte ich mir SO eine + 1000-Taste.
Zelanix
1
Verwenden Sie dies: SHELL=/bin/bash chroot /mntWenn sich die Standard-SHELL von livecd nicht in der Chroot-Umgebung befindet (die Standard-zsh von systemrescuecd ist ein Beispiel), um sie z !. B. in Vim zu beheben .
Alois Mahdal
Ich habe herausgefunden, dass man /runheutzutage auch mit montieren muss mount --bind /run /mnt/run.
27.