tar soll automaisch je 2GB Dateien anlegen!

Post Reply
Message
Author
StefanG.

tar soll automaisch je 2GB Dateien anlegen!

#1 Post by StefanG. »

Hallo!

Auf meiner Fat32 Partition soll eine tar Archiv entstehen, welches >2GB ist, FAT32 unterstützt nur max 2GB Dateien.
Wie kann ich tar sagen, dass es die zu archivierenden Dateien automatisch in je 2GB Archive aufteilen soll?

Gruß
StefanG

Torsten

Re: tar soll automaisch je 2GB Dateien anlegen!

#2 Post by Torsten »

Hallo StefanG,

die Option -L 2048000 erstellt die entsprechende Dateigröße .... beachte aber, daß bei mehreren Dateien noch der Zusatz -M (Multi-Volume) erfolgen muß und die nächste Datei den gleichen Namen erhält, also den ersten Duchlauf wieder überschreibt. Durch die Option werden die 2 GB natürlich nicht unbegingt ausgeschöpft, es folgt einfach nur ein neues Archiv, wenn die Größe erreicht wurde.

tar unterstützt nach meinem Wissen nur Dateien bis max. 2 GB, ich habe die Teilstücke kleiner gefaßt, da kleinere Dateien auch schneller geöffnet werden und man einzelne Dateien aus den Archiven somit schneller herausholt, weiterhin kann man sich mehrere Dateien schnappen und auf CD knallen ohne die 2 GB großen Brocken wieder teilen zu müssen, aber das mußt Du selbst wissen ... bei mir läuft der ganze Spaß über Script, gestartet über den Cron ab und das ausgesprochen gut. Damit sichere ich viermal im Monat drei Datenlaufwerke mit insgesamt z.Z. belegt 8 GB auf eine extra Platte in 1,5 Stunden. Nach jedem Durchlauf wird bei mir über ein spezielles 2. Script das letzte Archiv komprimiert und unter <Dateiname> & <Datum_Uhrzeit> weggeschrieben.

Unterstützung für tar auf deutsch gibt es z.B. hier

<a href="http://www.linux-ag.de/linux/LHB/node11 ... 0000000000" target="_blank"><!--auto-->http://www.linux-ag.de/linux/LHB/node11 ... <!--auto-->

Wenn Du mehr wissen willst, der Held bin ich mit tar auch nicht, aber meine Lösung kann ich erklären.

CU

Torsten

Descartes

Re: tar soll automaisch je 2GB Dateien anlegen!

#3 Post by Descartes »

Wie wäre es, mit dem "split" Kommando ?
Mit tar die Sicherung durchführen, die Daten aber dann nicht direkt in eine Datei schreiben, sondern über eine Pipe an "split" weiterleiten der dann daraus mehrere Einzeldateien erzeugt.

Beispiel:
tar cf - /home | split --bytes=10m - home_sicherung.tar.

Entpacken oder mal eben schnell ins "tar" File reinschauen geht dann indem du alle Dateien per "cat" zusammenbaust und wiederum per Pipe an "tar" schickst.

Beispiel:
cat sicherung.tar.a? | tar tf -

Descartes

Re: tar soll automaisch je 2GB Dateien anlegen!

#4 Post by Descartes »

Anmerkung:
tar cf - /home | split --bytes=10m - home_sicherung.tar. <-- der abschliessende Punkt ist beabsichtigt !

Das "split" Kommando erzeugt dann Dateien mit der Dateiendung aa, ab, ac, ...

home_sicherung.tar.aa
home_sicherung.tar.ab
home_sicherung.tar.ac
home_sicherung.tar.ad
...


Das ganze kann man natürlich auch noch mit "gzip" Verbinden um die Daten zu komprimieren (abschliessender Punkt ist wieder beabsichtigt!):

tar cf - /home | gzip --stdout | split --bytes=10m - home_sicherung.tar.gz.

Und den Archivinhalt wieder anzeigen:
cat home_sicherung.tar.gz.a? | gzip --decompress --stdout | tar tf -

StefanG.

Re: tar soll automaisch je 2GB Dateien anlegen!

#5 Post by StefanG. »

