Mehrere Datastores auf EIN Tape sichern

high_performer

Renowned Member
Jul 16, 2018
27
6
68
Hallo, liebe Tape Gemeinde,

es geht um Tape-Backup Jobs.
Habe keine Tape-Library, nur ein LTO8 Laufwerk.

Nun stelle ich mir vor, ganau an dieser Stelle ("Local Datastore") mehrere Datastores auswählen zu können.

Dann sichern, tape auswerfen, wenn fertig. Funktioniert ja auch - aber halt nur mit EINEM Datastore :oops:

1785924034829.png

Andere probate Lösungen sind natürlich herzlich willkommen!

Ich habe es schon mit 2 Tape-Backup Jobs versucht - einer startet um 05:00 ein zweiter um 05:05.
Klar: der 2. läuft um 05:05 auf ein "lock" - weil er erste das Band für sich einnimmt.
Funktioniert! Aber - der 2. Job fordert ein neues Tape an...
 
Last edited:
Mit einem Standalone-Laufwerk kannst du im Job nur einen Datastore auswählen. Der Knackpunkt bei deinen zwei Jobs ist die Allocation Policy vom Media Pool: wenn sie auf "Always Create New Media-Set" (oder auf einem Kalender-Event das zwischen den beiden Läufen greift) steht, macht Job 2 ein neues Media-Set auf und braucht dann ein frisches Band. Auf continue gestellt schreibt der zweite Job seine Snapshots aufs laufende Media-Set, also aufs selbe Tape. Beide Jobs natürlich in denselben Pool, und Eject/Export nur beim letzten abhaken, sonst ist das Band beim zweiten Durchlauf schon raus.

Die 5-Minuten-Versetzung würd ich mir sparen und das sequenziell per Skript machen: proxmox-tape backup <store> <pool> --drive <drive> für jeden Datastore hintereinander mit && verkettet, am Ende einmal proxmox-tape eject --drive <drive>, das Ganze per Cron oder systemd-Timer statt der GUI-Jobs. Dann gibts kein Lock-Gewürfel und du weißt genau, in welcher Reihenfolge geschrieben wird.

Wie ist die Allocation Policy bei deinem Pool "daily" denn aktuell gesetzt?
 
  • Like
Reactions: Johannes S
Wenn der Pool auf continue steht, wie erzwinge ich trotzdem eine echte Wochentagsrotation, sodass am nächsten Tag nicht wieder dasselbe Band verwendet / angefordert wird?
 
Für die Tagesrotation ist continue eigentlich schon der falsche Weg. Setz stattdessen die Allocation Policy vom Pool auf ein Kalender-Event, z.B. daily. Dann macht der erste Job nach Mitternacht ein neues Media-Set auf, der 05:05-Job hängt sich ans laufende Set dran (also selbes Band), und am nächsten Morgen gibts wieder ein neues Set. Auf dem Pool musst du noch die Retention setzen (z.B. 6 days bei Mo-Fr), sonst laufen die alten Sets nie ab und PBS will dir ständig ein frisches Band unterjubeln.

Was du damit aber nicht kriegst, ist eine feste Zuordnung "Band Dienstag = Dienstag". PBS nimmt aus dem Pool irgendein Medium das leer oder abgelaufen ist, nicht das mit dem passenden Namen. Wenn du wirklich eine saubere Wochentagsrotation brauchst, musst du pro Wochentag einen eigenen Media Pool machen (Mo, Di, ...). Allocation auf always setzen und Retention so, dass das Set kurz vor dem nächsten Turnus abläuft. Die Jobs dann jeweils mit Schedule mon, tue usw. an ihren Pool hängen. Bänder entsprechend labeln, dann meckert das Laufwerk auch wenn du am Mittwoch versehentlich das Montagsband einlegst.

Nebenbei, wie viele Datastores sind es denn insgesamt und wie viel Daten pro Nacht? Bei LTO8 und mehreren Jobs hintereinander wird die Reihenfolge sonst schnell zum Ratespiel.
 
