Backupscript |Problem mit tar & Symbolic Links

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Friesi
Beiträge: 582
Registriert: 07.07.2003 20:40:11
Wohnort: Stromberg
Kontaktdaten:

Backupscript |Problem mit tar & Symbolic Links

Beitrag von Friesi » 01.08.2004 22:26:37

Habe ein Backupscript geschrieben, welches mir mein komplettes System sichern soll, doch leider sichert er keine Symbolic Links :-/.
Ich finde auch einfach keine Option für Tar.

Könnt Ihr mit da helfen?
Hier das Script:

Code: Alles auswählen

#!/bin/bash
######################
# Backupscript V1.0
# Kai Friese
# 30.07.2004
######################

######################
# Konfiguration
######################
# Pfad zum Backupverzeichnis
backupdir=/mnt/files/backup/filesrv

######################
# Ueberpruefungen
######################
if [ "$UID" -eq 0 ]
then
        echo "Script wurde vom User root gestartet!"
        echo
else
        echo
        echo "Bitte starten Sie dieses Skript als root!"
        echo
        exit 1
fi

if test -d $backupdir
then
        echo "Backupverzeichnis gefunden!"
        echo
else
        echo "Backupverzeichnis nicht gefunden!"
        echo
        echo "Erstelle Backupverzeichnis!"
        echo
        mkdir -p $backupdir
fi

if test -d $backupdir
then

######################
# Backup
######################
# Sourceliste sichern
echo "Aktuelle Sourceliste wird gesichert ..."
cp /etc/apt/sources.list $backupdir/sources.list
# Packetliste sichern
echo "Aktuelle Packetauswahl wird gesichert ..."
echo
dpkg --get-selections > $backupdir/packetliste_last.list

# Backup der ausgewählten Verzeichnisse
echo "Ausgewählte Verzeichnisse werden gesichert ..."
echo
tar czfP $backupdir/sicherung_last.tar.gz -T sicherliste.txt --exclude-from=excludeliste.txt

# Archive in eins Packen
cd $backupdir
tar czf backup_`date +%y%m%d`.tar.gz sicherung_last.tar.gz packetliste_last.list sources.list
cp backup_`date +%y%m%d`.tar.gz backup_last.tar.gz
rm sicherung_last.tar.gz packetliste_last.list sources.list

echo
echo "++++++++++++++++++++++++++++++++++++++++++++++++++"
echo "Backup erstellt!"
echo "Backup liegt im Verzeichnis: $backupdir"
echo "++++++++++++++++++++++++++++++++++++++++++++++++++"
echo

else
        echo
        echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++"
        echo "WARNUNG: Backup konnte nicht erstellt werden!"
        echo "Verzeichnis wurde nicht gefunden!"
        echo "Bitte aendern Sie die Konfiguration in der backup.sh!"
        echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++"
   echo
fi

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 01.08.2004 23:54:05

Symlinks sind für tar aber absolut kein Problem...

Code: Alles auswählen

dreker@wintermute:test$ ls -l
insgesamt 4
-rw-r--r--  1 dreker dreker 1024 2004-08-01 23:46 testfile
lrwxrwxrwx  1 dreker dreker    8 2004-08-01 23:46 testlink -> testfile
dreker@wintermute:test$ tar czf test.tar.gz *
dreker@wintermute:test$ cd ..
dreker@wintermute:dreker$ mkdir test2
dreker@wintermute:dreker$ cd test2
dreker@wintermute:test2$ tar xzf ../test/test.tar.gz
dreker@wintermute:test2$ ls -l
insgesamt 4
-rw-r--r--  1 dreker dreker 1024 2004-08-01 23:46 testfile
lrwxrwxrwx  1 dreker dreker    8 2004-08-01 23:47 testlink -> testfile
dreker@wintermute:test2$ cd ../test
dreker@wintermute:test$ tar hczf test2.tar.gz *
dreker@wintermute:test$ cd ..
dreker@wintermute:dreker$ mkdir test3
dreker@wintermute:dreker$ cd test3
dreker@wintermute:test3$ tar xzf ../test/test2.tar.gz
dreker@wintermute:test3$ ls -l
insgesamt 8
-rw-r--r--  1 dreker dreker 1024 2004-08-01 23:46 testfile
-rw-r--r--  1 dreker dreker 1024 2004-08-01 23:46 testlink
Also: normalerweise werden Links als Links gesichert, mit dem -h Parameter wird das *Ziel* der Links gesichert. Zu beachten ist natürlich noch, dass wenn man in ein Dateisystem entpackt, dass keine Links unterstützt, die Links natürlich nicht da sind (FAT, NTFS, ISO9660, ... alle "nicht-UN*X" Dateisysteme)

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Friesi
Beiträge: 582
Registriert: 07.07.2003 20:40:11
Wohnort: Stromberg
Kontaktdaten:

Beitrag von Friesi » 02.08.2004 00:08:37