Hi! erst mal danke an alle für die Infos.
@Torsten: Wie kann ich denn verhindern, dass die Datei jedesmal überschrieben wird?

Gruß
StefanG.

User avatar
Stormbringer
Posts: 1570
Joined: 11. Jan 2001 11:01
Location: Ruhrgebiet

Re: tar soll automaisch je 2GB Dateien anlegen!

#6 Post by Stormbringer »

Hi,

vielleicht findest Du hier ja etwas (fast) fertiges: <a href="http://www.linux-backup.org/" target="_blank"><!--auto-->http://www.linux-backup.org/</a><!--auto-->

Gruß
Continuum Hierarchy Supervisor:
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)

Descartes

Re: tar soll automaisch je 2GB Dateien anlegen!

#7 Post by Descartes »

>
> Wie kann ich denn verhindern, dass die Datei jedesmal überschrieben wird?
>
Mit meiner tar+split Methode wird die Zieldatei nicht überschrieben...

Torsten

Re: tar soll automaisch je 2GB Dateien anlegen!

#8 Post by Torsten »

@ StefanG: Die Antwort darauf ist ein Script, das nach jedem Durchlauf abgearbeitet wird:

Ich rufe den tar in folgender Form auf:

tar cv -L 66560 -f /backup/sicher.tar /samba/austausch -M -F /root/BackScrpt.sh >>/backup/temp/log.txt 2>>/backup/temp/errorlog.txt

tar erstellt ein neues Archiv (c) und meldet jede Aktion (v), macht Teilstücke in 64 MB (-L 66560) in das Archiv /backup/sicher.tar (f) aus dem Verzeichnis /samba/austausch; da mehrere Dateien entstehen (hinter "austausch" verbirgt sich z.B. eine Platte mit 18 GB) wird ein Multi-Volume erstellt (-M) und nach jedem Brocken wird ein Script aufgerufen(/root/BackScrpt.sh), das das jeweilige neue Archiv (/backup/sicher.tar) komprimiert und unter einem neuem Namen wegschreibt [Dateiname&<Datum/Uhrzeit>] (muß passieren, da sonst der nächste tar-Durchlauf die gleiche Datei nutzt und diese überschreibt); alle Meldungen werden in log.txt geloggt und alle Fehler in errorlog.txt;

in dem Script nach jedem tar-Durchlauf (/root/BackScrpt.sh) kommt folgendes zum Einsatz:
# hier wird eine Variable mit aktuellem Datum und Zeit gesetzt
# dadurch stehen die Dateien in cronologischer Reihenfolge und werden nie überschrieben
DATUM=$(date "+%d.%m.%Y_%X")

# hier komprimiert zip die /backup/sicher.tar in die jeweilige Datei
# mit Datum/Uhrzeit (sollte ähnlich auch mit kopieren oder umbenennen funktionieren,
# wenn nicht gezippt werden soll)
zip /sicherung/backup$DATUM.tar.zip /backup/sicher.tar

