Wie kann chroot auf die Wiederherstellung einer fehlerhaften Linux-Installation vorbereitet werden?

88018
quack quixote

Diese Frage bezieht sich auf häufig gestellte Fragen. Das Verfahren wird häufig erwähnt oder mit einem externen Standort verknüpft, jedoch nicht oft klar und richtig angegeben. Mit dem Ziel, nützliche Informationen an einem Ort zusammenzufassen, soll mit dieser Frage eine klare und korrekte Referenz für dieses Verfahren geschaffen werden.


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

In vielen Situationen kann die Reparatur einer defekten Linux-Installation am besten von der Installation aus erfolgen. Aber wenn das System nicht booten kann, wie können Sie es von innen heraus beheben?

Nehmen wir an, Sie schaffen es, in ein alternatives System zu booten. Dort angekommen, müssen Sie auf Ihre fehlerhafte Installation zugreifen, um sie zu beheben. Viele Wiederherstellungs- How-Tos-Geräte empfehlen die Verwendung von chroot, um Programme so auszuführen, als würden Sie tatsächlich mit der fehlerhaften Installation gebootet.

  • Was ist das grundsätzliche Verfahren?
  • Gibt es anerkannte Best Practices, die zu befolgen sind?
  • Welche Variablen müssen berücksichtigt werden, um die grundlegenden Vorbereitungsschritte an eine bestimmte Wiederherstellungsaufgabe anzupassen?

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

43

1 Antwort auf die Frage

64
dubiousjim

Hier sind einige Ressourcen:

"Ändern von root" oder "chrooting" ist eine Methode zum Vergrößern eines Teils Ihres Dateisystems, sodass zum Beispiel auf das verwiesen /pathwird, auf das zuvor zugegriffen wurde /mnt/path. Das "root" im Ausdruck "chroot" bezieht sich auf das Root-Dateisystem /und nicht auf den Root-Benutzer. (Normalerweise benötigen Sie jedoch Root-Benutzerrechte, um chroot zu werden.)

Vorbereitung

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

  • Ihre Festplatte befindet sich unter / dev / sda1 und der Dateityp ist 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, das Sie eingeben möchten (z. B. eine 32-Bit-Installation auf Ihrer Festplatte), übereinstimmen. Sie können die Architektur bestimmen, mit der Sie gestartet haben uname -m.

  • Stellen Sie sicher, dass alle erforderlichen Kernel-Module geladen wurden.

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

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

Durchführen der Chroot

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 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 auch diese Partition einhängen. Wenn es sich um / dev / sda2 handelt und der Dateityp ext2 ist, dann machen Sie folgendes:

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

Ähnlich für alle anderen Teile Ihres Dateisystems ( /var, /usr), die sich auf separaten Partitionen befinden, auf die Sie jedoch zugreifen müssen. Im Allgemeinen, wenn Sie chrooting sind, um etwas zu beheben, benötigen Sie keinen Zugriff auf / home, so dass Sie sich nicht darum kümmern müssen.

(Es ist auch möglich, Dateisysteme zu mounten, nachdem Sie chrootiert haben, es ist jedoch klüger, dies vorher zu tun. Der Grund ist, dass die Außen- / Kernel-Umgebung die eingehängten Dateisysteme nicht kennt, wenn Sie es danach tun Wenn Sie sie vor dem Beenden der Chroot-Datei hochhängen, kann das System sie auch beim Herunterfahren nicht neu starten. Dies könnte die 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 

Nun können Sie in das gemountete Dateisystem wechseln:

chroot /mnt /bin/bash 

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

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

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

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

An diesem Punkt kann es auch hilfreich sein, Folgendes zu tun:

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

Mach deine Drecksarbeit

An dieser Stelle können Sie die Fehlerbehebung durchführen, die Sie ausführen müssen:

  • Starten Sie GRUB erneut auf den MBR Ihrer Festplatte
  • ein vergessenes Passwort zurücksetzen
  • ein Kernel-Upgrade durchführen (oder ein Downgrade durchführen)
  • Erstellen Sie Ihre Initramdisk neu
  • Korrigieren Sie Ihre / etc / fstab
  • Pakete mit dem Paketmanager erneut installieren
  • was auch immer

Aufräumen

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

exit 

Heben Sie die Bereitstellung aller gemounteten Partitionen auf:

umount /mnt/boot # if you mounted this or any other separate partitions umount /mnt/ 

Versuchen Sie schließlich, Ihre Festplatte abzuhängen:

umount /mnt 

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

  • Ein Programm wurde in der Chroot ausgeführt.

  • Oder häufiger: Auf diesem Mount existiert noch ein Mount-Punkt. Zum Beispiel ist / mnt / usr beim Versuch, das Aufhängen von / mnt aufzuhängen, noch eingehängt.

Im letzteren Fall müssen Sie zuerst den fehlerhaften Mount-Punkt abhängen. Führen Sie mountkeine Parameter aus, um eine Erinnerung an alle aktuellen Einhängepunkte zu erhalten .

Endlich:

reboot 
Zur Vorbereitung neige ich dazu, ein Skript namens "chroot.sh" in der Wurzel jedes Systems, das ich verwende, zu hinterlassen, dessen Inhalt mehr oder weniger dem oben genannten entspricht. Wenn ich von einer LiveCD oder etwas anderem in dieses System chroot muss, mounte ich einfach das Root-Dateisystem und führe das Chroot-Skript aus. Kein hektisches Googeln nach den richtigen Befehlen. Ryan Thompson vor 14 Jahren 9
Sie, mein Herr, haben meinen Speck gerettet - brillantes Schreiben. In solchen Situationen wünsche ich mir, dass SO eine + 1000-Taste hätte. zelanix vor 8 Jahren 3
Verwenden Sie folgendes: `SHELL = / bin / bash chroot / mnt`, wenn livecds Standard SHELL nicht in der chroot-Umgebung ist (systemrescuecd's defalut zsh ist ein Beispiel), um beispielsweise`! `In Vim zu reparieren. Alois Mahdal vor 8 Jahren 1