小编mat*_*ath的帖子

如果旧文件已经存在,如何让 rsync 使用 --link-dest 选项链接相同的文件?

有人可能认为--link-dest对相同的文件进行处理在所有情况下都有效。但是当文件存在时它不会,即使文件已过期/具有不同的内容。

正因为如此,从 rsync 手册页上--link-dest

“当复制到空的目标层次结构时,此选项效果最佳,因为 rsync 将现有文件视为明确的(因此,当目标文件已存在时rsync 永远不会在链接目标目录中查找)”

这意味着,如果y/file存在与源相同,并且z/file已过时,

rsync -a --del -link-dest=y source:/file z
Run Code Online (Sandbox Code Playgroud)

将导致使用两个 inode(和两倍的磁盘空间),y/file并且z/file,它们将具有相同的内容和日期戳。

我遇到了这个,因为我基本上每天运行一次这个脚本来做每日备份:

mv $somedaysago $today; 
yest=$today; today=`date +%Y%m%d`;
rsync -avPShyH --del --link-dest=../$yest host:/dirs $today
Run Code Online (Sandbox Code Playgroud)

因为我的备份跨越多达 10M 个文件,所以这样做rm -rf $olddir; rsync source:$dir newdir会花费太长时间(特别是当每天只有 0.5% 的文件更改时,导致删除和创建 10M 目录条目只是为了处理 50K 新文件或更改文件,这将使我的次日未及时完成备份)。

这是情况的演示:

a是我们的来源,1通过4是我们编号的备份:

$ mkdir -p 1 2; echo foo > 1/foobar; cp -lrv …
Run Code Online (Sandbox Code Playgroud)

rsync

11
推荐指数
1
解决办法
2万
查看次数

标签 统计

rsync ×1