rsync schlägt beim Hardlinken inkonsistent fehl

rsync schlägt beim Hardlinken inkonsistent fehl

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 $sourcenicht geändert hat, und sie daher einfach nach kopiert, $newbkpanstatt 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 -cmit 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.

verwandte Informationen