跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 管理指南 / 常用任务 / 使用 RSync 复制文件
适用范围 SUSE Linux Enterprise Server 15 SP6

15 使用 RSync 复制文件

当今时代,用户通常都会有数台计算机:家用计算机和办公计算机、笔记本电脑、智能手机或平板电脑。因而,在多个设备之间保持文件和文档同步的任务就变得越发重要。

警告
警告:数据丢失风险

您在开始使用同步工具之前,应该先熟悉其特性和功能。请务必备份您的重要文件。

15.1 概念概述

对于要通过慢速网络连接同步大量数据的情况,Rsync 提供了可靠的方法来只传输文件中的更改。此方法不仅适用于文本文件,还适用于二进制文件。为了检测文件之间的差异,Rsync 将文件分为多个块,并计算它们的校验和。

检测更改对计算能力有一定的要求。因此,请确保两端的计算机均具有足够的资源,包括 RAM。

当需要定期传输大量只包含微小更改的数据时,Rsync 特别有用。进行备份时就常常用到该工具。Rsync 也非常适合用来镜像试验服务器,此类服务器将 Web 服务器的完整目录树存储到 DMZ 内的某台 Web 服务器中。

Rsync 并不是同步工具,虽然它的名字看上去有些像。Rsync 工具一次只能在一个方向复制数据。它不会也不能反向复制数据。如果您需要既能同步源又能同步目标的双向工具,请使用 Csync。

15.2 基本语法

Rsync 是一个命令行工具,基本语法如下:

rsync [OPTION] SOURCE [SOURCE]... DEST

您可以在任何本地或远程计算机上使用 Rsync,前提是您拥有相应的访问权限和写入权限。可以有多个 SOURCE 项。SOURCEDEST 占位符可以是路径和/或 URL。

下面介绍一些最常用的 Rsync 选项:

-v

输出较详细的文本

-a

存档模式;以递归方式复制文件并保留时间戳、用户/组所有权、文件权限和符号链接

-z

压缩传输的数据

注意
注意:尾部斜杠计数

使用 Rsync 时,要特别注意尾部斜杠。目录后面的尾部斜杠表示目录的内容。没有尾部斜杠表示目录本身

15.3 在本地复制文件和目录

下面的说明假设当前用户拥有 /var/backup 目录的写入权限。要将单个文件从计算机上的一个目录复制到另一个路径,请使用以下命令:

> rsync -avz backup.tar.xz /var/backup/

文件 backup.tar.xz 会复制到 /var/backup/,绝对路径是 /var/backup/backup.tar.xz

请勿忘记在 /var/backup/ 目录后面加上尾部斜杠。如果不插入斜杠,文件 backup.tar.xz 会复制到 /var/backup(文件)中,而不是 /var/backup/ 目录中!

复制目录与复制单个文件相似。下面的示例会将目录 tux/ 及其内容复制到 /var/backup/ 目录中:

> rsync -avz tux /var/backup/

在绝对路径 /var/backup/tux/ 中可找到副本。

15.4 远程复制文件和目录

两台计算机上都需要有 Rsync 工具。要从远程目录复制文件或将文件复制到远程目录,需要提供 IP 地址或域名。如果本地计算机和远程计算机上当前的用户名相同,则可以不指定用户名。

要使用相同的用户(在本地和远程主机上)将文件 file.tar.xz 从本地主机复制到远程主机 192.168.1.1,请使用以下命令:

> rsync -avz file.tar.xz  tux@192.168.1.1:

根据您的个人偏好,也可以使用下面的命令,它们的作用相同:

> rsync -avz file.tar.xz 192.168.1.1:~
> rsync -avz file.tar.xz 192.168.1.1:/home/tux

在使用标准配置的所有情况下,系统会提示您输入远程用户的通行口令。此命令会将 file.tar.xz 复制到用户 tux 的主目录(通常为 /home/tux)。

远程复制目录与在本地复制目录相似。下面的示例会将目录 tux/ 及其内容复制到 192.168.1.1 主机上的远程目录 /var/backup/

> rsync -avz tux 192.168.1.1:/var/backup/

假设您在主机 192.168.1.1 上拥有写入权限,便可在绝对路径 /var/backup/tux 中找到副本。

15.5 配置和使用 Rsync 服务器

Rsync 可作为在默认端口 873 上侦听传入连接的守护程序 (rsyncd) 运行。此守护程序可以接收复制目标

下面的说明介绍如何在 jupiter 上创建具有备份目标的 Rsync 服务器。此目标可用于存储您的备份。要创建 Rsync 服务器,请执行以下操作:

过程 15.1︰ 设置 Rsync 服务器
  1. 在 jupiter 上,创建用于存储您所有备份文件的目录。此示例中使用了 /var/backup

    # mkdir /var/backup
  2. 指定所有权。在此示例中,该目录为 users 组中的用户 tux 所拥有:

    # chown tux.users /var/backup
  3. 配置 rsyncd 守护程序。

    我们将配置文件分割成一个主文件和用于存放备份目标的某些模块。如此,以后便可更轻松地添加其他目标。全局值可以存储在 /etc/rsyncd.d/*.inc 文件中,而模块则存放于 /etc/rsyncd.d/*.conf 文件中:

    1. 创建目录 /etc/rsyncd.d/

      # mkdir /etc/rsyncd.d/
    2. 在主配置文件 /etc/rsyncd.conf 中,添加以下几行:

      # rsyncd.conf main configuration file
      log file = /var/log/rsync.log
      pid file = /var/lock/rsync.lock
      
      &merge /etc/rsyncd.d 1
      &include /etc/rsyncd.d 2

      1

      /etc/rsyncd.d/*.inc 文件中的全局值合并到主配置文件中。

      2

      /etc/rsyncd.d/*.conf 文件加载任何模块(或目标)。这些文件不应该包含对全局值的任何参照。

    3. 在文件 /etc/rsyncd.d/backup.conf 中添加以下几行创建您的模块(您的备份目标):

      # backup.conf: backup module
      [backup] 1
         uid = tux 2
         gid = users 2
         path = /var/backup 3
         auth users = tux  4
         secrets file = /etc/rsyncd.secrets 5
         comment = Our backup target

      1

      备份目标。可以使用您喜欢的任何名称。但最好根据目标的用途来命名,并在 *.conf 文件中使用相同名称。

      2

      指定在进行文件传输时所用的用户名或组名。

      3

      定义用于存储备份的路径(从步骤 1 中)。

      4

      指定允许的用户的逗号分隔列表。列表以最简单的方式包含允许连接到此模块的用户名。在我们的示例中,只允许用户 tux

      5

      指定包含用户名和明文口令的行所在文件的路径。

    4. 创建包含以下内容的 /etc/rsyncd.secrets 文件,并替换 PASSPHRASE

      # user:passwd
      tux:PASSPHRASE
    5. 确保该文件只有 root 用户可读:

      # chmod 0600 /etc/rsyncd.secrets
  4. 通过以下命令启动并启用 rsyncd 守护程序:

    # systemctl enable rsyncd
    # systemctl start rsyncd
  5. 测试是否可访问 Rsync 服务器:

    > rsync jupiter::

    您应该会看到类似如下的响应:

    backup          Our backup target

    若非如此,请检查您的配置文件、防火墙和网络设置。

上述步骤创建了 Rsync 服务器,现在可以使用它来存储备份。下例还创建了一个列出所有连接的日志文件。此文件存储在 /var/log/rsyncd.log 中。此文件可用来对传输进行调试。

要列出备份目标的内容,请使用以下命令:

> rsync -avz jupiter::backup

此命令会列出服务器上 /var/backup 目录中存在的所有文件。此请求也会记录在日志文件 /var/log/rsyncd.log 中。要开始实际传输,请提供源目录。用 . 来表示当前目录。例如,下面的命令会将当前目录复制到 Rsync 备份服务器:

> rsync -avz . jupiter::backup

默认情况下,Rsync 不会在运行时删除文件和目录。要允许删除,必须另外指定选项 --delete。要确保不删除任何较新的文件,可改为使用选项 --update。必须手动解决所有冲突。

15.6 更多信息

Csync

双向文件同步工具,请参见 https://csync.org/

RSnapshot

创建增量备份,请参见 https://rsnapshot.org

Unison

与 CSync 类似的文件同步工具,但具有图形界面,请参见 https://www.seas.upenn.edu/~bcpierce/unison/

Rear

一种灾难恢复框架,请参见 Administration Guide of the SUSE Linux Enterprise High Availability, chapter Disaster Recovery with Rear (Relax-and-Recover)