
Ich habe ein Backup-Skript, das in seinem Kern verwendet rsync -avz --link-dest=$oldbkp $source $newbkp
. Das Problem ist, dass rsync oft nicht erkennt, dass sich eine Datei in $source
nicht geändert hat, und sie daher einfach nach kopiert, $newbkp
anstatt sie von dort aus fest zu verknüpfen $oldbkp
. Ein weiterer verwirrender Aspekt ist, dass es inkonsistent ist – es gibt einige Dateien, bei denen das Festverknüpfen wie erwartet funktioniert. Die Backup-Partition ist NTFS.
Wie Sie hier sehen können, werden bei einer Sicherung nur eine Stunde nach der letzten ganze 2 GB an neuen Daten gespeichert, obwohl sich der Inhalt kaum geändert hat (das ist mein PC zu Hause).
$ du -hsc 20170424-1559 20170424-1724
2.6G 20170424-1559
2.1G 20170424-1724
4.6G total
Ich habe versucht stat
, einige Beispiele zu int. Dies ist ein fehlgeschlagener Hardlink (sha256 ist für alle gleich):
$ stat 20170424-1559/Documents/depeche
File: 20170424-1559/Documents/depeche
Size: 21400 Blocks: 48 IO Block: 4096 regular file
Device: 811h/2065d Inode: 140380 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 1000/ marek) Gid: ( 1000/ marek)
Access: 2017-04-24 17:14:00.271104500 +0200
Modify: 2016-08-01 16:30:38.000000000 +0200
Change: 2017-04-24 15:59:44.407252700 +0200
Birth: -
$ stat 20170424-1724/Documents/depeche
File: 20170424-1724/Documents/depeche
Size: 21400 Blocks: 48 IO Block: 4096 regular file
Device: 811h/2065d Inode: 361117 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 1000/ marek) Gid: ( 1000/ marek)
Access: 2017-04-24 17:24:55.732080500 +0200
Modify: 2016-08-01 16:30:38.000000000 +0200
Change: 2017-04-24 17:24:55.736274500 +0200
Birth: -
$ stat ~/Documents/depeche
File: /home/marek/Documents/depeche
Size: 21400 Blocks: 48 IO Block: 4096 regular file
Device: 2ah/42d Inode: 4397 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ marek) Gid: ( 1000/ marek)
Access: 2017-03-07 09:51:07.681090473 +0100
Modify: 2016-08-01 16:30:38.000000000 +0200
Change: 2016-11-06 19:58:14.053859011 +0100
Birth: -
Dies ist ein erfolgreicher Hardlink (sha256 ist dasselbe):
$ stat 20170424-1559/Documents/ios7bkplist.txt
File: 20170424-1559/Documents/ios7bkplist.txt
Size: 1983 Blocks: 8 IO Block: 4096 regular file
Device: 811h/2065d Inode: 344437 Links: 4
Access: (0777/-rwxrwxrwx) Uid: ( 1000/ marek) Gid: ( 1000/ marek)
Access: 2017-04-24 15:59:44.574850700 +0200
Modify: 2016-04-04 22:03:55.000000000 +0200
Change: 2017-04-24 17:24:56.022250400 +0200
Birth: -
$ stat 20170424-1724/Documents/ios7bkplist.txt
File: 20170424-1724/Documents/ios7bkplist.txt
Size: 1983 Blocks: 8 IO Block: 4096 regular file
Device: 811h/2065d Inode: 344437 Links: 4
Access: (0777/-rwxrwxrwx) Uid: ( 1000/ marek) Gid: ( 1000/ marek)
Access: 2017-04-24 15:59:44.574850700 +0200
Modify: 2016-04-04 22:03:55.000000000 +0200
Change: 2017-04-24 17:24:56.022250400 +0200
Birth: -
$ stat ~/Documents/ios7bkplist.txt
File: /home/marek/Documents/ios7bkplist.txt
Size: 1983 Blocks: 8 IO Block: 4096 regular file
Device: 2ah/42d Inode: 4413 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 1000/ marek) Gid: ( 1000/ marek)
Access: 2017-02-28 20:03:32.858085513 +0100
Modify: 2016-04-04 22:03:55.000000000 +0200
Change: 2016-11-06 19:58:14.550522987 +0100
Birth: -
Grundsätzlich passiert dasselbe, wenn ich -c
mit rsync eine lange Dateiprüfung erzwinge.
Übersehe ich etwas?
Antwort1
Das Problem ist folgendes (aus man rsync
):
... Die Dateien müssen in allen beibehaltenen Attributen identisch sein (zBBerechtigungen, ggf. Eigentum), damit die Dateien miteinander verknüpft werden können.
In Ihrem Fall sind die Berechtigungen der Dateien (aus Ihren Beispielen)
Access: (0644/-rw-r--r--) # hardlink failed (original)
Access: (0777/-rwxrwxrwx) # hardlink failed (backup)
Access: (0777/-rwxrwxrwx) # hardlink created (original)
Access: (0777/-rwxrwxrwx) # hardlink created (backup)
Zum Beispiel
$ chmod 777 A/file
$ rsync -az A/ B/
$ chmod 644 A/file
$ rsync -az --link-dest=$PWD/B/ A/ C/
führt zu
$ du -hsc A B C
965M A
965M B
965M C
2.9G total
Das Zurücksetzen der Berechtigungen auf den Originalwert führt jedoch zu
$ chmod 777 A/file
$ rsync -az --link-dest=$PWD/B/ A/ D/
$ du -hsc A B D
965M A
965M B
4.0K D
1.9G total
Sie können es mit einer Datei versuchen, um es zum Laufen zu bringen (ich schätze mit --size-only
, wodurch Dateien gleicher Größe übersprungen werden sollten).
Versuchen Sie herauszufinden, ob Sie die Berechtigungen nach der letzten Sicherung geändert haben oder, falls nicht, warum die Berechtigungen in Ihrem Sicherungsverzeichnis geändert wurden.