
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
동일한 크기의 파일을 건너뛰어야 하는 를 사용하는 것 같습니다).
당신이 해야 할 일은 마지막 백업 후에 권한을 변경했는지, 그렇지 않은 경우 백업 디렉터리에서 권한이 변경된 이유를 파악하는 것입니다.