ADMIN 03/14 stellt Erste-Hilfe-Tipps zu Windows-Rettung, Backup und Recovery bei Datenbanken vor und verrät wie man Linux-Systeme vollständig sichert und ... (mehr)

Sandmann

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 ):

Abbildung 3: Der top-Prozess mit der ID 2238 lässt sich erst mit dem Parameter --shell-job dumpen.
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.

Abbildung 4: CRIU gewährt Einblick in den Inhalt eines gespeicherten Prozesses.

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.

Abbildung 5: Vom CRIU-gesicherten top-Prozess verbleibt die letzte Ausgabe auf dem Terminal.

Reanimation

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.

Abbildung 6: Die Wiederherstellung eines mit --shell-job gespeicherten Prozesses scheitert ohne Nennung des Grundes, wenn dieser Parameter fehlt.

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.

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023