Die Veröffentlichung des Tools CRIU 4.0 (Checkpoint and Restore In Userspace) wurde veröffentlicht, das zur Speicherung und Wiederherstellung von Prozessen im Benutzermodus gedacht ist. Mit diesem Tool können der Zustand eines einzelnen Prozesses oder einer Gruppe von Prozessen gespeichert und dann von der gespeicherten Position aus wieder aufgenommen werden, auch nach einem Neustart des Systems oder auf einem anderen Server, ohne dass bereits etablierte Netzwerkverbindungen unterbrochen werden. Der Code des Projekts ist in der Programmiersprache C geschrieben und steht unter der GPLv2-Lizenz. CRIU wird in Containerverwaltungssystemen wie OpenVZ, LXC/LXD und Docker verwendet. Die für den Betrieb von CRIU erforderlichen Änderungen sind im Hauptkern von Linux enthalten.
Die Anwendungsbereiche der CRIU-Technologie umfassen die Bereitstellung eines Neustarts des Betriebssystems, ohne die kontinuierliche Ausführung langlaufender Prozesse zu unterbrechen, die Live-Migration isolierter Container, die Beschleunigung des Starts langsamer Prozesse (man kann mit einem Zustand beginnen, der nach der Initialisierung gespeichert wurde), die Durchführung von Kernel-Updates ohne Neustart der Dienste, die regelmäßige Speicherung des Zustands langlaufender Berechnungsaufgaben zur Wiederaufnahme der Arbeit im Falle eines Absturzes, die Lastverteilung auf Knoten in Clustern, die duplizierung von Prozessen auf ein anderes System (fork auf ein entferntes System), die Erstellung von Snapshots von Benutzeranwendungen während der Ausführung zur Analyse auf einem anderen System oder für den Fall, dass eine Rückgängigmachung weiterer Aktionen im Programm erforderlich ist.
In der neuen Version:
- Ein CUDA-Plugin wurde hinzugefügt, das die Möglichkeit bietet, den Zustand von Anwendungen basierend auf NVIDIA CUDA zu speichern und wiederherzustellen.
- Die Unterstützung für den Shadow Stack-Mechanismus wurde hinzugefügt, der ab Kernel Linux 6.6 unterstützt wird und es ermöglicht, viele Exploits unter Verwendung der Hardwarefähigkeiten von Intel-Prozessoren zu blockieren (nach der Übergabe der Kontrolle an die Funktion speichert der Prozessor die Rücksprungadressen nicht nur im normalen Stack, sondern auch in einem separaten "Shadow Stack", der nicht direkt verändert werden kann; vor dem Verlassen der Funktion wird die Rücksprungadresse aus dem Shadow Stack extrahiert und mit der Rücksprungadresse aus dem Hauptstack verglichen).
- Die Unterstützung des ioctl-Befehls PAGEMAP_SCAN wurde hinzugefügt, um Informationen über den Inhalt der Speichertabellen zu erhalten, was unter anderem die Feststellung von Schreibvorgängen in ein bestimmtes Speichergebiet unter Verwendung von userfaultfd() ermöglicht.
- Die Möglichkeit zur Wiederherstellung des Flusses in der korrekten cgroup v1 wurde implementiert.
Quelle: opennet.ru
