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)

Stolperfallen

Das Einfrieren und Auftauen von Prozessen funktioniert noch nicht mit jedem Prozess. Die CRIU-Entwickler führen unter [8] eine kurze Liste offiziell unterstützter Software, die Programme wie Make und GCC, Tar, Git, Apache, MySQL, SSH und MongoDB umfasst. Grundsätzlich nicht einfrieren lassen sich Prozesse, die gerade auf Hardware-Geräte zugreifen, egal ob es sich dabei um Block- oder Character-Devices handelt. Das hat zwei Gründe: Die genaue Funktionsweise des Geräts bleibt CRIU verborgen und beim Wiederherstellen eines Prozesses könnte das Gerät fehlen.

Da CRIU die gleichen Schnittstellen wie ein Debugger verwendet, friert das Werkzeug außerdem keine Prozesse ein, die bereits der Beobachtung durch STrace oder GDB unterliegen. Des Weiteren sichert CRIU keine Prozesse, die einen Lock auf eine Datei besitzen, denn CRIU kann hier nicht feststellen, ob nicht doch noch einem anderen Prozess der Zugriff auf die entsprechende Datei gestattet ist. Der optionale Parameter »--file-locks« zwingt CRIU jedoch, den Lock mitzusichern. Des Weiteren kommt CRIU in Version 1.1 mit dem Dateisystem Btrfs nicht zurecht, die Entwickler arbeiten hier jedoch an einer Lösung.

Außerdem können sich nach der Wiederherstellung des Prozesses einige Werte verändert haben, etwa die IDs der Mount-Points und die der Sockets sowie die Startzeit des Prozesses. »cat /proc/1234/stat« enthüllt letztere Information beispielsweise für einen Prozess mit der ID 1234 im Feld 22.

Ins Netz gegangen

Programme, die über eine TCP-Verbindung kommunizieren, konserviert CRIU mithilfe des Linux-Kernels. Dabei schließt es den betroffenen Socket und blockiert mit einer zusätzlichen Firewall-Regel die TCP-Verbindung. CRIU stellt so sicher, dass die Verbindung im selben Zustand wie beim Speichern verbleibt. Diese Firewall-Regel muss deshalb bei der Wiederherstellung des Prozesses noch in der Netfilter-Table stehen.

Um den Umgang mit einer TCP-Verbindung auszulösen, übergibt man CRIU beim Sichern und Wiederherstellen den Parameter »--tcp-established« . Ein so konservierter Prozess lässt sich nur genau ein Mal wiederbeleben. Jeder weitere Versuch scheitert, weil sich die TCP-Verbindung dann in einem anderen Zustand befindet. Das CRIU-Wiki beschreibt die technischen Hintergründe im Detail unter [9] .

CRIU friert nicht nur den Prozess selbst ein, sondern sicherheitshalber auch immer dessen Kind- sowie alle abhängigen Prozesse. Sprechen zwei Programme über eine Pipe oder einen Unix-Socket miteinander, legt CRIU folglich beide gleichzeitig aufs Eis. In manchen Situationen kann CRIU jedoch nur einen der beiden Prozesse einfrieren; dann verweigert CRIU die Arbeit mit der Fehlermeldung »external socket is used error« . Über den Parameter »--ext-unix-sk« beim Sichern und Wiederherstellen lässt sich CRIU dennoch überreden, zumindest einen Prozess zu sichern. Beim Wiederherstellen muss man dann allerdings dafür sorgen, dass die Gegenstelle bereits existiert.

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