Also kann ich mit -h dafür sorgen, das Links mit ins Tar gepackt werden?
Vielleicht war das einfach nur mein Problem.

Danke für die Hilfe :-)

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 02.08.2004 00:29:38

Jupp... mit -h packt tar die Datei statt dem Link ins tar file...

Übrigens: das ist der erste Treffer, wenn man in "man tar" nach "link" sucht...

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

3-ranger
Beiträge: 68
Registriert: 20.12.2003 18:33:51

Beitrag von 3-ranger » 04.08.2004 00:59:19

hi,

sichert das System ab / alle Dateien? sry kann das aber ned so genau im Script "erkennen".

Ist es damit einfach möglich, es von einem anderen RootServer dann zurückzuholen und zu "enttaren" ?

danke

Friesi
Beiträge: 582
Registriert: 07.07.2003 20:40:11
Wohnort: Stromberg
Kontaktdaten:

Beitrag von Friesi » 04.08.2004 09:03:25

Also es gibt zwei Datein, einmal eine Datei wo du alle Verzeichnisse auflisten kannst von denen er ein Backup machen soll, oder eine Datei wo Verzeichnisse drin stehen, die er nicht mit ins Backup nehmen soll.

Du kannst dann z.b. in die eine ein / machen und in der anderen dann /var/log /var/run /tmp /dev /proc

habs Script aber nochmal überarbeietm, hier das Script, was bei mir gut Funktioniert:

Code: Alles auswählen

#!/bin/bash
######################
# Backupscript V1.1
# Kai Friese
# 01.08.2004
######################

######################
# Konfiguration
######################
# Pfad zum Backup- Script/Verzeichnis
scriptdir=/home/backup/
backupdir=/home/backup/
 
######################
# Ueberpruefungen
######################
if [ "$UID" -eq 0 ]
then
        echo "Script wurde vom User root gestartet!"
        echo
else
        echo
        echo "Bitte starten Sie dieses Skript als root!"
        echo
        exit 1
fi

if test -d $backupdir
then
        echo "Backupverzeichnis gefunden!"
        echo
else
        echo "Backupverzeichnis nicht gefunden!"
        echo
        echo "Erstelle Backupverzeichnis!"
        echo
        mkdir -p $backupdir
fi

if test -d $backupdir
then

######################
# Backup
######################
# Sourceliste sichern
echo "Aktuelle Sourceliste wird gesichert ..."
cp /etc/apt/sources.list $backupdir/sources.list
# Packetliste sichern
echo "Aktuelle Packetauswahl wird gesichert ..."
echo
dpkg --get-selections > $backupdir/packetliste_last.list

# Backup der ausgewählten Verzeichnisse
echo "Ausgewählte Verzeichnisse werden gesichert ..."
echo
tar czfhP $backupdir/sicherung_last.tar.gz -T $scriptdir/sicherliste.txt --exclude-from=$scriptdir/excludelist.txt



# Archive in eins Packen
cd $backupdir
tar czf backup_`date +%y%m%d`.tar.gz sicherung_last.tar.gz packetliste_last.list sources$
cp backup_`date +%y%m%d`.tar.gz backup_last.tar.gz
rm sicherung_last.tar.gz packetliste_last.list sources.list

echo
echo "++++++++++++++++++++++++++++++++++++++++++++++++++"
echo "Backup erstellt!"
echo "Backup liegt im Verzeichnis: $backupdir"
echo "++++++++++++++++++++++++++++++++++++++++++++++++++"
echo

else
        echo
        echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++"
        echo "WARNUNG: Backup konnte nicht erstellt werden!"
        echo "Verzeichnis wurde nicht gefunden!"
        echo "Bitte aendern Sie die Konfiguration in der backup.sh!"
        echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++"
        echo
fi
die sicherliste.txt die excludelist.txt

Code: Alles auswählen

/proc
/dev
/var/log
/var/run
/tmp
/floppy
/cdrom
/sys
/boot
/mnt
Und ums Backup wieder einzuspielen die install.sh

Code: Alles auswählen


#!/bin/bash
######################
# Installscript V1.1
# Kai Friese
# 01.08.2004
######################

echo
echo "Backup wird eingespielt"
echo
# Backupfile entpacken
echo "Entpacken der backup_last.tar.gz"
echo
tar xfz backup_last.tar.gz
# Alte sourceliste einspielen
echo "Source Liste von APT einspielen und APT updaten"
echo
cp sources.list /etc/apt/sources.list
apt-get update

# Packetliste ins aktuelle System einfügen
echo "Packetliste wird geladen und ins aktuelle System eingespielt"
echo
dpkg --set-selections < packetliste_last.list
# Packete einspielen
apt-get dselect-upgrade

# Entpacken der Sicherung
echo
echo "Die alten Verzeichnisse werden erstellt..."
tar xfz sicherung_last.tar.gz
rm sicherung_last.tar.gz
rm packetliste_last.list
rm sources.list

