Hier sind einige Ressourcen:
"Change root" oder "chrooting" ist eine Methode zum Vergrößern eines Teils Ihres Dateisystems, sodass beispielsweise auf das verwiesen /path
wird, 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 /boot
Verzeichnis 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.conf
es, 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 /path
beziehen sich auf das, was früher war /mnt/path
.
Wenn Sie mit GRUB arbeiten, müssen Sie sicherstellen, dass Ihre /etc/mtab
Datei 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 mount
Befehl ohne Parameter aus, um eine Erinnerung an alle aktuellen Einhängepunkte zu erhalten .
Endlich:
reboot
chroot.sh
im 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.SHELL=/bin/bash chroot /mnt
Wenn 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 ./run
heutzutage auch mit montieren mussmount --bind /run /mnt/run
.