复制或rsync命令


83

以下命令按预期运行...

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

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


它到底怎么不按预期工作?
lunixbochs 2011年

12
-u表示“更新”:仅复制丢失或较旧的文件。-r表示“递归”:深入目录结构。我不得不查一下,帮助其他菜鸟。:-)
mayyypile 2015年

有关命令帮助部分中特定标志的信息,我通常遵循以下内容,<cp --help | grep -e -u>或如果您想在标志“ r”上挖掘信息,请使用<cp --help | grep -e -r>。它只会向您显示帮助中包含您在“ -e”之后编写的内容的部分。
paramvir

Answers:


58

Rsync更好,因为它只复制更新文件的更新部分,而不是整个文件。如果需要,它也使用压缩和加密。查看本教程


59

rsync由于执行的文件和块的详细清单而不一定高效。该算法的功能非常出色,但是您需要了解您的问题,以了解它是否真的是最佳选择。

在非常大的文件系统(例如成千上万个文件)上,倾向于添加但不更新文件,“ cp -u”可能会更有效率。cp决定仅在元数据上进行复制,并且可以简单地从事复制业务。

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

tar cf - . | tar xCf directory -

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

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


18

编写的命令将创建带有当前日期和时间戳的新目录和文件,您自己将成为所有者。如果您是系统上的唯一用户,并且每天都在执行此操作,则可能没有太大关系。但是,如果保留这些属性对您很重要,则可以使用以下命令修改命令

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

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

使用rsync的替代命令是

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

对于rsync,-a表示“存档”,其中保留了上述所有那些属性。-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 --inplace --no-whole-file --info=progress2"

这里奶牛FSS像BTRFS的重要标志--inplace,因为这些文件的改变部分它只复制,没有新的文件的inode之间的微小变化创造等。请参阅


1
根据--inplace选项手册The option implies --partial。因此,我猜--partial至少在当前版本中不需要。
Dcortez

4

请记住,在计算机上内部传输文件(即不进行网络传输)时,使用-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

3

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

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

因此,如果您经常运行这种命令,并且相对于文件总数而言,更改的文件集很小,那么您应该发现rsync比cp快。(rsync还有一个--delete您可能会发现有用的选项。)


3

这实际上不是什么更有效的问题。

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

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

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


“ rsync可以保留创建现有文件的时间。(使用-a选项)”-“ cp -a”可以完成相同的操作,甚至比“ rsync -a”更好。“更好”是指尽可能多地保留原始数据和元数据;阅读unix.stackexchange.com/questions/443911/…。Rsync和cp与-a几乎等效。
Rublacava

谢谢@Rublacava我正在抓取网络搜索以进行-a比较。
弗朗索瓦

1

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

/myFolder
  someTextFile.txt

/someOtherFolder
  /myFolder
    wellHelloThere.txt

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

cp /someOtherFolder/myFolder /myFolder

结果:

/myFolder
  wellHelloThere.txt

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.