好的,所以我需要创建一个文件结构的副本,但结构很庞大(数百万个文件),我正在寻找最快的方法来复制它。
我目前正在使用cp -lR "$original" "$copy"
,但即使这样也非常慢(需要几个小时)。
我想知道我能用更快的方法吗?我知道rsync --link-dest
但这并不是更快,但实际上我希望它更快,因为我想每小时创建一次快照。
另一种方法是只将更改(我可以快速找到)复制到每个文件夹中,然后在我需要释放空间时将它们“展平”(rsync较新的文件夹到较旧的文件夹,直到达到最后一个完整的快照),但我会实际上,每个文件夹都是自己的完整快照。
答案 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更快。
答案 2 :(得分:-1)
根据文件的不同,您可以通过压缩来获得性能提升:
cd "$original && tar zcf - . | (cd "$copy" && tar zxf -)
这会创建“原始”目录的tarball,将数据发送到stdout,然后更改为“copy”目录(必须存在)并解压传入的流。
对于提取,您可能希望观看进度:tar zxvf -