Ja Moiner,

ich würde 2 Datastores auf EIN Tape bringen wollen. Eines ist von einem anderen Standort hergesynct. Sync findet jede Nacht statt.

ich habe die Parameter jetzt mal angepasst, bin auf morgen gespannt!

Ja - das mit den Wochentagen als Label war keine soo gute Idee ;) - aber man muss die ganzen Parameter und Prozesse auch erstmal durchdringen.

Ob wirkliche Wochentagsrotation erforderlich ist, hmm.
Zumal wir unsere Lokalen Backups ja auch an den anderen Standort synchen.
 
  • Like
Reactions: Bu66as
Tage später - habe einiges probiert - jetzt wirds lang
Natürlich — hier ist die anonymisierte und etwas gestraffte Fassung. Ich habe ersetzt:



Zwei Tape-Backup-Jobs mit einem Standalone-Laufwerk: neues Media Set zwischen den Jobs​

Hallo zusammen,

ich betreibe einen Proxmox Backup Server 4.2.4 mit einem einzelnen Standalone-LTO-8-Laufwerk.

Da ein Tape-Backup-Job derzeit nur einen Datastore sichern kann, habe ich zwei getrennte Tape-Backup-Jobs für zwei Datastores eingerichtet.

Konfiguration​

Hardware​

  • Proxmox Backup Server 4.2.4
  • ein Standalone-LTO-8-Laufwerk
  • kein Tape-Changer

Media Pool​

  • gemeinsamer Media Pool für beide Jobs
  • Allocation Policy: daily
  • CreateAt-Ereignis: 00:00
  • Retention: 6 days
  • Medien können wiederverwendet werden, sobald die Retention dies erlaubt

Tape-Backup-Job A​

  • Datastore A
  • Zeitplan: 05:00
  • Latest Only: aktiviert
  • Eject Media: deaktiviert

Tape-Backup-Job B​

  • Datastore B
  • Zeitplan: 05:15
  • Latest Only: aktiviert
  • Eject Media: aktiviert

Gewünschter Ablauf​

Der gewünschte Ablauf:

  1. Job A startet um 05:00 Uhr.
  2. Job A eröffnet aufgrund der Allocation Policy ein neues tägliches Media Set.
  3. Job A schreibt die Daten von Datastore A auf das angeforderte Tape.
  4. Job A beendet den Sicherungslauf, wirft das Tape aber nicht aus.
  5. Job B wartet währenddessen auf den Drive Lock.
  6. Nach Ende von Job A übernimmt Job B das Laufwerk.
  7. Job B verwendet dasselbe Media Set und schreibt auf demselben Tape weiter.
  8. Job B schreibt am Ende den aktualisierten Medienkatalog.
  9. Job B wirft das Tape aus.
Job B soll somit kein eigenes Media Set eröffnen, sondern das von Job A begonnene Media Set fortsetzen.


Funktionierender Fall​

Wenn das angeforderte Tape noch am selben Tag eingelegt wird und Job A sowie Job B direkt nacheinander laufen, funktioniert der Ablauf wie gewünscht.

Job A eröffnet ein neues Media Set und schreibt auf Tape A.

Nach dem erfolgreichen Ende von Job A übernimmt Job B unmittelbar den Drive Lock. Job B zeigt dieselbe Media-Set-UUID wie Job A und verwendet ebenfalls Tape A.

Im Log von Job B erscheinen dann unter anderem folgende Meldungen:

  • media set uuid: <identisch mit Job A>
  • allocated new writable media 'Tape A'
  • found media label Tape A
  • moving to end of media
  • arrived at end of media
Job B schreibt damit hinter den Daten von Job A weiter.

Am Ende von Job B erscheinen:

  • percentage done: 100.00%
  • append media catalog
  • standalone drive - ejecting media
  • TASK OK
Der gewünschte Ablauf funktioniert in diesem Fall vollständig:

Job A → Job B → gleiches Media Set → gleiches Tape → Auswurf durch Job B


Problemfall bei längerer Wartezeit​