Im Original sind meine Scripte etwas komplizierter aufgebaut:
- der Spaß läuft in drei Schleifendurchläufen ab (drei Sicherungsplatten)
- alles wird geloggt (Erfolge und Fehler) --> die Erfolge dienen mir zum Suchen nach einer bestimmten Datei, damit ich weiß in welcher Backupdatei sich das Teil befindet (deshalb mache ich tar "gesprächig") und die Fehler natürlich logisch: "Vier abgebrochene Backups und ein Plattendefekt - hätte ich mir alles sparen können!"
- ich will meine Backups nur vier Wochen liegen lassen, das heißt, in jedem Durchlauf wird ein alter Backup gelöscht
- ich arbeite nicht mit den absoluten Pfaden, vielmehr wird der Pfadname jeweils über Variablen gesetzt
- das Errorlog wird an root gemailt
- im Mail soll auch etwas zur Plattenauslastung stehen (wieviel Platz sind noch auf den Datenlaufwerken bzw. im Sicherungslaufwerk frei)
- die Logdatei wird auch noch gezippt (hat ca. 1 MB)
- da vier verschiedene Startermine, wird in vier verschiedene Ordner gesichert usw. usf.
- ich sichere auf eine 80 GB Festplatte (ich weiß, ist etwas versnoppt, aber einStreamer ist teurer als 'ne HDU)
- ich will die Dateien über Samba sehen und bearbeiten können, d.h. nach jedem Backup werden noch Rechte gesetzt
- ein Vorteil der 64 MB großen Dateien --> wenn man einen Brenner hat, dann passen immer zehn auf eine Scheibe !!!

Ich will auch nicht verschweigen: bei der Programmierung hat mir ein Unix-Admin geholfen das 1.Script auf ca. 30 Zeilen und das 2.Script auf ca 10 Zeilen zu kürzen; angeblich geht auch jedes Script in einer Zeile, aber dann soll es richtig unübersichtlich werden <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

Wenn Du willst, ich schicke Dir (und jedem anderen) den Spaß gerne mal kommentiert zu, einfach eine Mail an schmidt.torsten@gmx.net ... anpassen mußt Du (Ihr) es dann aber an Dein (Euer) System selbst. Bei großem Interesse poste ich die Teile hier auch ...

CU

Torsten

StefanG.

Re: tar soll automaisch je 2GB Dateien anlegen!

#9 Post by StefanG. »

Vielen Dank erstmal!
Ich werde das Skript ausprobieren!

StefanG.

StefanG.

Re: tar soll automaisch je 2GB Dateien anlegen!

#10 Post by StefanG. »

Hallo,

poste doch mal diesen "Einzeiler"!!

Gruß
StefanG.

Torsten

Re: tar soll automaisch je 2GB Dateien anlegen!

#11 Post by Torsten »

Mich wegen der Menge bitte nicht schlagen ...

Zu Beginn, ich erhebe keinen Anspruch auf Vollständigkeit bzw. übernehme ich natürlich auch keine Garantie für die beiden Scripte. Wenn jemand etwas daran auszusetzen hat, viel Spaß, es ist mir egal. Da es sich um einfache Scripte handelt, kann die jeder weiterentwickeln oder ändern. am Ende habe ich beide Scripte nochmal ohne Kommentare angehängt, falls jemand die ohne meinen "geistigen Erguß" lesen will.

Wie bereits erwähnt, ich habe drei Festplatten mit wechselndem Datenbestand, also Platten, die per Samba im Netz freigegeben sind und die viermal im Monat gesichert werden sollen. Hierbei handelt es sich um

Platte 1 Mountpunkt /samba/austausch
Platte 2 Mountpunkt /samba/allgemein
Platte 3 Mountpunkt /home

Die Sicherung erfolgt auf eine vierte Festplatte, die ich bei mir auf /backup gemountet habe. Die Sicherung wird per Cronjob jeweils am 1, 12, 17 und 26 eines jeden Monats durchgeführt. Anhand des Datums speichert das Script in den richtigen Ordner im Backup-Laufwerk. Also die Sicherung vom 1. des Monats geht nach backup/tag01/, die vom 12 geht auf /backup/tag12/ usw. usf.

Die Ordnerstruktur auf /backup sieht so aus:

/backup-|
-----------/tag01--|
----------------------/austausch
----------------------/allgemein
----------------------/home

-----------/tag12--|
----------------------/austausch
----------------------/allgemein
----------------------/home

-----------/tag17--|
----------------------/austausch
----------------------/allgemein
----------------------/home

-----------/tag26--|
----------------------/austausch
----------------------/allgemein
----------------------/home

-----------/temp

Alle diese Ordner (auch temp) werden im Script irgendwie gebraucht. Die Daten werden in 65 MB großen Teilen abgelegt und der Ordner /backup wird über Samba im Netz angeboten, d.h. ich kann von jedem System aus in jede Sicherung gehen. In jeder Sicherung (z.B. /backup/tag01/austausch) liegt eine gezippte Log-Datei, in der wurde während des Backups die Aktivität des tar und der dazugehörige gezippte Backupname gespeichert. Somit kann man hier nach der entsprechenden Datei suchen und weiß damit die Backupdatei und kann diese gezielt öffnen und daraus wiederherstellen. Das 1. Script heißt Backup.sh und liegt im Ordner /root.

Backup.sh:
>>>>>>>>>>>>>>>> schnipp <<<<<<<<<<<<<<<
#!/bin/bash

# zuerst einige Standardvariable, nur um den Schreibaufwand etwas gering zu halten
# PFAD2 ist der Pfad, in dem gearbeitet wird, also Zwischenlagerung der gezippten Dateien und der
# Logdateien --> alles was hier nach dem Backup noch liegt, kann weg (sollte nichts mehr liegen, höchstens bei
# Fehlern)
# STERN und STRICH werden in den Logdateien als Trennungen eingefügt
# dom (day of month) nimmt den aktuellen Tag in sich auf (tag01, tag12 ...) --> hierauf begründet
# sich, in welchem Ordner später die gezippten Archive abgelegt werden
PFAD2="/backup/temp"
STERN="**********************************************"
STRICH="===================================================="
dom="tag$(date +%d)"

# wir beginnen mit /samba/austausch, weiter mit /samba/allgemein und /home
# ************************************************************************

# für jedes der aufgeführten Verzeichnisse (Variable VERZ) in der Reihenfolge
# 1. /samba/austausch
# 2. /samba/allgemein
# 3. /home
# alle Befehle zwischen do und done
for VERZ in /samba/austausch /samba/allgemein /home
do

# im Fall, daß jetzt /samba/austausch dran ist, wird die Variable PFAD auf /backup/$dom/austausch gesetzt
# im Fall, daß jetzt /samba/allgemein dran ist, wird die Variable PFAD auf /backup/$dom/allgemein gesetzt
# im Fall, daß jetzt /home dran ist, wird die Variable PFAD auf /backup/$dom/home gesetzt
# man beachte die Variable dom --> hier wird der aktuelle PFAD um z.B. tag01, tag12 usw. ergänzt
case $VERZ in
/samba/austausch) PFAD=/backup/$dom/austausch ;;
/samba/allgemein) PFAD=/backup/$dom/allgemein ;;
/home) PFAD=/backup/$dom/home ;;
esac

