rsync 取代 cp 有进度状态也保存权限及rsync协议同步用法

0x00 常用示例

rsync -av 本地路径 远程路径 例如:

rsync -av /home/ivo/xxx.txt ibo@192.168.1.1:/backup/

这是把本地的xxx.txt这个文档,复制到使用rsync最快速删除海量文件的方法主机ivbo的/backup/路径下面。

1、先安装rsync:

yum install rsync

2、建立一个空的文件夹:

mkdir /tmp/test

3、技巧用rsync删除目标目录:

rsync --delete-before -a -H -v --progress --stats /tmp/test/ log/

这样我们要删除的log目录就会被清空了,删除的速度会非常快。rsync实际上用的是替换原理,处理数十万个文件也是秒删。 选项说明:

  • --delete-before 接收者在传输之前进行删除操作
  • -progress 在传输时显示传输过程
  • -a 归档模式,表示以递归方式传输文件,并保持所有文件属性
  • -H 保持硬连接的文件
  • -v 详细输出模式
  • --stats 给出某些文件的传输状态

两台机器之间带宽小有 avz 有点用。普通的就用 avP

rsync -avP -e 'ssh -p 33653' /path/to/local/dir/ user@remote_host:/path/to/remote/dir/

-a --archive 归档模式(保留文件权限、时间戳、所有者等,等同于 -rlptgoD)
-v --verbose 显示详细输出(列出同步的文件和过程)
-P --progress --partial 显示传输进度条,并保留未完整传输的文件(支持断点续传)
-e 'ssh -p 33653' 使用 ssh 协议,端口 33653

0x01 替代 cp

正常状态下的 cp 是没有进度条的,这在一定程度上会比较不方便,尤其是文件多的时候不知道什么的时候完成要等多久。为了解决这个问题找到了 rsync,rsync 是可以实现这个功能的。

示例

rsync -avP /源地址 /目标地址/

说明

rsync -avP /source/data /destination/

文件夹 data 复制到 /destination/data 下。

如果是:

rsync -avP /source/data/ /destination/

就会将 data/目录下的所有内容, 复制到 /destination/下! 和上面的区别仅仅是data后面的有没有/。

也就是用rsync -avP代替cp即可。

.bashrc 中添加别名,写在最后一行:

alias cpa="rsync -avP"

我这个是用cpa来代替的,你也可以写成任意的,之所以没替换cp,我是考虑到经常远程用惯了一个普通的就用不惯了,特意更改了一点点。

0x02 使用 rsync 协议做同步

实测与 ssh 协议对比,一个 112M,一个 110M 同步速度差异不大。
实测使用 avP 的参数就可以了,压缩要耗时,还不如直接传的快,如果是海外小带宽的 vps,用 avz 有点用。

安装rysnc--编写配置文件--做服务端守护进程--客户端连接

1.安装rysnc

yum install -y rsync
apt install -y rsync
rsync --version

2.编写配置文件

test@test-Default-string:/etc$ cat /etc/rsyncd.conf 
uid = test
gid = test
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log

[sync_air030] # 模块名称(客户端通过此名称访问)
path = /home/test/air030 # 要同步的目录路径
comment = Synchronization Module
read only = false  # 允许写入
list = yes
auth users = test # 认证用户名我用的现成的用户,也可以不用
secrets file = /etc/rsyncd.secrets  # 密码文件路径

test@test-Default-string:/etc$ sudo cat /etc/rsyncd.secrets 
test:a #格式 用户名:密码
 修改权限sudo chmod 600 /etc/rsyncd.secrets

3.做服务端守护进程

sudo rsync --daemon --config=/etc/rsyncd.conf
sudo rsync --daemon --config=/etc/rsyncd.conf --no-detach
# 或者
sudo systemctl start rsyncd
sudo systemctl enable rsyncd
sudo systemctl status rsyncd

4.客户端连接

rsync -av air030_data/ test@192.168.10.10::sync_air030/
# rsync 源地址 目标地址
# test 用户名
# 192.168.10.10 服务器地址
# sync_air030 模块名称 必须使用 ::连接

客户端测试模块名称的方法

rysnc rsync://192.168.10.10/sync_air030/
#查看模块名称即可
上一篇
下一篇