[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:chroot: chroot bedienen] }}} [[Inhaltsverzeichnis(2)]] '''chroot''' kann benutzt werden, um von einer Live-DVD/Live-Stick in die Umgebung eines installierten Systems einzugreifen, beispielsweise für eine Reparatur. Jedes Live-System ist zur Reparatur geeignet - ob ein [:Desktop-Live-Medium :], Knoppix oder ein von einem USB-Stick gebootetes Linux. Dieser Artikel beschreibt, wie man den Chroot-Systemwechsel mit [#Zusaetzliche-Schritte zusätzlichen Schritten] vollzieht, so dass ein vollständiger Zugriff auf das System für Reparaturen möglich ist. Für einen einfachen Zugriff, zum Beispiel um die Ausgabe eines einzelnen Befehls zu überprüfen, können ggf. einzelne Schritte, wie das Einbinden von '''/sys''' und '''/proc''' ausgelassen werden. {{{#!vorlage Hinweis Alle folgenden Befehle beziehen sich auf den Einsatz von Ubuntu bzw. eines Derivats als Live-System. Für andere Systeme können bestimmte Befehle oder Pfade ggf. abweichen. }}} = Voraussetzungen = * Es ist wichtig, dass die Systemarchitektur des Live-Systems mit der des installierten Ubuntu-Systems übereinstimmt. Es ist also nicht ohne weiteres möglich, sich mit Chroot und einer 32-Bit-Live-CD an einem 64-Bit-System anzumelden. Wird die gleiche CD wie zur Installation genutzt, so sollte es keine Probleme geben. Bei Unstimmigkeiten zw. Architektur und Live-System erhält man eine Fehlermeldung der folgenden Art: {{{ chroot: Befehl >>/bin/bash" konnte nicht ausgeführt werden: Fehler im Format der Programmdatei }}} * Dieser Artikel geht von einer Ubuntu-Standard-Installation als erstem System auf dem Rechner aus. Daher wird die Festplatte mit dem installierten Ubuntu als '''/dev/sda''' angesprochen, wofür bei anderer Installation ggf. andere Bezeichnungen anzugeben sind. Die nötigen Techniken zur Bedienung von '''chroot''' werden als bekannt vorausgesetzt [1]. = Einrichtung = Nach dem Start des Live-Systems muss die Partition mit dem installierten Ubuntu-System eingebunden werden. Wo das eigene Linux zu finden ist erfährt man mit dem Befehl [[Vorlage(Befehl,"sudo parted -l")]] {{{#!vorlage Experten Falls man bei der Installation nicht nur das [:Homeverzeichnis:] verschlüsselt, sondern stattdessen die [:LUKS:Systemverschlüsselung (LUKS)] aktiviert hat, muss man das System nun [:LUKS#ffnen-von-LUKS-Geraeten-mit-Passwortabfrage:entschlüsseln]: [[Vorlage(Befehl,"sudo cryptsetup luksOpen /dev/sdxY sdxY_crypt")]] Dabei sind die Bezeichnungen `xY` an die eigenen Gegebenheiten anzupassen. Wenn man nun den `parted`-Befehl wiederholt, erkennt man eine oder mehrere Ausgaben wie `Festplatte /dev/mapper/sdxY_crypt`, wobei zusätzlich `vgubuntu` (sowie `vgubuntu-root` und `vgubuntu-swap`) erscheinen, wenn der Installer die Verschlüsselung mit [:LVM:] ergänzt. Im Folgenden weicht die Anleitung dann nur noch dadurch ab, dass nun anstelle von `/dev/sdxY` stattdessen das entsprechende `/dev/mapper/vgubuntu-root` (LUKS mit LVM) bzw. direkt das soeben durch die Entsperrung erzeugte `/dev/mapper/sdxY_crypt` (Beispiel ohne LVM) genutzt werden muss. Wichtig ist, dass man im Chroot für viele Aktionen den selben Namen verwenden muss, welcher bereits im System, in welches man wechseln möchte, in der Datei `/etc/crypttab` hinterlegt wurde, ansonsten schlagen manche Aktionen wie `sudo update-initramfs -u -k all` fehl, indem man beim nächsten Bootvorgang das Gerät nicht einhängen kann und im [wikipedia:Initramfs:] landet, wo es zudem auch keinen Editor gibt, um das schnell ohne erneuten Chroot korrigieren zu können. Wenn man den Namen nicht mehr weiß, kann man zunächst unter einem anderen Namen entschlüsseln, nachsehen, die Verschlüsselung wieder schließen und erneut, aber unter dem richtigen Namen, einhängen. }}} Es muss für ein [:ext:]-formatiertes System der Befehl [[Vorlage(Befehl,"sudo mount /dev/sdxY /mnt")]] bzw. bei einem [:Btrfs:]-formatierten System: [[Vorlage(Befehl,"sudo mount -o subvol=@ /dev/sdxY /mnt")]] ausgeführt werden, dabei sind die Bezeichnungen `xY` an die eigenen Gegebenheiten anzupassen. Nutzt das System eine separate boot-Partition, so muss diese mit {{{#!vorlage Befehl sudo mount /dev/sdzY /mnt/boot }}} eingebunden werden. Auch hier sind die Bezeichnungen `zY` an die eigenen Gegebenheiten anzupassen. Bei einer normalen Installation ist diese Partition nicht vorhanden, und somit dieser letzte Befehl nicht erforderlich. Nutzt man auf seinem Rechner das (U)[:EFI:]-Bootverfahren, so muss für vollen Zugriff (sogar zusätzlich zu einer eventuell bereits vorhandenen '''/boot'''-Partition von Ubuntu, etwa bei [:LUKS:]-Verschlüsselung) die '''/boot/efi'''-Bootpartition aller installierten Betriebssysteme vorab eingehängt werden mit: [[Vorlage(Befehl,'sudo mount /dev/sdwY /mnt/boot/efi')]] Auch hier sind die Bezeichnungen `wY` an die eigenen Gegebenheiten anzupassen. Dies ist eine Partition, die im ersten Schritt mit `parted` am [:Dateisystem:] `vfat` oder einem Hinweis zu EFI erkennbar ist. == Zusätzliche Schritte == Vor dem Wechsel in das installierte System muss gegebenenfalls diesem der Zugriff auf wichtige Systeminformationen zugesichert werden. Man bindet dazu das Verzeichnis mit den Gerätedateien [:Verzeichnisstruktur#dev:/dev] innerhalb des installierten Systems ein: {{{#!vorlage Befehl sudo mount --bind /dev /mnt/dev sudo mount --bind /dev/pts /mnt/dev/pts }}} Ähnlich verfährt man mit dem Schnittstellendateisystem [:Verzeichnisstruktur#proc:/proc] und dem System-Verzeichnis [:Verzeichnisstruktur#sys:/sys]. Diese werden mit {{{#!vorlage Befehl sudo mount --bind /sys /mnt/sys sudo mount --bind /proc /mnt/proc }}} eingebunden. Weiterhin muss [:Verzeichnisstruktur#run:/run] eingebunden werden: {{{#!vorlage Befehl sudo mount --bind /run /mnt/run }}} {{{#!vorlage Hinweis Der folgende Einzeiler hängt diese notwendigen Systemverzeichnisse in einem Aufruf ein: {{{#!vorlage Befehl for dir in /dev /dev/pts /proc /sys /run; do sudo mount --bind $dir /mnt$dir; done \}}} }}} [:mount:Gemountete] [:Datenträger:] können optional eingebunden werden: {{{#!vorlage Befehl sudo cp /proc/mounts /mnt/etc/mtab }}} Um die Internetverbindung sicherzustellen, werden u.U. die [:interfaces#DNS-Server-angeben:DNS-Server-Angaben] benötigt. Diese kopiert man z.B. mit: {{{#!vorlage Befehl sudo mount -o bind /etc/resolv.conf /mnt/etc/resolv.conf }}} {{{#!vorlage Hinweis Vorstehender Befehl kann Fehlfunktionen verursachen, wenn '''/etc/resolv.conf''' symbolischer Link ist. In einem solchen Fall kann man die Zieldatei des symbolischen Links an die entsprechende Stelle der neuen Dateisystemhierarchie kopieren und dann in dieser '''/etc/resolv.conf''' als symbolischen Link neu erstellen. Man sollte vermeiden, die Art der Datei '''/etc/resolv.conf''' zu verändern, weil einige Programme zur DNS-Namensauflösung ihre Funktionsweise ändern, je nachdem ob dies eine reguläre Datei oder ein symbolischer Link ist. }}} == System-Wechsel == Es erfolgt der Wechsel in das installierte System: {{{#!vorlage Befehl sudo chroot /mnt /bin/bash }}} Nun kann die Reparatur des installierten System vorgenommen werden. = Beenden = Abschließend verlässt man die Chroot-Umgebung mit `exit` und kann, sofern man nichts anderes mehr mit dem Live-System machen möchte, das System mit `sudo reboot` neu starten. = Links = * [:chroot/persistente-Installation:] - in persistente Installation einloggen * [https://www.linux-community.de/ausgaben/easylinux/2011/02/tipps-und-tricks-zu-knoppix-und-ubuntu/ Knoppix als Live-System] {de} - Einsatz von Knoppix zur Wiederherstellung des Boot-Loaders # tag: System, Shell, Installation