• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

tar - als Hintergrundprozess auf Tape

motions

Member
Ich sichere nachts mehrere Server-Teilbereiche jeweils, indem ich
1. eine Sicherungsdatei sicherung.tar.gz mittels tar auf einer separaten Festplatte erstelle
2. die Sicherungsdatei dann mittels tar auf Band schreibe

Das Verfahren möchte ich gerne parallelisieren, ich kriege nur den Ansatz nicht hin.
ich möchte also
1. Sicherungsdatei a.tar.gz erstellen
2. als Hintergrundprozess mittels tar auf Band schreiben (tar -cf /dev/nst0 a.tar.gz &)
3. Sicherungsdatei b.tar.gz erstellen (2. läuft noch)
4. warten bis 2 fertig ist, dann b.tar.gz auf Tape sichern (tar -cf /dev/nst0 b.tar.gz &)
5. Sicherungsdatei c.tar.gz erstellen (4. läuft noch)
6. warten bis 4 fertig ist, dann v.tar.gz auf Tape sichern (tar -cf /dev/nst0 c.tar.gz &)
....
Das ist also eher ein Problem der bash Script-Steuerung als ein reines tar-Problem
 

framp

Moderator
Teammitglied
motions schrieb:
... Das ist also eher ein Problem der bash Script-Steuerung als ein reines tar-Problem
Denke ich auch. Deshalb sollte dieser Thread besser von einem Mod zum KonsolenForum geschoben werden :roll:
 
Hi Motion,

Du kannst folgendes machen:

Code:
- a.tar.gz erstellen
tar -cf /dev/nst0 a.tar.gz &
TARA=$!
- b.tar.gz erstellen
wait $TARA
tar -cf /dev/nst0 b.tar.gz &
TARB=$!
- c.tar.gz erstellen
wait $TARB
...
Die PID vom letzten Hintergrundprozess kannst du mit $! abfragen.
wait <pid> wartet auf den Hintergrundprozess.

Achtung! Denk an einen Test ob tar nicht zufällig das Band zurückspult. Ansonsten würdest Du nur das letzte File behalten.
Irgendwann hatte ich mal Probleme damit, obwohl ich das norewind benutzt hatte.
Ich persönlich mag am Ende ein "eject" von dem Tape. Dann überschreibt niemand das Tape so leicht. Wenn im Fehlerfall das Tape
nicht ausgeworfen wird, kann man das sogar als Felhererkennung in den Arbeitsablauf einbauen.

Haveaniceday
 
OP
M

motions

Member
Hallo haveaniceday.
das sieht ja sehr gut aus.
Die Magie liegt darin die pid des parallel gestarteten Jobs zu erfassen und dann irgendwie später auf dessen Abschluß zu warten. Die Problematik des vollen Bandes habe ich hier auch schon bei den Einzelsicherungen.
Das sollte aber von der Kapazität des Bandes her passen.
Ich werde Deinen Entwurf mal die nächsten Tage testen.

Eine Job-Queue gibt es aber in der Bash nicht, oder? So das ich die tar jobs zum Tape einfach in eine Queue werfe und die NACHEINANDER parallel zum haupt-script abgearbeitet werden? Dann bräuchte ich eigentlich nur ganz am Ende ein Wait um auf die Leerung der Queue zu warten.
 
motions schrieb:
Eine Job-Queue gibt es aber in der Bash nicht, oder? So das ich die tar jobs zum Tape einfach in eine Queue werfe und die NACHEINANDER parallel zum haupt-script abgearbeitet werden? Dann bräuchte ich eigentlich nur ganz am Ende ein Wait um auf die Leerung der Queue zu warten.

Man kann einen Prozess in den Hintergrund stellen. Unabhängig davon: Ein wait ohne Argument wartet auf alle gestarteten Hintergrundjobs.
( tar ... ; tar ... ; tar ... ) &
Aber das hilf dir nicht, da deine Einpackjobs vor dem entsprechenden tarzu Ende sein müssen.

Ich persönlich würde eher alles auf einmal auf das Tape schreiben. Ohne Zwischendatei.
tar -czf /dev/nst0 -C patha .....listea... -C pathb ....listeb -C ....

Von der Systemlast sollte das angenehmer sein, da das Filesystem nur mit "Tapegeschwindigkeit" gelesen wird.

Haveaniceday
 
Oben