98

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

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

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

4

11 回答 11

69

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

于 2011-06-14T05:08:47.217 回答
64

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

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

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

tar cf - . | tar xCf directory -

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

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

于 2012-01-02T07:01:44.533 回答
22

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

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

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

于 2015-04-27T00:04:20.323 回答
7

特别是如果您使用像 BTRFS 或 ZFS 这样的写时复制文件系统,rsync那就更好了。

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

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

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

于 2016-09-08T18:24:58.020 回答
4

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

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

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

于 2011-06-14T05:18:49.500 回答
4

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

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

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

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

于 2018-11-11T17:37:40.587 回答
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
于 2019-03-07T04:48:35.837 回答
2

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

/myFolder
  someTextFile.txt

/someOtherFolder
  /myFolder
    wellHelloThere.txt

然后你复制一个:

cp /someOtherFolder/myFolder /myFolder

结果:

/myFolder
  wellHelloThere.txt

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

于 2018-11-16T10:03:43.590 回答
0

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

于 2021-09-27T09:41:18.597 回答
0

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

于 2021-12-14T07:59:18.120 回答
0

我更喜欢将 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
于 2022-01-28T13:58:10.400 回答