复制或rsync命令

sha*_*nuo 73 rsync cp

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

cp -ur /home/abc/* /mnt/windowsabc/
Run Code Online (Sandbox Code Playgroud)

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

mar*_*ica 55

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


ckg*_*ckg 55

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

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

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

tar cf - . | tar xCf directory -
Run Code Online (Sandbox Code Playgroud)

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

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


mig*_*ile 14

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

cp -pur /home/abc/* /mnt/windowsabc/
Run Code Online (Sandbox Code Playgroud)

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

使用rsync的替代命令是

rsync -avh /home/abc/* /mnt/windowsabc
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

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


Ell*_*son 7

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

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

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

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

  • “rsync 可以保留现有文件的创建时间。(使用 -a 选项)” - “cp -a”可以做同样的事情,而且比“rsync -a”做得更好。“更好”意味着保留尽可能多的原始数据和元数据;阅读 https://unix.stackexchange.com/questions/443911/what-is-the-closest-for-cp-to-rsync-a 。Rsync 和 cp 就 -a 而言几乎等效。 (4认同)

Ger*_*mia 6

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

我使用BTRFS,并且在我的文件夹中~/.bashrc

alias cp="rsync -ah --inplace --no-whole-file --info=progress2"
Run Code Online (Sandbox Code Playgroud)

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

  • 根据 `--inplace` 选项[手册](https://linux.die.net/man/1/rsync):`该选项意味着 --partial`。所以我想至少在当前版本中不需要“--partial”。 (2认同)

小智 6

我更喜欢使用 rsync 和以下选项

rsync -avhW --no-compress --progress --info=progress2 <src directory> <dst directory>
Run Code Online (Sandbox Code Playgroud)

上述参数可以定义如下:

-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
Run Code Online (Sandbox Code Playgroud)


Nem*_*emo 5

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

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

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