scp和rsync简介
项目开发中经常有服务器之间同步数据的需求,在Linux中提供了两个命令,scp和rsync,这两个命令不仅仅是可以使用在机器之间同步数据,在一个机器内部也是可以进行数据的同步。但是对于scp来说,除了在机器之间或同一个机器不同目录之间进行数据同步之外,还可以与多台机器之间进行数据同步。比如你在A机器,可以对B、C两台机器上的数据进行同步,但是rsync就不可以;也就是说当rsync进行跨机器同步数据的时候只可以在本机与另外一台机器之间进行数据的同步。
scp
scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。从这可以看出它是一个安全的、加密过了的拷贝,因此它是可以使用在机器之间进行数据的拷贝。
rsync
该协议主要目的是在两台机器之间进行数据同步的时候,尽量少的传递数据。rsync可以聪明的在两台机器之间进行数据的同步,并通过对比算法减少数据的传输。rsync的作用就是当要同步数据的对端已经存在部分要同步数据的情况下,通过使用rsync可以只传递增量数据。假设A机器上有一个名为test.txt的文件1G,在文件末尾只加了一个句号,这时候要同步到B机器上去。如果B机器上已经存在文件test.txt,使用scp要拷贝传输1G数据过去,而rsync只需要传输修改后的数据,也就是说只传递一个句号,整个任务就结束了;如果B机器上不存在文件test.txt,使用rsync和scp传输的时长相差不大。
rsync 和 scp 的区别
rsync 是分块校验+传输,scp 是整个文件传输。rsync 比 scp 有优势的地方在于单个大文件的一小部分存在改动时,只需传输改动部分,无需重新传输整个文件。如果传输一个新的文件,理论上 rsync 没有优势。另外,rsync 不是加密传输,而 scp 是加密传输,使用时可以按需求选择。
下面来看一下scp和rsync具体的执行情况:
文件大小如下图所示:
scp三次所需要的时间,第一次24.652秒,第二次24.466秒,第三次33.496秒,三者几乎在一个量级别,考虑到系统当时的负载差异,可视为三次执行时间大致相同。
rsync三次所需的时间,第一次23.602秒,第二次0.114秒,第三次0.044秒,第一次是新建,第二次,第三次是在文件存在的情况下同步的。可以看出第二次第三次执行时间远远小于第一次。