复制或rsync命令

问题描述 投票:66回答:8

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

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

rsync有什么优势吗?是否有更好的方法来保持每24小时同步备份文件夹?

rsync cp
8个回答
53
投票

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


52
投票

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

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

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

tar cf - . | tar xCf directory -

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

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


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

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


6
投票

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

我使用BTRFS,我在我的~/.bashrc中有这个:

alias cp="rsync -ah --partial --inplace --info=progress2"

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


3
投票

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

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

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


2
投票

这不是一个更有效的问题。 命令'rsync'和'cp'不等同,实现了不同的目标。 1- rsync可以保留创建现有文件的时间。 (使用-a选项) 2- rsync将使用本地套接字或网络套接字运行多进程和传输。 (即将自己分成多个进程) 3-多重处理和线程化会在复制大量小文件时提高吞吐量,甚至可以使用多个较大的文件。 所以底线是rsync用于大数据,而cp用于较小的本地复制。 (MB到小GB范围)。当您开始进入多个GB或TB范围时,请使用rsync。当然还有网络副本,rsync。


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

0
投票

如果使用cp,则在复制同名文件夹时不保存现有文件。让我们说你有这个文件夹:

/myFolder
  someTextFile.txt

/someOtherFolder
  /myFolder
    wellHelloThere.txt

然后你复制一个在另一个上面:

cp /someOtherFolder/myFolder /myFolder

结果:

/myFolder
  wellHelloThere.txt

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

© www.soinside.com 2019 - 2024. All rights reserved.