整个文件结构的cp -l更快的替代方案?

时间:2013-07-02 12:21:40

标签: shell backup rsync cp

好的,所以我需要创建一个文件结构的副本,但结构很庞大(数百万个文件),我正在寻找最快的方法来复制它。

我目前正在使用cp -lR "$original" "$copy",但即使这样也非常慢(需要几个小时)。

我想知道我能用更快的方法吗?我知道rsync --link-dest但这并不是更快,但实际上我希望它更快,因为我想每小时创建一次快照。

另一种方法是只将更改(我可以快速找到)复制到每个文件夹中,然后在我需要释放空间时将它们“展平”(rsync较新的文件夹到较旧的文件夹,直到达到最后一个完整的快照),但我会实际上,每个文件夹都是自己的完整快照。

3 个答案:

答案 0 :(得分:0)

为什么要丢弃link-dest?我使用带有该选项的脚本并经常拍摄快照,性能非常好。

如果您重新考虑,请使用以下脚本:https://github.com/alvaroreig/varios/blob/master/incremental_backup.sh

答案 1 :(得分:0)

如果您安装了pax,则可以使用它。可以将其视为tar或cpio,但标准,按POSIX。

#!/bin/sh

# Move "somedir/tree" to "$odir/tree".
itree=$1
odir=$2
base_tree=$(basename "$itree")
pax -rw "$itree" -s "#$itree#$base_tree#g" "$odir"

-s replstr是一个不幸的必需品(否则你会获得$ odir / $ itree),但它运作良好,到目前为止,它比大型结构的cp更快。

如果你没有pax,那么tar当然是另一种选择。

答案 2 :(得分:-1)

根据文件的不同,您可以通过压缩来获得性能提升:

cd "$original && tar zcf - . | (cd "$copy" && tar zxf -)

这会创建“原始”目录的tarball,将数据发送到stdout,然后更改为“copy”目录(必须存在)并解压传入的流。

对于提取,您可能希望观看进度:tar zxvf -