ubuntuusers.de

tar Inkrementelles Backup, der Restore klappt nicht

Status: Gelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

remmiz

Anmeldungsdatum:
22. April 2008

Beiträge: Zähle...

Hallo liebe Leute,

ich habe gerade ein Problem bei erstellen eines Backup-Scriptes. Besser gesagt klappt der Restore nicht! Ich möchte einfach ein Full-Backup mit tar machen und darauf sollen dann Inkrementelle-Backups folgen.

Das erstellen klappt soweit, doch allerdings klappt der Resore nicht. Wenn ich die Dateien wiederherstelle, habe ich einfach alles. Auch die, die bei dem letzten Inkrementellen-Backup nicht mehr vorhanden waren.

Ich beschreibe das am Besten mal kurz an einem Beispiel:

Ich möchte den Ordner ./tmp sichern (einfach ein Ordner im aktuellen Verzeichnis zum testen):

1
2
ls ./tmp
dir1  dir2  111  222  333

jetzt mache ich eine Sicherung, in diesem Fall ist es die Erste, also ein Fullbackup, von diesem Ordner

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
tar cvf ./backuptest/tmp001.tar -g /var/log/timestamp ./tmp

Ergebnis:
tar: Verzeichnis „./tmp“ ist neu.
tar: Verzeichnis „./tmp/dir1“ ist neu.
tar: Verzeichnis „./tmp/dir2“ ist neu.
./tmp/
./tmp/dir1/
./tmp/dir2/
./tmp/111
./tmp/222
./tmp/333

Ein Blick auf die erstellten Files:

1
2
ls ./backuptest/
timestamp  tmp001.tar

jetzt wird was gelöscht und neu hinzugefügt.

1
2
3
4
5
6
rm ./tmp/222
touch ./tmp/444

Ergebnis:
ls ./tmp
dir1  dir2  111  333  444

Nun erstellen wir das "erste" Inkrementelle Backup:

1
2
3
4
5
6
7
tar cvf ./backuptest/tmp002.tar -g /var/log/timestamp ./tmp

Ergebnis:
./tmp/
./tmp/dir1/
./tmp/dir2/
./tmp/444

Wieder ein Blick auf die erstellte Files:

1
2
ls ./backuptest
timestamp  tmp001.tar  tmp002.tar

Soweit, so gut.

Nun gehen wir mal davon aus, dass das Verzeichnis nun versehentlich gelöscht wurde oder jedenfalls komplett verloren ist. Ich möchte ja nun den letzten Stand des Verzeichnisse mit dem letzten Inkrementellen Backup wieder herstellen.

Dazu sollte man doch nacheinander die Backups entpacken (ich packe das mal in tmp2 aus). Also so:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
tar xvf ./backuptest/tmp001.tar --listed-incremental=/dev/null -C ./tmp2

Ergebnis:
./tmp/
./tmp/dir1/
./tmp/dir2/
./tmp/111
./tmp/222
./tmp/333

ls ./tmp2/tmp/
dir1  dir2  111  222  333

Nun den nächsten Teil entpacken:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
tar xvf ./backuptest/tmp002.tar --listed-incremental=/dev/null -C ./tmp2

Ergebnis:
./tmp/
./tmp/dir1/
./tmp/dir2/
./tmp/444

ls ./tmp2/tmp
dir1  dir2  111  222  333  444

Erwartet hätte ich jetzt, dass die zuvor gelöschte Datei 222 auch nicht mehr wieder hergestellt wird!

Das nur noch "dir1 dir2 111 333 444" da sind.

Hat einer vielleicht eine Idee, warum das so nicht klappt? Die Option --listed-incremental=/dev/null sollte doch den Inkrementellen Dateibestand wiederherstellen?! Bin irgendwie jetzt am Ende angekommen und drehe mich im Kreis.

Danke und Gruß Björn

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7790

Wie kommst du auf /dev/null? Das muss eine Datei sein in der steht welche Dateien (nicht) existieren. (-g timestamp)

remmiz

(Themenstarter)

Anmeldungsdatum:
22. April 2008

Beiträge: 21

Das habe ich aus diesem Tut:

http://wiki.ubuntuusers.de/Skripte/inkrementelles_Backup

und hier stehts auch nochmal so

https://www.gnu.org/software/tar/manual/html_chapter/Backups.html

Ich habe auch versucht mit

1
2
3
4
5
-g /var/log/timestamp

oder 

--listed-incremental=/var/log/timestamp

