[Modul] Backup (FTP/FTPS/SFTP)

Hallo Helmut,
natürlich kann ich das. Aber in einem betrieblichen Umfeld möchte man so wenig Zusatzsoftware wie irgendwie möglich auf den Servern haben. SMB Freigaben dagegen sind auf Servern (nicht nur Windows) sehr einfach möglich

Da SMB/NFS/APF sehr systemspezifisch sind (und aus PHP heraus nicht wirklich angesprochen werden können), ist dies außerhalb der Möglichkeiten dieses Moduls. D.h. es wird bei FTP/FTPS/SFTP bleiben :slight_smile:

paresy

wie geht das per symcon ?

Ich habe immer noch Probleme beim erstellen eines ersten automatischen inkrementellen Backup (FTP). Es kommt immer wieder zu folgener Meldung:

22.05.2023, 03:15:00 | TimerPool | SymconBackup_inkrementelles Backup (UpdateBackup): Warten auf Skriptresultat fehlgeschlagen. Bitte den Spezialschalter ‚ThreadCount‘ erhöhen, um das Problem zu umgehen!

Ich habe in der Zwischenzeit aufgeräumt und das Backup von 8GB auf 5GB verkleinert. Der ThreadCount ist auf 100 erhöht, aber keine Änderung.

Ich lösche täglich den Bachup-Symcon Ordner bis ich sehe dass das erste inkrementelle Backup fehlerfrei durchläuft.

Prima, dass es dafür nun ein Modul gibt. - Für mich hat es einen entscheidenden Nachteil: die Dateien werden einzeln auf den FTP-Server geschrieben. Das sind viele Tausend und das löschen einer Sicherung braucht ewig.

Vorschlag: die entsprechenden Dateien erst in eine ZIP-Datei packen und dann auf den FTP-Server schreiben

Das möchten wir unbedingt nicht machen.

  1. Inkrementelle Backups gehen nur über einzelne Dateien
  2. Eine ZIP Datei verbraucht auf dem lokalen Rechner Speicher (der ggf. gar nicht verfügbar ist), viel Zeit diese ZIP zu erstellen und belastet den Wear Level vom Flash unnötig.

Ich denke das „längere“ Löschen ist ein besserer Nachteil, als die Probleme, die wir uns auf dem (meistens schwächeren) Symcon Systemen einhandeln.

paresy

Meine eigene Lösung (Windows) stoppt den Dienst, zippt die Verzeichnisse und startet den Dienst wieder. - Einziger Nachteil: in der Zeit (3 Uhr nachts) ist das System kurz „tot“.

Frage: könnte ich das Sichern der Verzeichnisse auch mit laufenden Dienst machen? Oder laufe ich dann Gefahr geöffnete Dateien zu finden

Das hängt von deinem OS ab. Die meisten können dank VSS konsistente Kopien machen. Wenn du regelmäßige Backups machst, ist die Gefahr eines korrupten oder insgesamt inkonsistenten Backups zu haben eher gering. Die offizielle Aussage ist: Nur ein Backup bei gestoppten Dienst ist korrekt. Ich mache aber grundsätzlich Backups ohne den Dienst zu stoppen und notfalls hat man genug settings.json im Backup Ordner. Man muss es nur wissen.

paresy

1 „Gefällt mir“

Ich hab ein Problem mit dem Backup. Anfangs lief es ohne Probleme, jedoch bekomme ich mittlerweile Fehlermeldungen, wenn ich ein Backup ausführen will. Es werden als erstes folgende Meldungen angezeigt:

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /mnt/data/symcon/modules/.store/de.symcon.backup/libs/FTP.php on line 58

Notice: Undefined offset: 4 in /mnt/data/symcon/modules/.store/de.symcon.backup/libs/FTP.php on line 61

Notice: Undefined offset: 8 in /mnt/data/symcon/modules/.store/de.symcon.backup/libs/FTP.php on line 64

Die Meldungen wiederholen sich ein paar Mal bis folgende Fehlermeldung kommt:

Fatal error: Uncaught TypeError: Argument 1 passed to FTP::chdir() must be of the type string, null given, called in /mnt/data/symcon/modules/.store/de.symcon.backup/Backup/module.php on line 334 and defined in /mnt/data/symcon/modules/.store/de.symcon.backup/libs/FTP.php:17
Stack trace:
#0 /mnt/data/symcon/modules/.store/de.symcon.backup/Backup/module.php(334): FTP->chdir(NULL)
#1 /mnt/data/symcon/modules/.store/de.symcon.backup/Backup/module.php(166): Backup->getDeletableFiles(Object(FTP), '/symcon', '/var/lib/symcon')
#2 /mnt/data/symcon/scripts/__generated.inc.php(79): Backup->CreateBackup()
#3 /-(3): SB_CreateBackup(13921)
#4 {main}
  thrown in /mnt/data/symcon/modules/.store/de.symcon.backup/libs/FTP.php on line 17

Der Modus ist auf „Inkrementelles Backup“ gestellt und das Backup soll niemals den Ordner wechseln. Weiß jemand warum der Fehler auftritt und wie ich ihn fixen kann?

Hallo paresy.
Es läuft hervorragend simpel.
Danke.
LG Jens

1 „Gefällt mir“

Wieso braucht das erzeugen des ZIP lokalen Speicher? Dafür gibt es doch RAM Disk bzw. PIPE [also mindestens auf der Symbox, die ja hauptsächlich das Speicherplatz-Problem hat].

Soweit ich weiß kannst du ZIP nicht pipen. Und weiterhin kannst du per php keinen Stream per FTP und Co hochladen.

Das mit dem ZIP im RAM ist keine gute Idee. Das Flash ist eigentlich immer größer als der RAM. Und erklär mal einem Kunden warum das mit dem Backup nur für kleine Backups geht. Also nicht praktikabel.

paresy

Zum PIPE: bzgl. ZIP ist das ein Argument: Nur muss es zip sein? Wenn ich mich in 99% der Fälle nicht mit dem Backup auseinander setzen muss, dafür aber im Fall der Fälle ein Programm zum öffnen eines tar, 7zip o.ä.

Zu:

Inkrementelle Backups gehen nur über einzelne Dateien

tar kann das auch auf Archive.

Was ist das für ein Datum dass bei dem inkrementelle Backup mit wöchentlichem Wechsel geschrieben wird?

1

Der Montag der Woche. Aber so richtig intuitiv ist das nicht. Evtl. wäre die KW der Jahres besser, oder?

paresy

Moin,

Um 21:00Uhr starte ich das Backup, und es ist normalerweise fertig um ca. 21:07Uhr.
Die NAS wird um 21:15Uhr ausgeschaltet.

Am 28.5 und jetzt am 30.5 habe ich diese Fehlermeldung bekommen:

30.05.2023, 21:15:00 | TimerPool            | SymconBackup (UpdateBackup): Warten auf Skriptresultat fehlgeschlagen. Bitte den Spezialschalter 'ThreadCount' erhöhen, um das Problem zu umgehen!

Der Schalter „ThreadCount“ steht schon auf 100, der Standartwert ist doch nur 50. Muss ich den noch mehr erhöhen?

Was ich habe überhaupt nicht verstehe, ist diese Fehlermeldung:

31.05.2023, 05:30:54 | TimerPool            | SymconBackup (UpdateBackup): 
Fatal error: Uncaught phpseclib3\Exception\UnableToConnectException: Cannot connect to 192.168.1.110:22. Error 10060. Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat. in C:\ProgramData\Symcon\modules\.store\de.symcon.backup\libs\vendor\phpseclib\phpseclib\phpseclib\Net\SSH2.php:1298
Stack trace:
#0 C:\ProgramData\Symcon\modules\.store\de.symcon.backup\libs\vendor\phpseclib\phpseclib\phpseclib\Net\SSH2.php(2156): phpseclib3\Net\SSH2->connect()
#1 C:\ProgramData\Symcon\modules\.store\de.symcon.backup\libs\vendor\phpseclib\phpseclib\phpseclib\Net\SSH2.php(2135): phpseclib3\Net\SSH2->sublogin('IPS')
#2 C:\ProgramData\Symcon\modules\.store\de.symcon.backup\Backup\module.php(636): phpseclib3\Net\SSH2->login('IPS', 'qMo5GkVlp&=vR4h...')
#3 C:\ProgramData\Symcon\modules\.store\de.symcon.backup\Backup\module.php(597): Backup->createConnectionEx('192.168.1.110', 22, 'I in C:\ProgramData\Symcon\modules\.store\de.symcon.backup\libs\vendor\phpseclib\phpseclib\phpseclib\Net\SSH2.php on line 1298
Abort Processing during Fatal-Error: Uncaught phpseclib3\Exception\UnableToConnectException: Cannot connect to 192.168.1.110:22. Error 10060. Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat. in C:\ProgramData\Symcon\modules\.store\de.symcon.backup\libs\vendor\phpseclib\phpseclib\phpseclib\Net\SSH2.php:1298
Stack trace:
#0 C:\ProgramData\Symcon\modules\.store\de.symcon.backup\libs\vendor\phpseclib\phpseclib\phpseclib\Net\SSH2.php(2156): phpseclib3\Net\SSH2->connect()
#1 C:\ProgramData\Symcon\modules\.store\de.symcon.backup\libs\vendor\phpseclib\phpseclib\phpseclib\Net\SSH2.php(2135): phpseclib3\Net\SSH2->sublogin('IPS')
#2 C:\ProgramData\Symcon\modules\.store\de.symcon.backup\Backup\module.php(636): phpseclib3\Net\SSH2->login('IPS', 'qMo5GkVlp&=vR4h...')
#3 C:\ProgramData\Symcon\modules\.store\de.symcon.backup\Backup\module.php(597): Backup->createConnectionEx('192.168.1.110', 22, 'I
   Error in Script C:\ProgramData\Symcon\modules\.store\de.symcon.backup\libs\vendor\phpseclib\phpseclib\phpseclib\Net\SSH2.php on Line 1298

Die Fehlermeldung wird zwar dadurch hervor gerufen, das ich die NAS um diese Zeit ausgeschaltet habe. Aber wieso wird um diese Zeit überhaupt ein Backup gefahren, eingestellt habe ich 21:00Uhr.

Hein09

vielleicht kannst du das ja and die Auswahl (wechsel Ordner nach) koppeln:

2023-022 für Kalenderwoche
2023-05 für Monat
2023-00 für Jahr

dann erkennt man sofort die Art der Sicherung

Hatte ich auch schon weiter oben moniert. Wenn die Meldung kommt ist sie immer 15 Minuten nach Start!

Danke für das Modul! Ich bin es aktuell am Testen.

Ein paar Dinge, die mir aufgefallen sind:

  • Stimmen die Zugangsdaten vom Server nicht, kommt bei „Suche Zielordner“ eine Exception. Die könnte man vielleicht noch abfangen und durch eine entsprechende Fehlermeldung ersetzen. Insbesondere, wenn man die Zugangsdaten gerade geändert und die Instanz-Config noch nicht gespeichert hat, ist das etwas verwirrend.

  • Man sieht leider nicht, ob aktuell ein Backup läuft. Vielleicht kann man die Info noch irgendwo hinterlegen und gleichzeitig verhindern, dass man ein weiteres Backup parallel startet.

  • Vielleicht könnte man Details zum Backupvorgang noch im Debug ausgeben und/oder im Konfigurationsformular. Dann würde man beim Blick in die Instanz sehen, ob und was gerade läuft.

  • Gefilterte Ordner: Hier wäre eine automatisch generierte Liste aller Ordner hilfreich, aus der man nur noch aussuchen muss statt die Ordnernamen einzutippen.

  • Evtl. könnte die Möglichkeit zum Abbrechen eines laufenden Backups Sinn machen.

Wie geht das Modul eigentlich mit abgebrochenen Backups um, speziell was die inkrementellen Backups angeht. Stellen die irgendein Problem dar?
Ich denke da z.B. an ein laufendes Backup, wenn man den Dienst beendet. Zukünftig wird ja nur noch 5 Minuten auf laufende Threads gewartet.

Das wird bereits korrekt gesperrt. Aber ja, eine Anzeige fehlt leider noch.

Das tun wird - aber nur, wenn du es quasi aus dem Formular gestartet hast.

Da dies eher eine Spezialfunktion ist, würde ich ungern den Mehraufwand investieren (spätestens bei Tree mit Rekursion wird es aufwendig)

Das ist mehr oder weniger egal. Spätestens zum nächsten Run korrigieren wir dies.

paresy