Um nach erfolgreichen Tests einen Prozess einzufrieren, benötigt CRIU lediglich dessen Prozess-ID und einen Speicherort. Der folgende Befehl sichert den Prozess mit der PID 2238 im Unterverzeichnis
»checkpoint
«
des User-Home-Ordners:
criu dump --images-dir ~/checkpoint --tree 2238
Hinter
»criu
«
folgt immer zunächst die auszuführende Aktion, in diesem Fall erstellt es eine Sicherung – Dump oder Image genannt. Hinter
»--images-dir
«
oder
»-D
«
steht das Verzeichnis, hinter
»--tree
«
oder
»-t
«
die Prozess-ID. CRIU benötigt für sämtliche Aktionen Root-Rechte.
Das Einfrieren schlägt jedoch fehl, wenn sich der zu speichernde Prozess Ressourcen mit dem Eltern- oder einem anderen Prozess teilt. Dann bricht CRIU sicherheitshalber den Vorgang ab. Bei in einer Shell gestarteten Prozessen lässt sich eine solche Ressourcenteilung oft nicht vermeiden, zur Lösung gibt es drei Möglichkeiten: Entweder man verschiebt einen Prozess in den Hintergrund, startet ihn in einer separaten Session oder übergibt CRIU den zusätzlichen Parameter
»--shell-job
«
(
Abbildung 3
):
criu dump -D ~/checkpoint -t 2238 --shell-job
Im Zielverzeichnis – im Beispiel heißt es
»~/checkpoint
«
– legt CRIU für einen gesicherten Prozess mehrere Dateien an. Jede von ihnen enthält den Zustand einer vom Prozess genutzten Ressource (
Abbildung 4
). Bereits vorhandene Dateien überschreibt CRIU ohne Warnung.
Nach dem es ihn gesichert hat, beendet CRIU den Prozess. Dessen letzte Ausgabe landet gegebenenfalls unformatiert im Terminal wie in
Abbildung 5
. Der CRIU-Parameter
»--leave-running
«
sorgt dafür, dass CRIU den gespeicherten Prozess weiterlaufen lässt.
Der folgende Befehl weckt einen gespeicherten Prozess wieder auf:
criu restore -D ~/checkpoint--restore-detached
Der Parameter
»--restore-detached
«
sorgt dafür, dass sich CRIU nach der Wiederherstellung beendet. Der reanimierte Prozess besitzt dann Init als Elternprozess und trägt die gleiche Prozess-ID wie beim Einfrieren. Ist diese PID inzwischen anderweitig vergeben, bricht die Restauration mit einem Fehler ab. Abhilfe schafft die Option
»--namespaces
«
oder
»-n
«
. Damit erhält der Task vom System eine neue PID und behält seine alte nur intern in einem virtuellen Prozessnamensraum.
Hat man den Prozess mit
»--shell-job
«
gesichert, ist dieser Parameter auch bei der Wiederherstellung notwendig (
Abbildung 6
). Der Prozess startet dann in der Shell, in der man
»criu
«
aufgerufen hat. Zudem dauert es unter Umständen einen kurzen Moment, bis der Prozess tatsächlich die Arbeit aufnimmt.
Bei der Wiederherstellung bleibt die Sicherung im Verzeichnis
»checkpoint
«
erhalten. Man kann den Prozess folglich jederzeit erneut an derselben Stelle wiederbeleben.
Um den gespeicherten Prozess auf einem anderen System aufzuwecken, kopiert man das komplette Verzeichnis mit der Sicherung auf den anderen Rechner und reanimiert dort den Prozess mit
»criu restore
«
. Die neue Umgebung muss jedoch mit der alten übereinstimmen und die benötigten Dateien in den gleichen Verzeichnispfaden enthalten. Idealerweise handelt es sich beim neuen System um einen Klon. Oder ein verteiltes Dateisystem wie NFS stellt die Dateien bereit. In jedem Fall sollten Administratoren die Live-Migration testweise durchspielen, um fehlenden Bibliotheken, Konfigurationsdateien und Dokumenten auf die Spur zu kommen.