Das Ergebnis ist leider das Gleiche. Auch die gelöschten Dateien werden wiederhergestellt. ☹

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7790

Oh, stimmt. -g /dev/null tut bei mir auch. 😬 Sorry. Ich hab da auch -g timestamp, schadet ja nix.

Also eigentlich sollte es klappen.

remmiz

(Themenstarter)

Anmeldungsdatum:
22. April 2008

Beiträge: 21

danke,

ja, das komische ist aber, dass es nicht klappt. Sieht man ja am Beispiel. Aber warum?!

Hat Jemand noch eine Idee?

microft

Avatar von microft

Anmeldungsdatum:
6. August 2009

Beiträge: 454

Wohnort: Norddeutschland

Warum quälst du dich mit tar rum. Für den Backup ist rsync das Mittel der wahl.

Kuckst du hier

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash

echo "*/temp/*" >/tmp/stick_backup
echo "*/Temp/*" >>/tmp/stick_backup
echo "*thumbnails/*" >>/tmp/stick_backup
echo "*/firefox/*/Cache/*" >>/tmp/stick_backup
echo "*cache*" >>/tmp/stick_backup
echo "*Cache*" >>/tmp/stick_backup
echo "*/sc/*" >>/tmp/stick_backup
echo "*/Download/*" >>/tmp/stick_backup

datum=$(date +%U-%m-%Y)

source="/home/user" 
dest="/media/Iomega/Backup"
rsync -ahx --delete --backup --backup-dir=$dest/$datum --ignore-errors --force --delete-excluded --exclude-from=/tmp/stick_backup $source $dest

source="/srv" 
dest="/media/Iomega/Backup"
rsync -ahx --delete --backup --backup-dir=$dest/$datum --exclude-from=/tmp/stick_backup $source $dest

source="/etc" 
dest="/media/Iomega/Backup"
rsync -ahx --delete --backup --backup-dir=$dest/$datum --exclude-from=/tmp/stick_backup $source $dest

rm /tmp/stick_backup

Das Script tut was es soll und hält sogar alte Versionen

cu

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7790

microft schrieb:

Für den Backup ist rsync das Mittel der wahl.

Muss sich doch jeder selbst heraussuchen, oder? rsync nehme ich z.B. nicht weil ich meine Backups komprimiert haben will. tar nehme ich nicht weil mir das Entpacken einzelner Dateien zu lange dauert. dar macht alles was ich will... aber man muss etwas scripten dafür.

das komische ist aber, dass es nicht klappt. Sieht man ja am Beispiel. Aber warum?

Weiß nicht, bei mir klappts.

/tmp/backup $ mkdir tmp
/tmp/backup $ echo Schnitzel > tmp/Salat
/tmp/backup $ echo Wurst > tmp/Käse
/tmp/backup $ tar cvf 01.tar -g timestamp tmp/
tar: tmp: Directory is new
tmp/
tmp/Käse
tmp/Salat
/tmp/backup $ rm tmp/Salat 
/tmp/backup $ echo Salat > tmp/Schnitzel
/tmp/backup $ tar cvf 02.tar -g timestamp tmp/
tmp/
tmp/Schnitzel
/tmp/backup $ rm -rf tmp/
/tmp/backup $ ls
01.tar  02.tar  timestamp
/tmp/backup $ tar xvf 01.tar -g timestamp
tmp/
tmp/Käse
tmp/Salat
/tmp/backup $ ls tmp/
Käse  Salat
/tmp/backup $ tar xvf 02.tar -g timestamp
tmp/
tar: Deleting ‘tmp/Salat’
tmp/Schnitzel
/tmp/backup $ ls tmp/
Käse  Schnitzel
/tmp/backup $ 

remmiz

(Themenstarter)

Anmeldungsdatum:
22. April 2008

Beiträge: 21

JA! So soll es sein. Nun ist die Frage warum das bei mir nicht klappt?!

1
2
 $ tar --version
tar (GNU tar) 1.26

Das ist meine Tarversion.

Und Du hast ohne "-C" entpackt. Wüsste zwar nicht, warum der Extrakt nicht in ein bestimmtes Verzeichnis klappten sollte, teste das nun aber mal ohne!

@microft,

ich benötige schon "einzelne" Files als Ergebnis. Auch die Incrementels benötige als File.

EDIT:

Ja, klappt... jedenfalls ohne -C

