GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Wann würden Sie Pivot_root über Switch_root verwenden?

Ich möchte den Linux-Init-Prozess besser verstehen, um ein System per Netboot über ceph statt über nfs zu booten.

Dabei bin ich auf zwei Formen des Rootwechsels gestoßen. Einer namens switch_root und der andere namens pivot_root. Diese Skripte werden von einem In-Memory-Dateisystem (initramfs) ausgeführt, das über tftp unter Verwendung des pxe-Boot-Prozesses erhalten wird.

Wann würden Sie eines über dem anderen verwenden? Ich habe gesehen, dass beides in einigen Init-Skripten verwendet wird, die in root platziert sind.

Akzeptierte Antwort:

Eine wunderbare Erklärung habe ich hier gefunden. Lassen Sie mich jedoch versuchen, das, was ich in der Antwort verstanden habe, in einem kürzeren Format wiederzugeben.

Kürzere Version

  1. Während das System bootet, benötigt es einen frühen Userspace. Dies kann
    mit initramfs oder initrd erreicht werden.
  2. initrd wird in die Ramdisk geladen, die eine tatsächliche ist DATEISYSTEM .
  3. initramfs ist nicht ein Dateisystem .
  4. Für initrd pivot_root verwendet wird und für initramfs switch_root verwendet wird.

Längere Version

Nun zur ausführlichen Erklärung dessen, was ich oben geschrieben hatte.

Obwohl sowohl ein initramfs als auch ein initrd denselben Zweck erfüllen, gibt es
zwei Unterschiede. Der offensichtlichste Unterschied besteht darin, dass eine initrd
in eine Ramdisk geladen wird. Es besteht aus einem eigentlichen Dateisystem (normalerweise
ext2), das auf einer Ramdisk gemountet ist. Andererseits ist ein initramfs
kein Dateisystem. Es ist einfach ein (komprimiertes) cpio-Archiv (vom Typ
newc), das in ein tmpfs entpackt wird. Dies hat den Nebeneffekt, dass
das initramfs etwas optimierter wird und im Kernel-Boot-Prozess ein wenig
früher geladen werden kann als eine initrd. Außerdem ist die Größe des
initramfs im Speicher kleiner, da der Kernel die
Größe des tmpfs an das anpassen kann, was tatsächlich geladen wird, anstatt sich auf
vordefinierte Ramdisk-Größen zu verlassen, und es kann auch den RAM aufräumen, der
verwendet wurde, während Ramdisks dazu neigen, in Verwendung zu bleiben (aufgrund von Details der
pivot_root-Implementierung).

Es gibt noch einen weiteren Nebeneffekt-Unterschied:wie das Root-Gerät (und
das Wechseln zu ihm) gehandhabt wird. Da eine initrd ein tatsächliches Dateisystem
ist, das in den RAM entpackt wurde, muss das Root-Gerät tatsächlich die Ramdisk sein. Für
ein initramfs gibt es ein Kernel „rootfs“, das zum tmpfs wird, in das
das initramfs entpackt wird (wenn der Kernel ein initramfs lädt; wenn
nicht, dann ist das rootfs einfach das Dateisystem, das über den root=
Kernel-Boot-Parameter angegeben wird), aber dieses vorläufige rootfs sollte nicht
als root=Boot-Parameter angegeben werden (und es gäbe keine Möglichkeit,
dies zu tun, da kein Gerät daran angeschlossen ist). Das bedeutet, dass Sie
immer noch Ihr echtes Root-Gerät an den Kernel übergeben können, wenn Sie ein
initramfs verwenden. Bei einer initrd müssen Sie selbst verarbeiten, was das eigentliche Root-Gerät
ist. Da das „echte“ Root-Gerät mit einer initrd
die Ramdisk ist, muss der Kernel wirklich Root-Geräte von einem
echten Gerät (der Ramdisk) zum anderen (Ihrem echten Root) wechseln. Im Fall
eines initramfs ist der initramfs-Bereich (das tmpfs) kein echtes Gerät,
also wechselt der Kernel keine echten Geräte. Während also der Befehl
pivot_root mit einem initrd verwendet wird, muss ein anderer Befehl
für ein initramfs verwendet werden. Busybox stellt switch_root bereit, um dies zu erreichen,
während klibc new_root anbietet.


Linux
  1. 11 überraschende Möglichkeiten, wie Sie Linux jeden Tag verwenden

  2. Welche Open-Source-Backup-Lösung verwenden Sie?

  3. Welchen Linux-Terminalbefehl verwenden Sie am häufigsten?

  4. Erklärte Linux-Dateisystemtypen, welche Sie verwenden sollten

  5. Antivirus unter Linux:Sollte ich es wirklich verwenden und wenn ja, wann brauche ich es?

So verwenden Sie den Linux-Zeitbefehl:Alles, was Sie wissen müssen

7 Gründe, warum ich Manjaro Linux verwende und Sie es auch sollten

Wie viel Swap sollten Sie unter Linux verwenden?

Die 5 schönsten Linux-Distributionen, die wir Ihnen empfehlen

Wie verwenden Sie reguläre Ausdrücke mit dem cp-Befehl in Linux?

Fahren Sie meine (Backup-)Festplatte unter Linux herunter, wenn ich sie nicht verwende