rsync가 일관되지 않게 하드링크에 실패함

rsync가 일관되지 않게 하드링크에 실패함

rsync -avz --link-dest=$oldbkp $source $newbkp핵심을 사용하는 백업 스크립트가 있습니다 . 문제는 rsync가 의 파일이 $source변경되지 않았 음을 인식하지 못하는 경우가 많기 때문에 $newbkp에서 하드 링크하는 대신 해당 파일을 에 복사한다는 것입니다 $oldbkp. 또 다른 당혹스러운 점은 일관성이 없다는 것입니다. 하드링크가 예상대로 작동하는 일부 파일이 있습니다. 백업 파티션은 ntfs입니다.

여기에서 볼 수 있듯이, 이전 백업보다 한 시간만 백업하면 콘텐츠가 거의 변경되지 않은 상태에서 2GB의 새 데이터가 모두 사용됩니다(이것이 제 집 PC입니다).

$ du -hsc 20170424-1559 20170424-1724
2.6G    20170424-1559
2.1G    20170424-1724
4.6G    total

나는 stat몇 가지 예를 시도해 보았습니다. 이것은 실패한 하드링크입니다(sha256은 모두 동일합니다):

$ 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: -

이것은 성공적인 하드링크입니다(sha256도 동일합니다).

$ 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: -

-c기본적으로 긴 파일 검사를 강제하기 위해 rsync를 사용할 때도 동일한 일이 발생합니다 .

내가 간과하고 있는 것이 있나요?

답변1

문제는 다음과 같습니다( man rsync).

... 파일은 보존된 모든 속성에서 동일해야 합니다(예:권한, 소유권 가능) 파일이 서로 연결되도록 합니다.

귀하의 경우 파일의 권한은 (귀하의 예에서)

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)

예를 들어

$ chmod 777 A/file
$ rsync -az A/ B/
$ chmod 644 A/file
$ rsync -az --link-dest=$PWD/B/ A/ C/

결과

$ du -hsc A B C
965M    A
965M    B
965M    C
2.9G    total

반면 권한을 원본으로 재설정하면 다음과 같은 결과가 발생합니다.

$ 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

일부 파일을 사용하여 작동하도록 시도해 볼 수 있습니다( --size-only동일한 크기의 파일을 건너뛰어야 하는 를 사용하는 것 같습니다).

당신이 해야 할 일은 마지막 백업 후에 권한을 변경했는지, 그렇지 않은 경우 백업 디렉터리에서 권한이 변경된 이유를 파악하는 것입니다.

관련 정보