Das Problem tritt auf, wenn Job A längere Zeit auf das angeforderte Tape wartet und dabei weitere tägliche CreateAt-Zeitpunkte verstreichen.
(Trödeligkeit, vergessen Tape zu wechseln, Abwesenheit - das Leben halt!)

In einem konkreten Fall war der Ablauf folgender:

  • Job A startete am ersten Tag um 05:00 Uhr.
  • Job A eröffnete Media Set A und forderte Tape A an.
  • Job B startete um 05:15 Uhr und wartete auf den Drive Lock.
  • Tape A wurde erst ungefähr 50 Stunden später eingelegt.
  • Job A schrieb anschließend erfolgreich auf Tape A.
  • Job A endete mit TASK OK.
  • Job B erhielt danach den Drive Lock.
Job B verwendete jedoch nicht das bereits von Job A eröffnete Media Set.

Stattdessen meldete Job B:

  • starting new media set - reason: policy CreateAt event triggered
  • eine neue Media-Set-UUID
  • allocated new writable media 'Tape B'
Das von Job A verwendete Tape A befand sich noch im Laufwerk, wurde von Job B jedoch abgelehnt:

  • wrong media label Tape A
  • Please insert media 'Tape B' into drive
Job B setzte den Sicherungslauf erst fort, nachdem Tape B eingelegt worden war.

Das Ergebnis war damit:

Job A → Tape A → Media Set A

und anschließend:

Job B → Tape B → Media Set B

Statt des gewünschten Ablaufs:

Job A → Job B → Tape A → gemeinsames Media Set


Vermutete Ursache​

Der Zeitpunkt, zu dem Job B durch den Zeitplan erzeugt wurde, scheint für die Media-Pool-Allocation nicht allein maßgeblich zu sein.

Job B wurde zwar bereits am ersten Tag um 05:15 Uhr gestartet und wartete seitdem auf den Drive Lock. Die Allocation Policy beziehungsweise das CreateAt-Ereignis scheint jedoch erneut ausgewertet zu werden, wenn Job B tatsächlich den Drive Lock erhält und mit dem Tape-Backup beginnt.

Da zwischen Jobstart und tatsächlichem Beginn weitere tägliche CreateAt-Zeitpunkte verstrichen waren, eröffnete Job B ein neues Media Set.

Das Verhalten unterscheidet sich somit abhängig von der Wartezeit:

Kurze Wartezeit​

Job A und Job B laufen innerhalb derselben Allocation-Periode:

Job A → Job B → gleiches Media Set → gleiches Tape

Lange Wartezeit​

Zwischen Job A und dem tatsächlichen Beginn von Job B verstreichen weitere CreateAt-Zeitpunkte:

Job A → Media Set A → erneutes CreateAt → Job B → Media Set B


Auswirkungen​

Das Verhalten hat bei einem Standalone-Laufwerk mehrere praktische Auswirkungen:

  • Job B schreibt nicht auf dem von Job A verwendeten Tape weiter.
  • Für einen zusammengehörigen Sicherungslauf werden zwei Tapes benötigt.
  • Das erste Tape wird nicht ausgeworfen.
  • Job A ist absichtlich mit Eject Media: No konfiguriert.
  • Nur Job B besitzt Eject Media: Yes.
  • Wenn Job B ein anderes Tape verlangt, kann Job B das erste Tape nicht auswerfen.
  • Der gewünschte gemeinsame Tages-Mediensatz wird auf zwei Media Sets aufgeteilt.
  • Während der längeren Wartezeit können weitere geplante Tape-Jobs auflaufen und ebenfalls auf den Drive Lock warten.

Verhalten mit Allocation Policy​

Die Allocation Policy continue wurde ebenfalls geprüft.

Mit continue entsteht kein neues tägliches CreateAt-Ereignis zwischen Job A und Job B. Beide Jobs können daher grundsätzlich das aktuelle Media Set fortsetzen.

Das löst jedoch nicht die vollständige Anforderung.