echo
echo "++++++++++++++++++++++++++++"
echo "Sicherung wurde eingespielt!"
echo "++++++++++++++++++++++++++++"
echo
bei der install.sh muss natürlich das backup_last.tar.gz im selben Verzeichnis sein.

Bei Verbesserungsideen: Immer her damit :-)

3-ranger
Beiträge: 68
Registriert: 20.12.2003 18:33:51

Beitrag von 3-ranger » 04.08.2004 11:09:28

Hi,

vielen vielen Dank :-)))))

Habe sonst über suse ein Script gehabt. Jetzt, setdem ich Debian auf den Root-Server habe, ists total geiler :-)) :wink:

danke

Friesi
Beiträge: 582
Registriert: 07.07.2003 20:40:11
Wohnort: Stromberg
Kontaktdaten:

Beitrag von Friesi » 05.08.2004 16:23:08

Ich würde nun noch gerne das File backup_last.tar.gz per SCP auf meinen Server zuhause übertragen, doch muss ich da ja immer ein Passwort eingeben.
Und ich will das ja automatisieren.
Gibts eine andere Möglichkeit die Sachen zu übertragen (rsync)?
Nur was brauche ich alles für rsync ums verschlüsselt zu übertragen.
Vielleicht kann mir da ja einer ein wenig helfen?

Benutzeravatar
punchy
Beiträge: 7
Registriert: 06.08.2004 02:42:24

Beitrag von punchy » 06.08.2004 18:06:57

Friesi hat geschrieben:Ich würde nun noch gerne das File backup_last.tar.gz per SCP auf meinen Server zuhause übertragen, doch muss ich da ja immer ein Passwort eingeben.
Und ich will das ja automatisieren.
Gibts eine andere Möglichkeit die Sachen zu übertragen (rsync)?
Nur was brauche ich alles für rsync ums verschlüsselt zu übertragen.
Vielleicht kann mir da ja einer ein wenig helfen?
Evt. könnte das ganze mit Private / Public Key funktionieren?!

Sieh dir mal diesen Beitrag an;

http://www.debianforum.de/forum/viewtopic.php?t=28667

Friesi
Beiträge: 582
Registriert: 07.07.2003 20:40:11
Wohnort: Stromberg
Kontaktdaten:

Beitrag von Friesi » 06.08.2004 18:30:41

Hab ich schon versucht, doch versuche ich das nach Hause zu backupen und mache das über eine dyndns Adresse. Da will er das irgendwie nicht annehmen.

Benutzeravatar
punchy
Beiträge: 7
Registriert: 06.08.2004 02:42:24

Beitrag von punchy » 06.08.2004 19:15:06

Friesi hat geschrieben:Hab ich schon versucht, doch versuche ich das nach Hause zu backupen und mache das über eine dyndns Adresse. Da will er das irgendwie nicht annehmen.
Ja, stimmt, da ja die IP-Adresse wechselt.
Andere Möglichkeit wäre natürlich das du auf dem Server den Private-Key ablegst und den dazugehörigen Public-Key auf dem Heimserver hast. Und jetzt mit dem Heimserver z.B. alle 24h mit dem Server verbindest und das File herunter holst. D.h. funktioniert natürlich nur wenn der Server von dem du das Backup holst, nicht auch über DynDNS läuft.

3-ranger
Beiträge: 68
Registriert: 20.12.2003 18:33:51

Beitrag von 3-ranger » 08.08.2004 10:15:32

Hallo,

Danke für das Script, es läuft prächtig. Kann ich die Fehlermeldungen bei mehrfachen Verschachtelungen bei sysmb. Links getrosst ausser Acht lassen?

Code: Alles auswählen

tar: /etc/apache/conf/conf/conf/conf/conf/

Code: Alles auswählen

cannot stat: Too many levels of sysmbolic links
danke schön :D

Friesi
Beiträge: 582
Registriert: 07.07.2003 20:40:11
Wohnort: Stromberg
Kontaktdaten:

Beitrag von Friesi » 08.08.2004 11:23:05

Pu *kopkrazt*
Denke mal schon, doch sogenau könnte ich das nun nicht sagen.
Vielleicht kannst ja mal ein Testsystem aufsetzen und dort das Backup einspielen?

Mir ist noch aufgefallen, das wenn man das Backup zurück gespielt hat, man umbedingt die /etc/fstab und die /etc/lilo.conf anpassen sollte, wenn man nicht genau die selbe Partitionierung hat. ein /sbin/lilo sollte man auch noch ausführen.

Die drei dinge sind mir noch aufgefallen, als ich mal ein Testsystem aufgesetzt habe und das Backup wieder eingespielt habe.

3-ranger
Beiträge: 68
Registriert: 20.12.2003 18:33:51

Beitrag von 3-ranger » 08.08.2004 11:30:11

hi,

danke. Werde beim zurückspielen des Backups genau die selben Partitionen/Größen nehmen wie jetzt auch. :wink:

thx

Antworten