这两天因为换电脑,需要将旧电脑中的900多G资料都复制到新电脑上。受制于linux系统下外接数据硬盘在拷贝大文件时的插拔读写速度,所以查询了rsync指令的用法。在这里记录一下以备后续查找,也希望能帮到一些朋友。(我的电脑是ubuntu 18.04)
rsync官方网站: https://www.samba.org/ftp/rsync/rsync.html
一、rsync指令的介绍
首先先介绍一下rsync这个指令。以下内容来自于百度百科:
rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。已支持跨平台,可以在Windows与Linux间进行数据同步。
它的特性如下:
1. 可以镜像保存整个目录树和文件系统。
2. 可以很容易做到保持原来文件的权限、时间、软硬链接等等。
3. 无须特殊权限即可安装。
4. 快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
5. 安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
6. 支持匿名传输,以方便进行网站镜像。
——————————————————————————————
从字面意思上,rsync 可以理解为 remote sync(远程同步),但它不仅可以远程同步数据(类似于 scp 命令),还可以本地同步数据(类似于 cp 命令)。不同于 cp 或 scp 的一点是,使用 rsync 命令备份数据时,如果数据已经存在,则不会直接覆盖以前的数据,而是先判断已经存在的数据和新数据的差异;只有数据不同时才会把不相同的部分覆盖。
二、rsync的用法
如果电脑中没有安装rsync的话,可以通过以下指令进行安装(或者官网安装)
sudo apt-get update
sudo apt-get install rsync
rsync语法有三种,分别是本地到本地Local to Local,本地到远程Local to Remote,远程到本地Remote to Local。
其中OPTION
是rsync选项。SRC
是源目录。DEST
是目标目录。USER
是远程用户名。HOST
是远程主机名名称,可以是IP地址或者可解释的域名。
Local to Local: rsync [OPTION]... [SRC]... DEST
Local to Remote: rsync [OPTION]... [SRC]... [USER@]HOST:DEST
Remote to Local: rsync [OPTION]... [USER@]HOST:SRC... [DEST]
rsync
提供了许多控制其行为的选项。以下是最经常使用的选项。
-a
/--archive
存档模式,等效于-rlptgoD
。此选项指示rsync
递归同步目录,传输特殊设备和块设备,保留符号链接,组,所有权和权限等。
-z
/--compress
,此选项将强制rsync
在数据发送给目标计算机之前对数据进行压缩。
-P
等效于--partial --progress
。使用此选项时,rsync
将在传输过程中显示进度条并保留部分传输的文件。在慢速或不稳定的网络连接传输大文件时非常有用。
--delete
使用此选项时,rsync
将从目标位置删除相同的文件。适合用于镜像文件。
-q
/--quiet
此选项禁止显示非错误消息。-e
此选项使您可以选择其他远程shell程序。默认使用ssh。
1)基础操作-本地间复制(Local to Local)
用于本地目录间复制文件时,运行rysnc命令的用户必须对源目录或者文件具有读取权限,并且对目标目录具有写入权限。
如果目标参数未指定文件名,rsync将会保留原始文件名称。要使用其它文件名称保复制文件,可以在目标参数指定文件名。
值得一提的是,rsync
命令会根据源目录是否使用斜杠/
,而有不同的处理方式。
如果在源目录尾部添加斜杠,rsync
会将目录的内容复制到目标目录。若省略斜杠,rsync
则会将源目录复制到目标目录。
比如:
rsync -a /opt/filename.zip /tmp/newfilename.zip
2)远程同步数据
当使用rsync
进行远程传输时,rsync必须安装在源计算机和目标计算机上。rsync默认使用SSH作为远程shell程序。
如果尚未为远程计算机设置SSH无密码登录,rsync会要求输入用户名和密码。远程计算机SSH服务监听的端口不是默认端口22时,请使用-e
选项指定端口。
当传输大量数据或者大文件时,建议在screen,nohup,tmux运行rsync
命令或使用rsync命令的-P
选项。
3)rsync增量备份/更新/复制
在增量复制或者备份时,强烈建议使用-t
选项,该选项用与保持文件的mtime属性不变。mtime是文件的修改时间。
如果没有指定-t
选项时,目标文件mtime属性会设置为系统时间,导致下次更新检测到mtime不同,从而导致增量更新无效。
通常你可能还需要显示rsync同步过程的详细信息,使用-v
选项。确认是否正确实现增量同步。
对于同步大量的数据或者大文件,rsync
命令的-P
选项可以显示进度并保留部分传输的文件。
remote_user是远程计算机的用户名,remote_host_or_ip远程计算机的IP地址或者可解释的域名。
rsync -avtP /opt/media/ remote_user@remote_host_or_ip:/opt/media/
4)同步本地目录到远程计算机(Local to Remote)
rsync -a /opt/media/ remote_user@remote_host_or_ip:/opt/media/
5)同步远程计算机到本地
rsync -a remote_user@remote_host_or_ip:/opt/media/ /opt/media/
6)指定SSH端口
rsync -a -e "ssh -p 2322" /opt/media/ remote_user@remote_host_or_ip:/opt/media/
7)后台同步数据
rsync -a -P remote_user@remote_host_or_ip:/opt/media/ /opt/media/
8)排除文件和目录
当需要排除文件或目录时,需要使用源目录的相对路径。有两种方式可以排除文件和目录。
第一种方式是使用rsync
命令的--exclude
选项,在命令行指定要排除的文件和目录。--exclude
选项可以重复使用多次排除多个文件与目录。
第二种方式是使用rsync
命令的--exclude-from
选项并指定一个文件,该文件包含要排除的目录与文件的路径。
在以下示例中,排除src_directory
目录的node_modules
和tmp
目录,也就是目录src_directory/node_modules
,src_directory/tmp
。
rsync -a --exclude=node_modules --exclude=tmp /src_directory/ /dst_directory/
rsync -a --exclude-from='/exclude-file.txt' /src_directory/ /dst_directory/
——————————————————————————————
三、可能遇到的问题
我在实际使用中遇到了下面这个问题,在用户名、密码、ip均正确且能够ping通的情况下,输入密码后提示:Permission denied,please try again.
以下是几种解决方案,可以逐步进行排查。
1)SSH服务未安装
通过以下指令安装启动
sudo apt-get install openssh-server
service sshd start
2)SSH服务对应22号端口未开启
使用ss -lnt指令进行查询,看22号端口是否开启。如果要修改端口、查看或编辑SSH服务配置文件,使用指令vim /etc/ssh/sshd.config,进入后把port后边默认的22端口改成其他端口即可(记得去掉前边的#)
3)修改/etc/ssh/sshd-config文件
将其中的PermitRootLogin no修改为yes
PubkeyAuthentication yes修改为no
AuthorizedKeysFile .ssh/authorized_keys前面加上#屏蔽掉,
PasswordAuthentication no修改为yes。
最后service sshd restart就可以了
4)zsh等引起的问题
这条解决方案我没有尝试,将链接放在这里,怀疑由类似问题引起的话可以查看这位大佬的博客。
ssh登录出现Permission denied, please try again可能的解决方案_ssh_宇航员写代码-华为开发者联盟鸿蒙专区
以上就是关于使用rsync指令进行数据复制、更新的一些笔记。希望对大家有所帮助。
参考资料: