[Modul] Internet-Bandbreite überwachen

ja, das ist richtig. Backups mache ich auch i.d.R. online.
Es gibt zwar ein minimales Risiko (je nach Größe der settings.json) auf Inkonsistenzen, aber das ist doch eher akademisch.
Alle amderen Dateien sind ja so klein, das die in einem Rutsch und in sich konsistent gesichert werden.

1 „Gefällt mir“

Hallo,
sonst habe ich, wenn ich mal dran gedacht hab ein Zip Backup selbst gestarter. Ich hatte schon auch mehrfach versucht dazu eine Antwort zu bekommenob online oder offline, da ja Dropbox auch nur online sichert, und da das Dropbox Modul permanent Fehlerhaft ist und dann nicht mehr sichert, habe ich nach einer anderen Lösung gesucht.
Es gab aber immer nur sehr unklare aussagen zu Online/offline, deshalb hatte ich mir das Backupskript mit dem Cronjob erstellt.
Das macht Montag offline und die anderen Tage ein Onlinebackup.

Danke, hatte mich einfach nur interessiert :wink:

Hallo,

irgendwie macht das Skript bei mir gar nichts.

habe dann den Pfad geändert auf '/mnt/backupstick, um auszuschließen dass es Berechtigungsprobleme sind.
dann
"function BackupSymcon(bool $offline = false "
mal auf
"function BackupSymcon(bool $offline = true "
geändert. Aber es wird weder der Dienst gestoppt, noch habe ich ein File im Verzeichnis

  1. warum hast den Parameter offline in der Funktion geändert?
    Das ist ja nur die Vorbelegung der Übergabewerte, die Funktion wird entweder als BackupSymcon(true) oder BackupSymcon(false) aufgerufen.

  2. da ich nicht weis, wie Deine Änderungen genau ausgesehen habe, ist das etwas schwer zu sagen, ich hatte beider Varianten auf einem Ubuntu 20.04.5 getestet.
    Am besten poste dein geändertes Script

nur der Pfad wurde geändert. weil damit nichts passierte, hatte ich testweise das „true“ gesetzt aber danach wieder zurück geändert

<?php

function BackupSymcon(bool $offline = false, string $backupPath = '/mnt/backupstick', int $backupAge = 14)
{
    $backupFileBase = 'symcon_backup_';
    $backupFileSuffix = '.tgz';

    $backupFilename = $backupFileBase . date('YmdHis') . $backupFileSuffix;
    $backupFilepath = $backupPath . '/' . $backupFilename;
    $backupFilepattern = $backupPath . '/' . $backupFileBase . '*' . $backupFileSuffix;

    $s = 'echo "Symcon Backup"; ';

    if ($offline) {
        $s .= 'echo "  Symcon wird beendet ..."; ';
        $s .= '/etc/init.d/symcon stop;';
    }

    $s .= 'echo -n "Symcon wird gesichert ..."; ';
    $s .= 'cd / && tar -zcpf ' . $backupFilepath . ' var/lib/symcon/; ';
    $s .= 'echo " -> ' . $backupFilepath . '"; ';

    if ($offline) {
        $s .= 'echo "  Symcon wird gestartet ..."; ';
        $s .= '/etc/init.d/symcon start; ';
    }

    if ($backupAge) {
        $s .= 'find ' . $backupFilepattern . ' -type f -mtime +' . $backupAge . ' -delete &> /dev/null; ' . PHP_EOL;
    }

    $cmd = 'echo \'' . $s . '\' | at now';
    echo system($cmd);
}


BackupSymcon(true);

Hmm,

dann lasst Dir mal ausgeben, was er machen würde, so in etwa

    $cmd = 'echo \'' . $s . '\' | at now';
    echo $cmd . PHP_EOL;
    // echo system($cmd);
}

ruf die Funktion dann mit false auf (ist ja weniger invasiv).

Es sollte so etwas erscheinen

echo 'echo „Symcon Backup“; echo -n „Symcon wird gesichert …“; cd / && tar -zcpf /tmp/symcon_backup_20230104132439.tgz var/lib/symcon/; echo " → /tmp/symcon_backup_20230104132439.tgz"; find /tmp/symcon_backup_*.tgz -type f -mtime +14 -delete &> /dev/null; ’ | at now

Die Zeile kopierst du und führst Sie auf der Shell aus (als root)

was meldet er so?

root@IPS-klon:~# echo 'echo „Symcon Backup“; echo " Symcon wird beendet …„; /etc/init.d/symcon stop;echo -n „Symcon wird gesichert …“; cd / && tar -zcpf /mnt/backupstick/symcon_backup_20230104132912.tgz var/lib/symcon/; echo " → /mnt/backupstick/symcon_backup_20230104132912.tgz“; echo " Symcon wird gestartet …"; /etc/init.d/symcon start; find /mnt/backupstick/symcon_backup_*.tgz -type f -mtime +14 -delete &> /dev/null;
’ | at now
Command ‚at‘ not found, but can be installed with:
apt install at
root@IPS-klon:~#

soll ich at installieren?

ja, installieren,
aber hattest du nicht gestern Abend gesagt, das würde funktionieren?

ja das Cron Skript funktioniert, aber da wird doch „tar -zcpf“ aufgerufen, finde da kein „at“

nee, gestern (Internet-Bandbreite überwachen - #290 von demel42) wurde ja schon at benutzt.
Nur es wurde ein Script aufgerufen, dem ist es egal ob über cron oder at.
Änderung heute ist „nur“ die Bildung der Scriptbefehle direkt im PHP-Script, der Umweg über das Script auf Linux ebene entfällt

ups, hatte das gestern so im skript
system(‚nohup /var/scripts/symcon-backup.sh online > /dev/null 2>&1 &‘);

dann ist das eine Erklärung, warum der Aufruf von „at“ jetzt nicht funktionier, bedeutet aber, das deine ganzen Versuch für die Katz waren. Wir wissen ja nicht, ob es funktioniert.
Mit „nohup“ hatte es ja nur „fast“ funktioniert (Internet-Bandbreite überwachen - #281 von jagu), daher hatte ich mir ja die nächste Variante ausgedacht.

Also dann, installier mal at und probier, ob es überhaupt geht

Hallo,

ja, es geht. Ich habe auch die Variante
echo system(‚echo „/var/scripts/symcon-backup.sh offline“ | at now‘);

noch mal probiert. funktioniert auch.

"Problem war ja aber dass systemctl nicht funtkioniert.
Immer wenn der Service mit systemctl gestartet wurde, geht speedtest nicht

ok.

man kann die Funktion auch nochmal verschlanken, das die Debug-Azsgabe nirgendwo hin gehen

function BackupSymcon(bool $offline = false, string $backupPath = '/tmp', int $backupAge = 14)
{
    $backupFileBase = 'symcon_backup_';
    $backupFileSuffix = '.tgz';

    $backupFilename = $backupFileBase . date('YmdHis') . $backupFileSuffix;
    $backupFilepath = $backupPath . '/' . $backupFilename;
    $backupFilepattern = $backupPath . '/' . $backupFileBase . '*' . $backupFileSuffix;

    $s = '';
    if ($offline) {
        $s .= '/etc/init.d/symcon stop && ';
    }
    $s .= 'cd / && tar -zcpf ' . $backupFilepath . ' var/lib/symcon/ && ';
    if ($offline) {
        $s .= '/etc/init.d/symcon start && ';
    }
    if ($backupAge) {
        $s .= 'find ' . $backupFilepattern . ' -type f -mtime +' . $backupAge . ' -delete &> /dev/null' . PHP_EOL;
    }

    $cmd = 'echo \'' . $s . '\' | at now';
    // echo $cmd . PHP_EOL;
    echo system($cmd);
}

Meine Meinung zu online/offline

Grundsätzlich ist natürlich eine Datensicherung eines inaktiven Systems (also offline) die einzige Möglichkeit einen 100% konsistenten Zustand zu sichern.

Aber, schauen wir uns mal an, wo die Risiken bei online liegen können:
Hintergrund eines potentiellen Problems ist hier immer, das sich in dem Zeitraum der Sicherung etwas ändern könnte, sei es innerhalb einer Datei also auch in mehreren Dateien, die untereinander eine logische Beziehung haben

Inkonsistent In einer Datei
Dazu muss man sich vor Augen halten, das eine Datei aus Sicher des Betriebssystems nicht eine Einheit ist, sondern aus Blöcken besteht. Das gilt ebenso für das Lesen (im Rahmen der Datensicherung wird die Datei ja gelesen und an der Sicherungsstelle geschrieben bzw. in das Sicherungsformat überführt). Und wenn IPS was schreit, schreibt das Betriebssystem das auch Block für Block (alles mal stark vereinfacht). Und so kann es ja hypothetisch sein, das die Datensicherung die ersten Blöcke einer Daten geschrieben hat (also den alten Zustand) und wärend er das tut ändert IPS die Datei. Die nächsten Blöcke die die Datensicherung schreibt sind aber eventuell schon neu aktualisiert. Damit hätte man eine inkonsistente Date (vorne alt, hinten neu), die im wirst-case auf bei inhaltlichen Aufbau fehlerhaft ist. Die Wahrscheinlichkeit nimmt zu bei a) Größe der Datei und b) Langsamkeit des Datensicherungsmediums. Wenn ich also eine 500 MB-Datei haben dauert es länger als bei 100 kB und wenn die Datensicherung irgendwie übers Internet geht und da eventuell Hänger sind, steigt die Wahrscheinlichkeit. Aber da die Sicherung ja lokal ist, gibt es keine Geschwindigkeits-bedingte Risiken. Und die Dateien sind eigentlich auch alle klein, nur die settings.json hat eine gewisse Größe. Aber auch überschaubar (meine ist 7.5MB). Hinzu kommt noch, das die Settings.json ja eh nur alle 10 Minuten geschrieben wird, das verringert nochmal die Wahrscheinlichkeit.
Alle anderen Daten (Variablen-Acrhiv) sind sehr überschaubar, es zählt, was in db das Variablen-.Archivwerten gesammelt wurde; alle anderen Kumulierungen können ja wieder aufgebaut werden.

