【问题标题】:Copy or rsync command复制或 rsync 命令
【发布时间】:2023-04-06 17:47:01
【问题描述】:

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

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

rsync 比它有什么优势吗?有没有更好的方法让备份文件夹每 24 小时同步一次?

【问题讨论】:

  • 它究竟是如何不按预期工作的?
  • -u 表示“更新”:仅复制丢失或旧文件。 -r 表示“递归”:向下钻取目录结构。我不得不查一下,帮助其他菜鸟。 :-)
  • 有关命令帮助部分中特定标志的信息,我通常遵循这样的内容, 或者如果你想挖掘标志'r'的信息,使用 。它将仅显示您在“-e”之后编写的内容的那部分帮助。

标签: rsync cp


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    tar cf - . | tar xCf directory -
    

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

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

    【讨论】:

      【解决方案3】:

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

      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
      

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

      【讨论】:

      • 在 Mac 上,我不得不将其更改为:cp -pr /home/abc/. /mnt/windowsabc,但效果很好。 (没有-u 选项,需要. 而不是*,并且必须在最后删除/
      【解决方案4】:

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

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

      alias cp="rsync -ah --inplace --no-whole-file --info=progress2"
      

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

      【讨论】:

      • 根据--inplace选项manual:The option implies --partial。所以我猜--partial 不是必需的,至少在当前版本中是这样。
      【解决方案5】:

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

      命令 'rsync' 和 'cp' 不是等效的,并且实现不同的目标。

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

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

      【讨论】:

      • "rsync 可以保存现有文件的创建时间。(使用 -a 选项)" - "cp -a" 可以做同样的事情,而且比 "rsync -一个”。 “更好”意味着尽可能多地保留原始数据和元数据;阅读unix.stackexchange.com/questions/443911/…。 Rsync 和 cp 在 -a 方面几乎是等价的。
      • 谢谢@Rublacava 我正在爬网专门搜索-a 比较。
      【解决方案6】:

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

      “rsync 算法”非常适合通过慢速网络链接对文件进行增量更新,但它不会为您购买本地副本,因为它需要读取现有(部分)文件才能运行它的“diff " 计算。

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

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

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

          /myFolder
            someTextFile.txt
          
          /someOtherFolder
            /myFolder
              wellHelloThere.txt
          

          然后你一个接一个地复制:

          cp /someOtherFolder/myFolder /myFolder
          

          结果:

          /myFolder
            wellHelloThere.txt
          

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

          【讨论】:

            【解决方案9】:

            我更喜欢将 rsync 与以下选项一起使用

            rsync -avhW --no-compress --progress --info=progress2 <src directory> <dst directory>
            

            以上参数可以定义如下:

            -a for the archive to preserves ownership, permissions, etc.
            -v for verbose
            -h for human-readable
            -W for copying whole files only
            --no-compress as there's no lack of bandwidth between local devices
            --progress to see the progress of large files
            --info=progress2 to see the overall progress
            source directory path
            destination directory path
            

            【讨论】:

              【解决方案10】:

              我使用 rsynk 通过 USB 3.0 将 330G 数据从本地 HD 传输到外部 HD。我花了三天时间。传输速率下降到 800 Kb/s 并在暂停作业后暂时上升到 50 M/s。这是一个典型的过度缓冲问题。本地文件传输的糟糕体验:顾名思义,(R)sync 代表 REMOTE-sync(针对通过网络进行的传输进行了优化)。就像经常发生的那样,我只是在想知道这个问题并寻求理解之后才发现“-z”标志

              【讨论】:

                【解决方案11】:

                rsync 与 cp 相比要好得多,因为 rsync 仅在第一次复制整个文件/目录。下次当您对相同的文件/目录使用 rsync 命令时,只会将新的更改复制到目标文件夹,而不是复制整个文件。

                【讨论】:

                  猜你喜欢
                  • 2022-09-26
                  • 2019-01-29
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-09-22
                  相关资源
                  最近更新 更多