Ändern der von einem Prozess mit langer Laufzeit verwendeten Festplatte

Ändern der von einem Prozess mit langer Laufzeit verwendeten Festplatte

Angenommen, ich habe einen Prozess, der lange Berechnungen durchführt (z. B. seit Tagen läuft) und eine Festplatte als temporären Speicher für Zwischenergebnisse verwendet (z. B. gemountet unter /mntund ich möchte sie /dev/sda1durch ersetzen /dev/sdb1). Wie kann ich diese Festplatte durch eine andere ersetzen, ohne den Prozess zu beenden und ihn zu sehr zu stören?

Das ist eine allgemeine Frage, ich denke nicht an ein bestimmtes Programm. Nehmen wir an, wir verwenden eine aktuelle Linux-Version.

Antwort1

Wenn der Prozess ein Verzeichnis zum Erstellen und Löschen temporärer Dateien verwendet, können Sie wahrscheinlich versuchen, ihn mit kill -STOP $pideinem Befehl zu stoppen und in /proc/$pid/fd nach geöffneten Dateideskriptoren zu suchen.

Wenn keines geöffnet ist, können Sie den Einbindungsort bedenkenlos ändern, die Dateien kopieren und mit der Arbeit fortfahren kill -CONT $pid.

Wenn noch einige Dateien geöffnet sind oder der Prozess sie nicht schließt, können Sie versuchen, Dateideskriptoren mit GDB zu migrieren. Ich habe das manuell versucht und es hat funktioniert, aber ich habe ein Skript gefunden, das das für Sie erledigen kann:http://ingvar.blog.redpill-linpro.com/2010/07/10/changing-a-process-file-descriptor-on-the-fly/

Seien Sie vorsichtig, wenn der Prozess über das Netzwerk kommuniziert. Wenn Sie ihn stoppen, kann es zu einer Zeitüberschreitung der Verbindung kommen. Tun Sie dies also so schnell wie möglich (testen Sie die Befehlssequenz vorher am Dummy-Prozess und führen Sie sie als Batch aus).

Obwohl ich denke, dass es funktionieren würde, werde ich liebernicht empfohlenSie können es in einer Produktionsumgebung tun.

BEARBEITEN: Sie können geöffnete Netzwerk-Sockets auch in /proc/$pid/fd sehen, sodass Sie feststellen können, ob der Prozess das Netzwerk verwendet oder nicht.

Antwort2

Dies hängt vollständig vom Verhalten Ihres Prozesses bei Verwendung seines temporären Speichers ab.

Wenn Ihr Prozess eine Datei auf geöffnet hält /mnt, können Sie das Gerät nicht ersetzen, ohne dass der Prozess höchstwahrscheinlich auf undefinierte Weise fehlschlägt, selbst wenn Sie es schaffen, das Gerät zwangsweise zu trennen. Prozesse erwarten im Allgemeinen nicht, dass Geräte verschwinden, auf denen sie offene Dateien haben.

Wenn Ihr Prozess Dateien öffnet, in sie schreibt und sie dann schließt /mnt, können Sie ihn möglicherweise stoppen, aushängen, neu einhängen /mntund neu starten. Dies hängt davon ab, ob Sie den Prozess stoppen können, während er nicht verwendet /mnt. Sie könnten also

$ kill -STOP pid
$ lsof -p pid | grep /mnt
... then, if it has nothing open on /mnt ...
$ sudo umount /mnt
$ sudo mount /dev/sdb1 /mnt
$ kill -CONT pid

Dies funktioniert nicht unbedingt, selbst wenn Sie den Prozess beenden, ohne dass Dateien geöffnet sind /mnt, da Sie möglicherweise eine Logik unterbrochen haben, die auf /mntNichtänderung beruht; etwas wie

  • Überprüfen, ob /mnt/wibblevorhanden
  • Das stimmt! Machen wir uns bereit, es zu öffnen und daraus zu lesen
  • ...der Vorgang wird gestoppt und ein anderes Gerät wird eingebunden /mnt...
  • ...Prozess wird neu gestartet...
  • Oh nein! /mnt/wibblelässt sich nicht öffnen!
  • Stirb schrecklich

Antwort3

Jedes Programm, dessen Berechnungen mehrere Tage dauern, sollte so konzipiert sein, dass es in regelmäßigen Abständen ausreichende Status auf die Festplatte überträgt. Wenn ein Neustart des Prozesses bedeutet, dass Sie eine Stunde Verarbeitungszeit verlieren, ist das vielleicht in Ordnung, wenn Sie jedoch mehr verlieren, würde ich das Programm als schlecht konzipiert bezeichnen.

Allerdings kann es auch andere Szenarien geben, in denen Sie einen Prozess länger am Leben erhalten und eine Festplatte unter ihm austauschen möchten. In solchen Situationen sollten Sie das Dateisystem vom physischen Medium entkoppeln.

Mögliche Optionen sind:

  1. Software-Raid verwenden
  2. Andere virtuelle Blockgeräteschicht verwenden (vielleicht ist LVM geeignet)
  3. Verwenden Sie ein Dateisystem, das selbst mehrere zugrunde liegende Geräte verwenden kann

verwandte Informationen