linux使用rsync进行数据同步

这两天因为换电脑,需要将旧电脑中的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_modulestmp目录,也就是目录src_directory/node_modulessrc_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指令进行数据复制、更新的一些笔记。希望对大家有所帮助。

参考资料:

https://www.samba.org/ftp/rsync/rsync.html

rsync_百度百科

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值