mac rsync 备份

"ac rsync 备份"

Posted by Mr Chang on December 4, 2017      @ Views:

rsync 简介

rsync(remote synchronize)是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机之间的文件。也可以使用 rsync 同步本地硬盘中的不同目录。

rsync 是用于替代 rcp 的一个工具,rsync 使用所谓的 rsync算法 进行数据同步,这种算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 您可以参考 How Rsync Works A Practical Overview 进一步了解 rsync 的运作机制。

rsync 的初始作者是 Andrew Tridgell 和 Paul Mackerras,目前由 http://rsync.samba.org 维护。

rsync 支持大多数的类 Unix 系统,无论是 Linux、Solaris 还是 BSD上 都经过了良好的测试。 CentOS系统默认就安装了 rsync 软件包。 此外,在 windows 平台下也有相应的版本,如 cwrsync 和DeltaCopy 等。 rsync 具有如下的基本特性:

  1. 可以镜像保存整个目录树和文件系统
  2. 可以很容易做到保持原来文件的权限、时间、软硬链接等
  3. 无须特殊权限即可安装
  4. 优化的流程,文件传输效率高
  5. 可以使用 rsh、ssh 方式来传输文件,当然也可以通过直接的 socket 连接
  6. 支持匿名传输,以方便进行网站镜象

在使用 rsync 进行远程同步时,可以使用两种方式:远程 Shell 方式(建议使用 ssh,用户验证由 ssh 负责)和 C/S 方式(即客户连接远程 rsync 服务器,用户验证由 rsync 服务器负责)。

无论本地同步目录还是远程同步数据,首次运行时将会把全部文件拷贝一次,以后再运行时将只拷贝有变化的文件(对于新文件)或文件的变化部分(对于原有文件)。

rsync 在首次复制时没有速度优势,速度不如 tar,因此当数据量很大时您可以考虑先使用 tar 进行首次复制,然后再使用 rsync 进行数据同步。

rsync 命令

rsync 是一个功能非常强大的工具,其命令也有很多功能选项。rsync 的命令格式为:

1)本地使用:
rsync [OPTION...] SRC... [DEST]

2)通过远程 Shell 使用:
拉: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
推: rsync [OPTION...] SRC... [USER@]HOST:DEST

3)访问 rsync 服务器:
拉: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
推: rsync [OPTION...] SRC... [USER@]HOST::DEST
拉: rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
推: rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

其中:

  1. SRC: 是要复制的源位置
  2. DEST: 是复制目标位置
  3. 若本地登录用户与远程主机上的用户一致,可以省略 USER@
  4. 使用远程 shell 同步时,主机名与资源之间使用单个冒号“:”作为分隔符
  5. 使用 rsync 服务器同步时,主机名与资源之间使用两个冒号“::”作为分隔符
  6. 当访问 rsync 服务器时也可以使用 rsync:// URL
  7. “拉”复制是指从远程主机复制文件到本地主机
  8. “推”复制是指从本地主机复制文件到远程主机
  9. 当进行“拉”复制时,若指定一个 SRC 且省略 DEST,则只列出资源而不进行复制

下面列出常用选项:

  1. 若使用普通用户身份运行 rsync 命令,同步后的文件的属主将改变为这个普通用户身份。
  2. 若使用超级用户身份运行 rsync 命令,同步后的文件的属主将保持原来的用户身份。

rsync 的基本使用

在本地磁盘同步数据

# rsync -a --delete /home /backups
# rsync -a --delete /home/ /backups/home.0

在指定复制源时,路径是否有最后的 “/” 有不同的含义,例如:

  • /home : 表示将整个 /home 目录复制到目标目录
  • /home/ : 表示将 /home 目录中的所有内容复制到目标目录

使用基于 ssh 的 rsync 远程同步数据

  1. 同步静态主机表文件

     # 执行“推”复制同步(centos5 是可解析的远程主机名)
     [root@soho ~]# rsync /etc/hosts centos5:/etc/hosts
    	
     # 执行“拉”复制同步(soho 是可解析的远程主机名)
     [root@centos5 ~]# rsync soho:/etc/hosts /etc/hosts
    
  2. 同步用户的环境文件

     # 执行“推”复制同步
     [osmond@soho ~]$ rsync ~/.bash* centos5:
    	
     # 执行“拉”复制同步
     [osmond@cnetos5 ~]$ rsync soho:~/.bash* .
    
  3. 同步站点根目录

     # 执行“推”复制同步
     [osmond@soho ~]$ rsync -avz --delete /var/www root@192.168.0.101:/var/www
    	
     # 执行“拉”复制同步
     [osmond@cnetos5 ~]$ rsync -avz --delete root@192.168.0.55:/var/www /var/www
    

使用基于 ssh 的 rsync 同步数据可以使用 -e ssh 参数,当前的 CentOS 默认指定使用 ssh 作为远程Shell。若您在其他系统上执行 rsync 命令,为确保使用 ssh 作为远程 Shell,请添加 -e ssh 参数。

通常 rsync 命令在后台以 cron 任务形式执行,为了避免从终端上输入口令需要设置 ssh。ssh 的设置方法请参考 安全登录守护进程。。