复制或rsync命令

时间:2011-06-14 05:03:45

标签: rsync cp

以下命令按预期工作...

cp -ur /home/abc/* /mnt/windowsabc/

rsync有优势吗?是否有更好的方法让备份文件夹每24小时同步一次?

8 个答案:

答案 0 :(得分:51)

Rsync更好,因为它只会复制更新文件的更新部分,而不是整个文件。如果需要,它还使用压缩和加密。看看这个tutorial

答案 1 :(得分:48)

rsync不一定更高效,因为它执行的文件和块的清单更加详细。该算法非常出色,但你需要了解你的问题才能知道它是否真的是最佳选择。

在一个非常大的文件系统(比如几千或几百万个文件)中,文件往往被添加但没有更新,“cp -u”可能会更有效率。 cp决定仅复制元数据,并且可以简单地开展复制业务。

请注意,您可能需要一些缓冲,例如通过使用tar而不是直接cp,取决于文件的大小,网络性能,其他磁盘活动等。我发现以下想法非常有用:

tar cf - . | tar xCf directory -

元数据本身实际上可能成为非常大(集群)文件系统上的重大开销,但rsync和cp将分享此问题。

rsync似乎经常是首选工具(在通用应用程序中是我通常的默认选择),但可能有很多人盲目地使用rsync而没有考虑它。

答案 2 :(得分:14)

写入的命令将创建具有当前日期和时间戳的新目录和文件,并将您自己作为所有者。如果您是系统中唯一的用户并且每天都这样做,那么这可能并不重要。但是如果保留这些属性对您很重要,您可以使用

修改命令
cp -pur /home/abc/* /mnt/windowsabc/

-p将保留文件的所有权,时间戳和模式。这可能非常重要,具体取决于您要备份的内容。

rsync的替代命令是

rsync -avh /home/abc/* /mnt/windowsabc

使用rsync,-a表示“archive”,它保留了上面提到的所有属性。 -v表示“详细”,它只列出了它在运行时对每个文件所做的操作。 -z留在这里用于本地副本,但是用于压缩,如果您通过网络备份,这将有所帮助。最后,-h告诉rsync报告人类可读格式的大小,如MB,GB等。

出于好奇,我运行了一个副本来填充系统并避免在第一次运行时出现偏差,然后我在从内部SSD驱动器到USB连接的HDD的1GB文件的测试运行中计时以下。这些只是复制到空目标目录。

cp -pur    : 19.5 seconds
rsync -ah  : 19.6 seconds
rsync -azh : 61.5 seconds

这两个命令看起来大致相同,虽然压缩和解压缩显然会对带宽不是瓶颈的系统造成负担。

答案 3 :(得分:6)

特别是如果您使用像BTRFS或ZFS这样的写时复制文件系统,rsync要好得多。

我使用BTRFS,我在~/.bashrc

中有这个
alias cp="rsync -ah --partial --inplace --info=progress2"

像BTRFS这样的CoW FS的重要标志是--inplace,因为它只复制文件的更改部分,不会为文件inode之间的小变化创建新的等等。请参阅this

答案 4 :(得分:3)

对于本地副本,rsync的唯一优点是,如果文件已存在于目标目录中,它将避免复制。 “已存在”的定义是(a)相同的文件名(b)相同的大小(c)相同的时间戳。 (也许是同一所有者/团体;我不确定......)

“rsync算法”非常适合通过慢速网络链接对文件进行增量更新,但它不会为本地副本带来太多帮助,因为它需要读取现有(部分)文件来运行它的“差异” “计算。

因此,如果您经常运行此类命令,并且更改的文件集相对于文件总数较小,您应该会发现rsync比cp快。 (另外rsync有一个--delete选项,你可能觉得它很有用。)

答案 5 :(得分:2)

这并不是什么效率更高的问题。

命令“ rsync”和“ cp”并不等效,它们实现了不同的目标。

1- rsync可以节省创建现有文件的时间。 (使用-a选项)
2- rsync将运行多进程并使用本地套接字或网络套接字进行传输。 (即,将自身分叉到多个进程中)
3-复制大量小文件,甚至复制多个大文件时,多处理和线程处理将提高吞吐量。

因此,底线是rsync用于大型数据,而cp用于较小的本地复制。 (MB到小GB范围)。当您开始进入多个GB或TB范围时,请使用rsync。当然还有网络副本,一直都是rsync。

答案 6 :(得分:1)

请记住,在计算机上内部传输文件(即不是网络传输)时,使用 -z 标志可能会大大缩短传输时间。

在同一台机器上传输

Case 1: With -z flag:
    TAR took: 9.48345208168
    Encryption took: 2.79352903366
    CP took = 5.07273387909
    Rsync took = 30.5113282204

Case 2: Without the -z flag:
    TAR took: 10.7535531521
    Encryption took: 3.0386879921
    CP took = 4.85565590858
    Rsync took = 4.94515299797

答案 7 :(得分:0)

如果您正在使用cp,则在复制相同名称的文件夹时不会保存现有文件。假设您有以下文件夹:

/myFolder
  someTextFile.txt

/someOtherFolder
  /myFolder
    wellHelloThere.txt

然后您将一个复制到另一个:

cp /someOtherFolder/myFolder /myFolder

结果:

/myFolder
  wellHelloThere.txt

这至少是在macOS上发生的事情,我想保留diff文件,所以我使用了rsync。