# hier wird der PFAD beräumt, d.h. der Backup vom letzten Monat am gleichen Tag wird gelöscht
# alle Dateien mit dem Namen back* bzw. dem Suffix txt gehen in den Schrott, eventuelle Fehlermeldungen
# ins Nirvana
rm $PFAD/back* $PFAD/*.txt 2>/dev/null

# der folgende Befehl schreibt uns die ersten Zeilen in unser Logscript, rein informativ um welche Sicherung
# und von wann es sich handelt und wie es um die Auslastung unserer Datenpartition bestellt ist
echo "gesicherte Daten im Backup $VERZ vom $(date "+%d.%m.%Y_%X")" > $PFAD2/log.txt
echo $STRICH >> $PFAD2/log.txt
echo "Auslastung:" >> $PFAD2/log.txt
echo $(df -h $VERZ) >> $PFAD2/log.txt
echo $STRICH >> $PFAD2/log.txt

# der gleiche Spaß nochmal ins Errorlog, denn das ist die Datei, deren Inhalt nachher an Root geschickt
# wird, denn die log.txt schaue ich mir nur an, wenn ich was zurücksichern muß
echo "wichtige Informationen zum Datenbackup $VERZ vom $(date "+%d.%m.%Y_%X")" > $PFAD2/errorlog.txt
echo $STRICH >> $PFAD2/errorlog.txt
echo "Auslastung:" >> $PFAD2/errorlog.txt
echo $(df -h $VERZ) >> $PFAD2/errorlog.txt
echo $STRICH >> $PFAD2/errorlog.txt

# jetzt kommt tar ins Spiel, die einzelnen Optionen:
# c --> neues Archiv
# v --> tar plottet die Aktivitäten mit (tar wird "gesprächig")
# -L 66560 --> das tar-File wird max. 65 MB groß
# -f /backup/zwschsi.tar --> sichere ersteinmal in diese Datei
# $VERZ --> Variable kommt ja von oben und enthält den zu sichernden Pfad
# -M --> erzeuge ein Multi-Volume
# -F /root/BackScrpt.sh nach jedem Durchlauf (die tar-Datei ist voll) das Script ausführen
# >>$PFAD2/log.txt --> Aktivitäten ins /temp/log.txt# 2>>$PFAD2/errorlog.txt --> Fehler in /temp/errorlog.txt
# hier lohnt sich dann zum besseren Verständnis die Vorstellung, die tar-Datei ist voll, wir schauen mal ins
# Script BackScrpt.sh, denn bei diesem tar-Befehl verweilt der Rechner, bis alle Dateien im Ordner VERZ in die
# tar-Dateien gesichert wurden
tar cv -L 66560 -f /backup/zwschsi.tar $VERZ -M -F /root/BackScrpt.sh >>$PFAD2/log.txt 2>>$PFAD2/errorlog.txt

# nach dem letzten Archiv wird das Script BackScrpt.sh leider nicht nocheinmal ausgeführt, d.h. hier erfolgt
# nochmal die Bestimmung des Datums und der Uhrzeit des Backups, der Eintrag in die Logdatei, um welche Backupdatei
# es sich diesmal dreht und es folgt der zip-Befehl (wie im BackScrpt.sh)
DATUM=`date "+vom_%d.%m.%Y_Zeit_%H.%M.%S"`
echo "$STERN
bearbeite Archiv $DATUM
$STERN
" >>$PFAD2/log.txt
zip $PFAD2/backup_$DATUM.tar.zip /backup/zwschsi.tar >>$PFAD2/log.txt 2>>$PFAD2/errorlog.txt

# die Sicherung ist fast durch: zum Abschluß wird das Logfile in den Sicherungspfad gezippt, das letzte tar wird
# entfernt
zip $PFAD/log.txt.zip $PFAD2/log.txt
rm /backup/zwschsi.tar $PFAD2/log.txt

# das errorlog wird noch etwas aufgepeppt mit Informationen zum verbleibenden Platz auf dem Backuplaufwerk
echo $STRICH >> $PFAD2/errorlog.txt
echo "Information zur verbleibenden Speicherplatz im Laufwerk /backup ..." >> $PFAD2/errorlog.txt
echo $STRICH >> $PFAD2/errorlog.txt
echo "Auslastung im Backup-Laufwerk:" >> $PFAD2/errorlog.txt
echo $(df -h /backup) >> $PFAD2/errorlog.txt
echo $STRICH >> $PFAD2/errorlog.txt

# alle backup-Dateien und alles, was den Suffix txt trägt, wird in den eigentlichen Sicherungspfad verschoben
mv $PFAD2/backup* $PFAD
mv $PFAD2/*.txt $PFAD

# jetzt erfolgt ein Mail an root auf erde (die Linux-Maschine) und in das Mail eingefügt werden die Daten aus
# errorlog.txt
mailx -s "Datensicherung $VERZ beendet ..." root@erde < $PFAD/errorlog.txt

# entweder es folgt das nächste Verzeichnis oder der Rechner ist fertig (siehe Einstieg bei do)
done

# hier setze ich die Benutzerrechte für den User torsten und die Gruppe samba auf alle Dateien, damit ich die
# Dateien auch über die Sambafreigabe bearbeiten kann
chown torsten:samba /backup/$dom/*
chmod 770 /backup/$dom/*

>>>>>>>>>>>>>>>> schnapp <<<<<<<<<<<<<<<

Das 2. Script liegt ebenfalls im Ordner /root und hat folgenden Inhalt:

>>>>>>>>>>>>>>>> schnipp <<<<<<<<<<<<<<<
#!/bin/bash

# hier wieder das Setzen der Variablen (leider werden die nicht aus dem 1. Script übernommen)
PFAD2="/backup/temp"
STERN="**********************************************"

# hier wird die Variable DATUM mit Datum und Uhrzeit befüllt; diese wird beim zippen an den Dateinamen angehängt
DATUM=`date "+vom_%d.%m.%Y_Zeit_%H.%M.%S"`

# kurzer Eintrag in die Logdatei, um welche Sicherung es sich handelt
echo "$STERN
bearbeite Archiv $DATUM
$STERN
" >>$PFAD2/log.txt

# zippen des tar-Archivs in die Zip-Datei
zip $PFAD2/backup_$DATUM.tar.zip /backup/zwschsi.tar

# zur Sicherheit eine Löschung des tar-Archivs und automatisch zurück zum 1. Script
rm /backup/zwschsi.tar
>>>>>>>>>>>>>>>> schnapp <<<<<<<<<<<<<<<

Hier die Scripte ohne Kommentare (bzw. im Original, wie die bei mir liegen):
>>>>>>>>>>>>>>>> schnipp Backup.sh<<<<<<<<<<<<<<<
#!/bin/bash

PFAD2="/backup/temp"
STERN="**********************************************"
STRICH="===================================================="
dom="tag$(date +%d)"

# wir beginnen mit /samba/austausch, weiter mit /samba/allgemein und /home
# ************************************************************************

for VERZ in /samba/austausch /samba/allgemein /home
do
case $VERZ in
/samba/austausch) PFAD=/backup/$dom/austausch ;;
/samba/allgemein) PFAD=/backup/$dom/allgemein ;;
/home) PFAD=/backup/$dom/home ;;
esac

rm $PFAD/back* $PFAD/*.txt 2>/dev/null

echo "gesicherte Daten im Backup $VERZ vom $(date "+%d.%m.%Y_%X")" > $PFAD2/log.txt
echo $STRICH >> $PFAD2/log.txt
echo "Auslastung:" >> $PFAD2/log.txt
echo $(df -h $VERZ) >> $PFAD2/log.txt
echo $STRICH >> $PFAD2/log.txt

echo "wichtige Informationen zum Datenbackup $VERZ vom $(date "+%d.%m.%Y_%X")" > $PFAD2/errorlog.txt
echo $STRICH >> $PFAD2/errorlog.txt
echo "Auslastung:" >> $PFAD2/errorlog.txt
echo $(df -h $VERZ) >> $PFAD2/errorlog.txt
echo $STRICH >> $PFAD2/errorlog.txt

tar cv -L 66560 -f /backup/zwschsi.tar $VERZ -M -F /root/BackScrpt.sh >>$PFAD2/log.txt 2>>$PFAD2/errorlog.txt

DATUM=`date "+vom_%d.%m.%Y_Zeit_%H.%M.%S"`

echo "$STERN
bearbeite Archiv $DATUM
$STERN
" >>$PFAD2/log.txt

zip $PFAD2/backup_$DATUM.tar.zip /backup/zwschsi.tar >>$PFAD2/log.txt 2>>$PFAD2/errorlog.txt
zip $PFAD/log.txt.zip $PFAD2/log.txt
rm /backup/zwschsi.tar $PFAD2/log.txt

echo $STRICH >> $PFAD2/errorlog.txt
echo "Information zur verbleibenden Speicherplatz im Laufwerk /backup ..." >> $PFAD2/errorlog.txt
echo $STRICH >> $PFAD2/errorlog.txt
echo "Auslastung im Backup-Laufwerk:" >> $PFAD2/errorlog.txt
echo $(df -h /backup) >> $PFAD2/errorlog.txt
echo $STRICH >> $PFAD2/errorlog.txt

mv $PFAD2/backup* $PFAD
mv $PFAD2/*.txt $PFAD

mailx -s "Datensicherung $VERZ beendet ..." root@erde < $PFAD/errorlog.txt

done

chown torsten:samba /backup/$dom/*
chmod 770 /backup/$dom/*
>>>>>>>>>>>>>>>> schnapp <<<<<<<<<<<<<<<

>>>>>>>>>>>>>>>> schnipp Backscrpt.sh<<<<<<<<<<<<<<<
#!/bin/bash
PFAD2="/backup/temp"
STERN="**********************************************"
DATUM=`date "+vom_%d.%m.%Y_Zeit_%H.%M.%S"`
echo "$STERN
bearbeite Archiv $DATUM
$STERN
" >>$PFAD2/log.txt
zip $PFAD2/backup_$DATUM.tar.zip /backup/zwschsi.tar
rm /backup/zwschsi.tar
>>>>>>>>>>>>>>>> schnapp <<<<<<<<<<<<<<<

Post Reply