以下命令按预期运行...
cp -ur /home/abc/* /mnt/windowsabc/
rsync有什么优势吗?是否有更好的方法来使备份文件夹每24小时保持同步?
以下命令按预期运行...
cp -ur /home/abc/* /mnt/windowsabc/
rsync有什么优势吗?是否有更好的方法来使备份文件夹每24小时保持同步?
Answers:
rsync由于执行的文件和块的详细清单而不一定高效。该算法的功能非常出色,但是您需要了解您的问题,以了解它是否真的是最佳选择。
在非常大的文件系统(例如成千上万个文件)上,倾向于添加但不更新文件,“ cp -u”可能会更有效率。cp决定仅在元数据上进行复制,并且可以简单地从事复制业务。
请注意,您可能需要一些缓冲,例如通过使用tar而不是直接cp,这取决于文件的大小,网络性能,其他磁盘活动等。我发现以下想法非常有用:
tar cf - . | tar xCf directory -
元数据本身实际上可能在非常大的(群集)文件系统上成为相当大的开销,但是rsync和cp将共享此问题。
rsync似乎经常是首选工具(在通用应用程序中,这是我通常的默认选择),但是可能有很多人盲目使用rsync而不考虑它。
编写的命令将创建带有当前日期和时间戳的新目录和文件,您自己将成为所有者。如果您是系统上的唯一用户,并且每天都在执行此操作,则可能没有太大关系。但是,如果保留这些属性对您很重要,则可以使用以下命令修改命令
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
尽管压缩和解压缩显然会给带宽不是瓶颈的系统加重负担,但这两个命令似乎差不多。
特别是如果使用像BTRFS或ZFS这样的写时复制文件系统,rsync
效果会更好。
我使用BTRFS,并且在我的文件夹中~/.bashrc
:
alias cp="rsync -ah --inplace --no-whole-file --info=progress2"
这里奶牛FSS像BTRFS的重要标志--inplace
,因为这些文件的改变部分它只复制,没有新的文件的inode之间的微小变化创造等。请参阅此。
请记住,在计算机上内部传输文件(即不进行网络传输)时,使用-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
这实际上不是什么更有效的问题。
命令“ rsync”和“ cp”并不等效,它们可以实现不同的目标。
1- rsync可以保留创建现有文件的时间。(使用-a选项)
2- rsync将运行多进程并使用本地套接字或网络套接字进行传输。(即,将自身分叉到多个进程中)
3-当复制大量的小文件甚至多个较大的文件时,多处理和线程处理将提高吞吐量。
因此,底线是rsync用于大型数据,而cp用于较小的本地复制。(MB到小GB范围)。当您开始进入多个GB或TB范围时,请使用rsync。当然还有网络副本,一直都是rsync。
-a
比较。