dwarf@ubuntu-vm:~$ mkdir test
dwarf@ubuntu-vm:~$ cd test
dwarf@ubuntu-vm:~/test$ mkdir tmp
dwarf@ubuntu-vm:~/test$ echo 1 > tmp/1
dwarf@ubuntu-vm:~/test$ echo 2 > tmp/2
dwarf@ubuntu-vm:~/test$ tar cvf backup1.tar -g timestamp tmp/
tar: Verzeichnis „tmp“ ist neu.
tmp/
tmp/1
tmp/2
dwarf@ubuntu-vm:~/test$ rm tmp/2
dwarf@ubuntu-vm:~/test$ echo 3 > tmp/3
dwarf@ubuntu-vm:~/test$ tar cvf backup2.tar -g timestamp tmp/
tmp/
tmp/3
dwarf@ubuntu-vm:~/test$ rm -rf tmp/
dwarf@ubuntu-vm:~/test$ ls
backup1.tar  backup2.tar  timestamp
dwarf@ubuntu-vm:~/test$ tar xvf backup1.tar -g timestamp
tmp/
tmp/1
tmp/2
dwarf@ubuntu-vm:~/test$ tar xvf backup2.tar -g timestamp
tmp/
tar: Lösche „tmp/2“.
tmp/3
dwarf@ubuntu-vm:~/test$

Danke Dir fürs Testen und Bemühen!!!

microft

Avatar von microft

Anmeldungsdatum:
6. August 2009

Beiträge: 454

Wohnort: Norddeutschland

@microft,

ich benötige schon "einzelne" Files als Ergebnis. Auch die Incrementels benötige als File.

Die kriegst du. im /Backup Verzeichnis steht eine exakte Kopie deines aktuellen original Filesystems und im $datum Verzeichnis stehen alle Files die beim letzten Sync aus der Kopie gelöscht wurden(alte Stände). Um das Increment brauchst du dich nicht zu kümmern, das mach rsync automatisch. Es werden bei jedem neuen Sync immer nur die geänderten Dateien übertragen.

Nun gehen wir mal davon aus, dass das Verzeichnis nun versehentlich gelöscht wurde oder jedenfalls komplett >verloren ist. Ich möchte ja nun den letzten Stand des Verzeichnisse mit dem letzten Inkrementellen Backup wieder >herstellen.

und genau dafür ist das $datum Verzeichniss

cu

remmiz

(Themenstarter)

Anmeldungsdatum:
22. April 2008

Beiträge: 21

microft schrieb:

@microft,

ich benötige schon "einzelne" Files als Ergebnis. Auch die Incrementels benötige als File.

Die kriegst du. im /Backup Verzeichnis steht eine exakte Kopie deines aktuellen original Filesystems und im $datum Verzeichnis stehen alle Files die beim letzten Sync aus der Kopie gelöscht wurden(alte Stände). Um das Increment brauchst du dich nicht zu kümmern, das mach rsync automatisch. Es werden bei jedem neuen Sync immer nur die geänderten Dateien übertragen.

cu

arbeitet rsync mit hardlinks? dann wäre das wieder tödlich ...

EDIT:

habe gerade nochmal gegengecheckt, mit der Option -C klappts dann nicht mehr. Warum auch immer. Danke nochmal fürs testen. Entpacke dann halt anders 😀

microft

Avatar von microft

Anmeldungsdatum:
6. August 2009

Beiträge: 454

Wohnort: Norddeutschland

arbeitet rsync mit hardlinks? dann wäre das wieder tödlich ...

einer der Nachteile 😉 von rsync sind die 738 Optins da findet sich eigentlich immer für alles was.

cu

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7790

mit -C hat bei mir aber auch geklappt 😕

/tmp/backup $ tar xvf 01.tar -g timestamp -C output
tmp/
tmp/Käse
tmp/Salat
/tmp/backup $ tar xvf 02.tar -g timestamp -C output
tmp/
tar: Deleting ‘tmp/Salat’
tmp/Schnitzel
/tmp/backup/output/tmp $ ls
Käse  Schnitzel
$ tar --version
tar (GNU tar) 1.27.1

remmiz

(Themenstarter)

Anmeldungsdatum:
22. April 2008

Beiträge: 21

😲 DAS finde ich nun aber echt komisch.

habe das genau so gemacht wie Du *grübel*

liegts ab der Version?

remmiz

(Themenstarter)

Anmeldungsdatum:
22. April 2008

Beiträge: 21

Jab, ist die Version.

Habe mal eben tar.1.27.1-1 installiert, damit geht es dann!

Nochmals danke für den Test!! 👍

Antworten |