rsync -avz --link-dest=$oldbkp $source $newbkp
我有一个核心使用的备份脚本。问题是 rsync 很多时候无法识别 中的文件$source
没有更改,因此它只是将其复制到 ,$newbkp
而不是从 中硬链接它$oldbkp
。另一个令人困惑的事情是它不一致 - 有些文件的硬链接按预期工作。备份分区是ntfs。
正如您在这里所看到的,前一个备份仅一小时后的备份就占用了整整 2GB 的新数据,而内容几乎没有变化(这是我的家用电脑)。
$ 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
,它应该跳过相同大小的文件)。
您应该做的是尝试找出上次备份后是否更改了权限,或者如果没有更改,则备份目录中的权限为何发生更改。