scp
更快因为rsync
使用远程更新协议,该协议允许仅传输两组文件之间的差异。第一次,它将文件或目录的全部内容从源复制到目标,但从下一次开始,它只将更改的块和字节复制到目标。# rsync options source destination
-v
: 显示rsync过程中详细信息-r
: 递归复制数据(但在传输数据时不要保留时间戳和权限。-a
: 存档模式,允许递归复制文件,还保留符号链接、文件权限、用户和组所有权以及时间戳。-z
: 压缩文件数据。-h
: 人类可读的,以人类可读的格式输出数字。安装
rsync
借助 Linux 发行版中的以下命令进行打包。
$ sudo apt-get install rsync [On Debian/Ubuntu & Mint]
$ pacman -S rsync [On Arch Linux]
$ emerge sys-apps/rsync [On Gentoo]
$ dnf install rsync or yum install rsync [On Fedora/CentOS/RHEL and Rocky Linux/AlmaLinux]
$ sudo zypper install rsync [On openSUSE]
以下命令将本地计算机上的单个文件从一个位置同步到另一个位置。在这个例子中,一个文件名
backup.tar
需要复制或同步到/tmp/backups/
文件夹。
[rumenz@local]# rsync -zvh backup.tar.gz /tmp/backups/
created directory /tmp/backups
backup.tar.gz
sent 224.54K bytes received 70 bytes 449.21K bytes/sec
total size is 224.40K speedup is 1.00
在上面的例子中,你可以看到如果目的地不存在,rsync 会自动为目的地创建一个目录。
以下命令会将所有文件从一个目录传输或同步到同一台机器上的另一个目录。在这个例子中,
/root/rpmpkgs
包含一些 rpm 包文件,并且你希望将该目录复制到其中/tmp/backups/
文件夹。
[rumenz@local]# rsync -avzh /root/rpmpkgs /tmp/backups/
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
sent 3.47M bytes received 96 bytes 2.32M bytes/sec
total size is 3.74M speedup is 1.08
此命令会将目录从本地机器同步到远程机器。
For example,
你的本地计算机中有一个文件夹rpmpkgs
,其中包含一些RPM
包并且你希望本地目录的内容发送到远程服务器,你可以使用以下命令。
[rumenz@local:~]# rsync -avzh /root/rpmpkgs root@192.168.1.110:/root/
The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established.
ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts.
root@192.168.1.110's password:
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
sent 3.74M bytes received 96 bytes 439.88K bytes/sec
total size is 3.74M speedup is 1.00
此命令将帮助你将远程目录同步到本地目录。在这个例子中,一个目录
/root/rpmpkgs
这是在远程服务器上被复制到你的本地计算机中/tmp/myrpms
.
[rumenz@local:~]# rsync -avzh root@192.168.1.110:/root/rpmpkgs /tmp/myrpms
root@192.168.1.110's password:
receiving incremental file list
created directory /tmp/myrpms
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
sent 104 bytes received 3.49M bytes 997.68K bytes/sec
total size is 3.74M speedup is 1.07
和
rsync
, 我们可以用SSH
(Secure Shell
) 进行数据传输,使用SSH
传输我们的数据时的协议,你可以确保你的数据是通过加密的安全连接传输的,这样在互联网上通过线路传输时,没有人可以读取你的数据。当我们使用
rsync
我们需要提供user
/root
密码来完成那个特定的任务,所以使用SSH
选项将以加密方式发送你的登录信息,以便你password
将是安全的。
指定一个协议
rsync
你需要给-e
选项与你要使用的协议名称。在这个例子中,我们将使用ssh
与-e
选项并执行数据传输。
[rumenz@local:~]# rsync -avzhe ssh root@192.168.1.110:/root/anaconda-ks.cfg /tmp
root@192.168.1.110's password:
receiving incremental file list
anaconda-ks.cfg
sent 43 bytes received 1.10K bytes 325.43 bytes/sec
total size is 1.90K speedup is 1.67
[rumenz@local:~]# rsync -avzhe ssh backup.tar.gz root@192.168.1.110:/backups/
root@192.168.1.110's password:
sending incremental file list
created directory /backups
backup.tar.gz
sent 224.59K bytes received 66 bytes 64.19K bytes/sec
total size is 224.40K speedup is 1.00
要显示将数据从一台机器传输到另一台机器时的进度,我们可以使用
–progress’
选项。它显示文件和完成传输的剩余时间。
[rumenz@local:/]# rsync -avzhe ssh --progress /root/rpmpkgs root@192.168.1.110:/root/rpmpkgs
root@192.168.1.110's password:
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
1.47M 100% 31.80MB/s 0:00:00 (xfr#1, to-chk=3/5)
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
138.01K 100% 2.69MB/s 0:00:00 (xfr#2, to-chk=2/5)
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
2.01M 100% 18.45MB/s 0:00:00 (xfr#3, to-chk=1/5)
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
120.48K 100% 1.04MB/s 0:00:00 (xfr#4, to-chk=0/5)
sent 3.74M bytes received 96 bytes 1.50M bytes/sec
total size is 3.74M speedup is 1.00
这两个选项使我们能够
include
和exclude
通过使用这些选项指定参数来帮助我们指定要包含在同步中的文件或目录,并排除你不想传输的文件和文件夹。在此示例中,rsync 命令将仅包含那些以
R
开头的文件和目录并排除所有其他文件和目录。
[rumenz@local:/]# rsync -avze ssh --include 'R*' --exclude '*' root@192.168.1.110:/var/lib/rpm/ /root/rpm
root@192.168.1.110's password:
receiving incremental file list
created directory /root/rpm
./
Requirename
sent 61 bytes received 273,074 bytes 60,696.67 bytes/sec
total size is 761,856 speedup is 2.79
如果源中不存在文件或目录,但目标中已存在,则你可能希望在同步时删除目标中的现有文件/目录。
我们可以使用
–delete
删除源目录中不存在的文件的选项。源和目标是同步的。现在创建一个新文件
test.txt
在目标处。
[rumenz@local:~]# cd /root/rpm/
[rumenz@local:~/rpm]# touch test.txt
[rumenz@local:~/rpm]# rsync -avz --delete root@192.168.0.151:/var/lib/rpm/ /root/rpm/
root@192.168.0.151's password:
receiving incremental file list
deleting test.txt
./
.dbenv.lock
.rpm.lock
Basenames
Conflictname
Dirnames
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Packages
Providename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.001
__db.002
__db.003
sent 445 bytes received 18,543,954 bytes 2,472,586.53 bytes/sec
total size is 71,151,616 speedup is 3.84
目标具有名为的新文件
test.txt
, 使用–delete
选项,它删除了文件test.txt
.
你可以指定
Max
要传输或同步的文件大小。你可以用–max-size
“ 选项。在此示例中,最大文件大小为200k
,所以这个命令将只传输那些等于或小于200k
.
[rumenz@local:~]# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ root@192.168.0.151:/root/tmprpm
root@192.168.0.151's password:
sending incremental file list
created directory /root/tmprpm
./
.dbenv.lock
.rpm.lock
Conflictname
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Recommendname
Requirename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.002
sent 129.52K bytes received 396 bytes 28.87K bytes/sec
total size is 71.15M speedup is 547.66
现在,假设你有主 Web 服务器和数据备份服务器,你创建了每日备份并将其与备份服务器同步,现在你不想在 Web 服务器中保留备份的本地副本。
那么,你会等待传输完成然后手动删除该本地备份文件吗?当然不。这种自动删除可以使用
–remove-source-files
选项。
[rumenz@local:~]# rsync --remove-source-files -zvh backup.tar.gz root@192.168.0.151:/tmp/backups/
root@192.168.0.151's password:
backup.tar.gz
sent 795 bytes received 2.33K bytes 894.29 bytes/sec
total size is 267.30K speedup is 85.40
[rumenz@local:~]# ls -l backup.tar.gz
ls: cannot access 'backup.tar.gz': No such file or directory
如果你是使用 rsync 的新手并且不知道你的命令究竟要做什么。rsync 可能真的会弄乱目标文件夹中的内容,然后进行撤消可能是一项乏味的工作。
使用此选项不会对文件进行任何更改并显示命令的输出,如果输出显示与你想要做的完全相同,那么你可以删除
–dry-run
选项并在终端上运行。
[rumenz@local:~]# rsync --dry-run --remove-source-files -zvh backup.tar.gz root@192.168.0.151:/tmp/backups/
root@192.168.0.151's password:
backup.tar.gz
sent 50 bytes received 19 bytes 19.71 bytes/sec
total size is 267.30K speedup is 3,873.97 (DRY RUN)
你可以从一台机器传输到另一台机器时设置带宽限制
–bwlimit
选项。此选项可帮助我们限制I/O
带宽。
[rumenz@local]# rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ root@192.168.0.151:/root/tmprpm/
root@192.168.0.151's password:
sending incremental file list
sent 324 bytes received 12 bytes 61.09 bytes/sec
total size is 38.08M speedup is 113347.05
此外,默认情况下 rsync 仅同步更改的块和字节,如果你想明确地同步整个文件,那么你可以使用
-W
选项。
[rumenz@local]# rsync -zvhW backup.tar /tmp/backups/backup.tar
backup.tar
sent 14.71M bytes received 31 bytes 3.27M bytes/sec
total size is 16.18M speedup is 1.10
相关文章