Gewünscht ist:

  • ein neues Media Set pro Tag beziehungsweise Sicherungslauf,
  • aber ein gemeinsames Media Set für beide Datastores.
Mit continue wird das aktuelle Media Set potenziell über mehrere Tage und mehrere Sicherungsläufe hinweg weitergeführt.

Es ergibt sich damit folgender Zielkonflikt:

Allocation Policy​

Vorteil:

  • Es entsteht regelmäßig ein neues Media Set.
Nachteil:

  • Wenn Job A über einen weiteren CreateAt-Zeitpunkt hinweg auf das Tape wartet, kann Job B später ein neues Media Set eröffnen.

Allocation Policy​

Vorteil:

  • Zwischen Job A und Job B entsteht kein neues zeitgesteuertes Media Set.
Nachteil:

  • Das Media Set wird auch über weitere Tage hinweg fortgesetzt.
  • Die gewünschte tägliche Media-Set-Grenze fehlt.

Gewünschte Verbesserung​

Die aus meiner Sicht sauberste Lösung wäre, in einem Tape-Backup-Job mehrere Datastores auswählen zu können.

Beispielsweise:

  • Datastore A
  • Datastore B
  • ein gemeinsamer Media Pool
  • ein gemeinsames Media Set
  • einmalige Auswertung der Allocation Policy
  • ein abschließender Medienkatalog
  • einmaliger Auswurf nach Abschluss aller Datastores
Der gesamte Ablauf könnte dann als ein zusammenhängender Task behandelt werden:

Media Set eröffnen → Datastore A sichern → Datastore B sichern → Medienkatalog schreiben → Tape auswerfen

Damit würden folgende Probleme vermieden:

  • keine erneute Auswertung von CreateAt zwischen den Datastores
  • kein Wettbewerb um den Drive Lock zwischen zwei Tape-Jobs
  • kein unerwartetes zweites Media Set
  • kein zusätzliches Tape nur aufgrund einer längeren Wartezeit
  • kein ausbleibender Auswurf des ersten Tapes
  • keine aufgestauten, unabhängig wartenden Tape-Jobs
  • eindeutiger gemeinsamer Status für den gesamten Tape-Sicherungslauf

Fragen​

  1. Ist dieses Verhalten bei PBS 4.2.4 beabsichtigt?
  2. Wird die Allocation Policy eines wartenden Jobs erneut ausgewertet, wenn der Job tatsächlich den Drive Lock erhält?
  3. Ist für die CreateAt-Auswertung der geplante Startzeitpunkt oder der tatsächliche Beginn des Tape-Zugriffs maßgeblich?
  4. Gibt es eine unterstützte Möglichkeit, Job B verbindlich an das von Job A eröffnete Media Set zu koppeln?
  5. Kann verhindert werden, dass ein bereits seit längerer Zeit wartender Job auf zwischenzeitlich eingetretene CreateAt-Ereignisse reagiert?
  6. Gibt es eine empfohlene Konfiguration für zwei Datastores, einen Media Pool und ein Standalone-Laufwerk?
  7. Ist geplant, mehrere Datastores innerhalb eines einzelnen Tape-Backup-Jobs auswählen zu können?

Kurzfassung​

Zwei getrennte Tape-Backup-Jobs mit demselben Media Pool und einem Standalone-Laufwerk können dasselbe Media Set und Tape verwenden, wenn beide Jobs innerhalb derselben Allocation-Periode direkt nacheinander laufen.

Wartet der erste Job jedoch über weitere tägliche CreateAt-Zeitpunkte hinweg auf das Tape, kann der zweite bereits wartende Job beim späteren Erhalt des Drive Locks ein neues Media Set eröffnen und ein anderes Tape verlangen.

Die Allocation Policy continue verhindert dieses Verhalten, führt das Media Set aber unerwünscht über mehrere Tage fort.

Die ideale Lösung wäre daher ein einzelner Tape-Backup-Job, in dem mehrere Datastores ausgewählt und sequenziell in dasselbe Media Set geschrieben werden können.