Von daher halte ich persönlich eine online-Sicherung für absolut vertretbar, ergänzt um eine Offline-Sicherung so jeden Monat oder so.

Bei mir ist es noch eine Stufe „online“. Ich habe alles unter Proxmox laufen und mache die Sicherung mit Hilfe des Propxmox-Backup-Servers. D.h. das Betriebssystem macht (vereinfacht ausgedrückt) Snapshots von Filesystem aller Gäste. Ab und ab mache ich noch ein konventionelles Offline-Backup, einfach, weil ich bei so wichtigen Systemen durchaus Gürtel UND Hosenträger für vertretbar halte.

super danke für die ausführliche Erklärung.

habe mir nun zwei Skripte online/offline angelegt die automatisch laufen.
und wenn ich vorhabe größere Änerungen zu machen kann ich einfach eines der beiden Skripte vorher starten und hab dann eine aktuelle Sicherung. :slight_smile:

auf meiner Proxmox läuft aktuell nur mein „Spiel- IPS“. Wie da automatisch Snapshots gemacht werden können haben ich noch nicht herausgefunden. ich geh immer in den Container und starte das Backup online. (Hast du da vielleicht einen Link, wo das erklärt wird?)

Snapshot ist nicht ganz der richtige Begriff, den ich verwendet hatte, weil die damit die manuelle ausgelösten Stand-Fixierungen meinen. Ich mache zB ein Snapshot, direkt bevor ich ein IPS-Update mache und kann damit innerhalb von einigen Minuten auf den 1:1 Stand vor dem Update zurück.
Es gibt dann zwei Techniken

  • Backup
    das findest Du auf Ebene des „Datacenter“ in der Seitenleiste.
    Das sichert zyklisch die VM auf einem Backup-Storage. Wobei mir so spontan nicht klar ist, ob eine einfache Platte ein Backup-Storage sein kann (müsste aber eigentlich). Bei mir habe ich den Proxmox-Backup-Server im Einsatz, den ich auf einem uralten ganz kleinen NUC installiert habe mit der Backup-Platte
  • Replikation
    damit wird in kurzen Intervallen eine VM auf einen 2. Proxmox-Rechner gesichert bzw natürlich nur das Delta der letzen Minuten. Damit kann ich auf dem 2. Rechner im Handumdrehen diese VM starten - ohne Rückspielen von Backups auf dem sehr aktuellen Stand.

Das ganze funktioniert aber in dieser Komplexität nur mit dem Filesystem ZFS. Das ist zwar das von Proxmox präferierte FS, aber viele starten erstmal mit dem bekannten ext3. ZFS braucht mehr RAM für sich, hat aber dann doch viele Vorteile.

Hallo,

heute Nacht das erste Backup auf der Prod erstellt, vielen Dank

mit dem Clusterthema Proxmox und meinem Backup Server muss ich mich auch mal intensiver beschäftigen.

vielen Dank noch mal.

Vielleicht macht es Sinn, das Thema Backup hier in ein eigenes zu trennen, ich weiss nicht ob ein Mod das trennen könnte.