Können wir im laufenden Betrieb von einer Linux-Installation auf eine andere wechseln?

Können wir im laufenden Betrieb von einer Linux-Installation auf eine andere wechseln?

Ich habe mehrere separate Linux-Installationen auf meinem Rechner und starte mit der jeweils passenden neu. Ich frage mich, ob es möglich ist, von einer zur anderen zu wechseln, ohne einen vollständigen Neustart durchzuführen, indem man beispielsweise fstab mit den aufgelisteten Partitionen für die neue Installation kopiert und dann mount -a

Natürlich würde sich der Kernel nicht ändern, aber das ist ok, ich hoffe, nur die Arbeitspartitionen zu ändern. Ich halte es auch für offensichtlich, dass dies über die Befehlszeile erfolgen müsste, ohne dass etwas ausgeführt wird (falls das überhaupt möglich ist). Oder ist die Idee von Anfang an null und nichtig und purer Wahnsinn?

Der Grund dafür ist, dass ich normalerweise mit radikalen Änderungen (wie dem Wechsel zum 'amd64'-Kernel in Debian) in einer separaten 'experimentellen' Installation experimentiere. Ein Neustart zum Starten ist natürlich kein Problem, aber es wäre cool, wenn ich ohne einen kompletten Neustart quasi zu dieser Installation wechseln könnte. Man könnte es sich so vorstellen, als würde man einfach die Root-Partition im laufenden Betrieb ändern, aber vielleicht ist das überhaupt nicht möglich.

Ja, das ist möglich, wie ich weiter unten erfahre. Wenn Sie den Kernel selbst nicht austauschen müssen, verwenden Sie „chroot“. Wenn Sie einen vollständigen Neustart simulieren möchten, verwenden Sie „kexec“.

Antwort1

Ich glaube nicht, dass das möglich ist.

Theoretisch möchten Sie Folgendes tun:

  1. Verschieben Sie das System mithilfe von auf die „einzelne“ Ausführungsebene init 1, wo theoretisch nur Init und Bash ausgeführt werden.
  2. Hängen Sie alle Partitionen außer / aus. An diesem Punkt funktioniert Ihr System möglicherweise nicht mehr, je nachdem, ob sich /usr auf der Root-Partition befindet.
  3. Mounten Sie das Root-Verzeichnis Ihres anderen Betriebssystems irgendwo.
  4. pivot_root, um das Stammverzeichnis in die neue Partition zu ändern.
  5. Sagen Sie init, dass es das neue System durch Ausführen init 5(oder 2 oder was auch immer angemessen ist) starten soll.

Das Problem ist, dass pivot_root nur die Root-Partition für den aktuellen Prozess ändert, was bedeutet, dass es init nicht beeinflusst und wenn Sie init anweisen, das System zu starten, wird Ihr altes System gestartet. Sie müssten init irgendwie anweisen, pivot_root auszuführen, was meiner Meinung nach nicht möglich ist.

Oh, und lassen wir mal beiseite, was passiert, wenn Ihr anderes Betriebssystem einen anderen Init-Dienst verwendet (Fedora verwendet beispielsweise systemd, während Ubuntu Upstart hat). Sie müssten den Init-Prozess (PID 1) unter dem Kernel ersetzen, und das ist wirklich ein No-Go.

Antwort2

Wenn Sie mit verschiedenen Kerneln experimentieren möchten, müssen Sie entweder einen Neustart durchführen oder sie in einer virtuellen Maschine ausführen. Virtuelle Maschinen sind praktischer, aber dann können Sie den Kernel nicht auf Ihrer realen Hardware testen.

Wenn Sie unterschiedliche Setups mit unterschiedlichen installierten Programmen haben möchten, können Sie auch eine virtuelle Maschine verwenden. Wenn Sie den Overhead einer virtuellen Maschine vermeiden möchten, können Sie eine Distribution in einemchroot. Ich mache das oft, um einfachen Zugriff auf 32-Bit-Programme auf einer 64-Bit-Installation zu haben oder um zusätzlich zu einer stabilen Version (wie Debian Stable) die neuesten Sachen (wie Debian Unstable) zu haben. Ich habe eineAnleitung zum Einrichten eines Chroots für alternative Debian/Ubuntu-Versionen. Siehe auchLeichtgewichtige, isolierte Linux-Umgebung

Antwort3

Wenn dunichtmöchte/muss den Kernel ändern, möchte aber nur das/die andere(n) Dateisystem(e) verwenden, wie Sie hier anzudeuten scheinen:

Natürlich würde sich der Kernel nicht ändern, aber das ist ok, ich hoffe, nur die Arbeitspartitionen zu ändern.

Dann brauchen Sie vielleicht nur (Mount und) chroot, was, um Ihre Worte zu verwenden,

Man könnte es sich so vorstellen, als würde man einfach die Root-Partition im laufenden Betrieb ändern.

Ich verwende chroot ständig von Rettungssystemen (wie Clonezilla) aus, um mit einem Dateisystem zu interagieren, das normalerweise von einem anderen Kernel verwendet würde. Ich erwarte nicht, dass ich damit Dinge wie das Laden neuer Kernelmodule erledigen kann, aber zum Lesen und Schreiben von Dateien (fstab reparieren, grub.conf anpassen usw.) ist es in Ordnung.

Sie können Bind-Mounts verwenden, um die Chroot-Umgebung nützlicher zu machen. Ich verwende dies ständig, um gemountete Dateisysteme innerhalb eines Chroot-Ziels zu replizieren:

mount /dev/sda1 /mnt
for d in dev sys proc; do mount -obind /$d /mnt/$d; done
chroot /mnt

verwandte Informationen