怎么备份Linux ?15 个 rsync 命令示例

举报
Tiamo_T 发表于 2021/08/14 00:35:39 2021/08/14
【摘要】 rsync 代表远程同步。rsync 用于在 UNIX/Linux 中执行备份操作。rsync 实用程序用于以有效的方式将文件和目录从一个位置同步到另一个位置。备份位置可以在本地服务器或远程服务器上。rsync 的重要特性速度:第一次,rsync 在源目录和目标目录之间复制整个内容。下一次,rsync 仅将更改的块或字节传输到目标位置,这使得传输速度非常快。安全性:rsync 允许在传输过程...

rsync 代表远程同步。

rsync 用于在 UNIX/Linux 中执行备份操作。

rsync 实用程序用于以有效的方式将文件和目录从一个位置同步到另一个位置。备份位置可以在本地服务器或远程服务器上。

rsync 的重要特性

  • 速度:第一次,rsync 在源目录和目标目录之间复制整个内容。下一次,rsync 仅将更改的块或字节传输到目标位置,这使得传输速度非常快。
  • 安全性:rsync 允许在传输过程中使用 ssh 协议加密数据。
  • 更少的带宽:rsync 在发送端和接收端分别使用数据块的压缩和解压缩。因此,与其他文件传输协议相比,rsync 使用的带宽总是更少。
  • 权限:安装和执行 rsync 不需要特殊权限

句法

$ rsync options source destination

源和目标可以是本地的或远程的。如果是远程,请指定登录名、远程服务器名称和位置。

示例 1. 同步本地服务器中的两个目录

要同步本地计算机中的两个目录,请使用以下 rsync -zvr 命令。

$ rsync -zvr /var/opt/installation/inventory/ /root/temp
building file list ... done
sva.xml
svB.xml
.
sent 26385 bytes  received 1098 bytes  54966.00 bytes/sec
total size is 44867  speedup is 1.63
$

在上面的 rsync 示例中:

  • -z 是启用压缩
  • -v 详细
  • -r 表示递归

现在让我们看看从源复制到目标的文件之一的时间戳。如下所示,rsync 在同步期间没有保留时间戳。


$ ls -l /var/opt/installation/inventory/sva.xml /root/temp/sva.xml 
-r--r--r-- 1 bin bin 949 Jun 18 2020 /var/opt/installation/inventory/ sva.xml 
-r--r--r-- 1 root bin 949 Sep 2 2020 /root/temp/sva.xml

示例 2. 使用 rsync -a 在同步期间保留时间戳

rsync 选项 -a 表示归档模式。-a 选项执行以下操作,

  • 递归模式
  • 保留符号链接
  • 保留权限
  • 保留时间戳
  • 保留所有者和组

现在,执行示例 1 中提供的相同命令(但使用 rsync 选项 -a),如下所示:

$ rsync -azv /var/opt/installation/inventory/ /root/temp/
building file list ... done
./
sva.xml
svB.xml
.
sent 26499 bytes  received 1104 bytes  55206.00 bytes/sec
total size is 44867  speedup is 1.63
$

如下所示,rsync 在同步期间保留了时间戳。

$ ls -l /var/opt/installation/inventory/sva.xml /root/temp/sva.xml 
-r--r--r-- 1 root bin 949 Jun 18 2020 /var/opt/installation/inventory/ sva.xml 
-r--r--r-- 1 根 bin 949 2020 年 6 月 18 日 /root/temp/sva.xml

示例 3. 仅同步一个文件

要只复制一个文件,请在 rsync 命令中指定文件名,如下所示。

$ rsync -v /var/lib/rpm/Pubkeys /root/temp/ 
Pubkeys 

sent 42 bytes received 12380 bytes 3549.14 bytes/sec 
total size is 12288 speedup is 0.99

示例 4. 将文件从本地同步到远程

rsync 允许您在本地和远程系统之间同步文件/目录。

$ rsync -avz /root/temp/ thegeekstuff@192.168.200.10:/home/thegeekstuff/temp/
Password:
building file list ... done
./
rpm/
rpm/Basenames
rpm/Conflictname

sent 15810261 bytes  received 412 bytes  2432411.23 bytes/sec
total size is 45305958  speedup is 2.87

与远程服务器同步时,需要指定远程服务器的用户名和IP地址。您还应该指定远程服务器上的目标目录。格式为 username@machinename:path

正如您在上面看到的,它在从本地服务器到远程服务器进行 rsync 时要求输入密码。

有时您不想在将文件从本地备份到远程服务器时输入密码。例如,如果您有一个备份 shell 脚本,它使用 rsync 将文件从本地复制到远程服务器,则您需要能够在无需输入密码的情况下进行 rsync。

要做到这一点,我们之前解释过设置ssh 密码少登录

示例 5. 将文件从远程同步到本地

当你想将文件从远程同步到本地时,在源中指定远程路径,在目标中指定本地路径,如下所示。

$ rsync -avz thegeekstuff@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/
rpm/Basenames
.
sent 406 bytes  received 15810230 bytes  2432405.54 bytes/sec
total size is 45305958  speedup is 2.87

示例 6. 用于同步的远程 shell

rsync 允许您指定要使用的远程 shell。您可以使用 rsync ssh 来启用安全的远程连接。

使用 rsync -e ssh 指定要使用的远程 shell。在这种情况下,rsync 将使用 ssh。

$ rsync -avz -e ssh thegeekstuff@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/
rpm/Basenames

sent 406 bytes  received 15810230 bytes  2432405.54 bytes/sec
total size is 45305958  speedup is 2.87

示例 7. 不要覆盖目标处的修改文件

在典型的同步情况下,如果文件在目的地被修改,我们可能不想用源文件中的旧文件覆盖该文件。

使用 rsync -u 选项来做到这一点。(即不要覆盖目的地的文件,如果它被修改)。在以下示例中,名为 Basenames 的文件已在目标位置进行了修改。因此,它不会被 rsync -u 覆盖。

$ ls -l /root/temp/Basenames
total 39088
-rwxr-xr-x 1 root root        4096 Sep  2 11:35 Basenames

$ rsync -avzu thegeekstuff@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/

sent 122 bytes  received 505 bytes  114.00 bytes/sec
total size is 45305958  speedup is 72258.31

$ ls -lrt
total 39088
-rwxr-xr-x 1 root root        4096 Sep  2 11:35 Basenames

示例 8. 仅同步目录树结构(而不​​是文件)

使用 rsync -d 选项仅将目录树从源同步到目标。下面的例子,只以递归方式同步目录树,而不是目录中的文件。

$ rsync -v -d thegeekstuff@192.168.200.10:/var/lib/ .
Password:
receiving file list ... done
logrotate.status
CAM/
YaST2/
acpi/

sent 240 bytes  received 1830 bytes  318.46 bytes/sec
total size is 956  speedup is 0.46

示例 9. 在传输期间查看 rsync 进度

当您使用 rsync 进行备份时,您可能想知道备份的进度。即有多少文件是副本,它以什么速率复制文件等。

rsync –progress 选项显示 rsync 执行的详细进度,如下所示。

$ rsync -avz --progress thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ...
19 files to consider
./
Basenames
     5357568 100%   14.98MB/s    0:00:00 (xfer#1, to-check=17/19)
Conflictname
       12288 100%   35.09kB/s    0:00:00 (xfer#2, to-check=16/19)
.
.
.
sent 406 bytes  received 15810211 bytes  2108082.27 bytes/sec
total size is 45305958  speedup is 2.87

您还可以使用 rsnapshot 实用程序(使用 rsync)来备份本地 linux 服务器,或备份远程 linux 服务器

示例 10. 删除在目标上创建的文件

如果文件不存在于源中,但存在于目标中,则您可能希望在 rsync 期间删除目标中的文件。

在这种情况下,请使用 –delete 选项,如下所示。rsync 删除选项删除源目录中不存在的文件。

# Source and target are in sync. Now creating new file at the target.
$ > new-file.txt

$ rsync -avz --delete thegeekstuff@192.168.200.10:/var/lib/rpm/ .
Password:
receiving file list ... done
deleting new-file.txt
./

sent 26 bytes  received 390 bytes  48.94 bytes/sec
total size is 45305958  speedup is 108908.55

Target 有一个名为 new-file.txt 的新文件,当使用 –delete 选项与源同步时,它删除了文件 new-file.txt

示例 11. 不要在目标上创建新文件

如果愿意,您可以仅更新(同步)目标上的现有文件。如果源中有新文件,而目标中没有这些文件,则可以避免在目标中创建这些新文件。如果您需要此功能,请在 rsync 命令中使用 –existing 选项。

首先,在源代码处添加一个 new-file.txt。

[/var/lib/rpm ]$ > new-file.txt

接下来,从目标执行 rsync。

$ rsync -avz --existing root@192.168.1.2:/var/lib/rpm/ .
root@192.168.1.2's password:
receiving file list ... done
./

sent 26 bytes  received 419 bytes  46.84 bytes/sec
total size is 88551424  speedup is 198991.96

如果你看到上面的输出,它没有收到新文件 new-file.txt

示例 12. 查看源和目标之间的变化

此选项可用于查看源和目标之间文件或目录的差异。

在源头:

$ ls -l /var/lib/rpm 
-rw-r--r-- 1 root root 5357568 2020-06-24 08:57 Basenames 
-rw-r--r-- 1 root root 12288 2020-05-28 22:03 Conflictname 
-rw-r--r-- 1 root root 1179648 2020-06-24 08:57 Dirnames

在目的地:

$ ls -l /root/temp 
-rw-r--r-- 1 root root 12288 May 28 2020 Conflictname 
-rw-r--r-- 1 bin bin 1179648 Jun 24 05:27 Dirnames 
-rw-r-- r-- 1 root root 0 Sep 3 06:39 Basenames

在上面的例子中,源和目标之间有两个不同之处。首先,文件 Dirname 的所有者和组不同。接下来,文件 Basenames 的大小不同。

现在让我们看看 rsync 如何显示这种差异。-i 选项显示项目更改。

$ rsync -avzi thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
>f.st.... Basenames
.f....og. Dirnames

sent 48 bytes  received 2182544 bytes  291012.27 bytes/sec
total size is 45305958  speedup is 20.76

在输出中,它在文件名或目录名前面显示了一些 9 个字母,表示更改。

在我们的示例中,Basenames(和 Dirnames)前面的字母表示如下:

> specifies that a file is being transferred to the local host.
f represents that it is a file.
s represents size changes are there.
t represents timestamp changes are there.
o owner changed
g group changed.

示例 13. 在文件传输期间包含和排除模式

rsync 允许您在进行同步时提供要包含和排除文件或目录的模式。

$ rsync -avz --include 'P*' --exclude '*' thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
./
Packages
Providename
Provideversion
Pubkeys

sent 129 bytes  received 10286798 bytes  2285983.78 bytes/sec
total size is 32768000  speedup is 3.19

在上面的示例中,它仅包括以“P”开头的文件或目录(使用 rsync include),并排除所有其他文件。(使用 rsync 排除 '*' )

示例 14. 不要传输大文件

您可以使用 rsync –max-size 选项告诉 rsync 不要传输大于特定大小的文件。

$ rsync -avz --max-size='100K' thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
./
Conflictname
Group
Installtid
Name
Sha1header
Sigmd5
Triggername

sent 252 bytes  received 123081 bytes  18974.31 bytes/sec
total size is 45305958  speedup is 367.35

max-size=100K 使 rsync 只传输小于或等于 100K 的文件。您可以用 M 表示兆字节,用 G 表示千兆字节。

示例 15. 传输整个文件

rsync 的主要功能之一是它只将更改的块传输到目的地,而不是发送整个文件。

如果网络带宽对您来说不是问题(但 CPU 是),您可以使用 rsync -W 选项传输整个文件。这将加速 rsync 进程,因为它不必在源和目标执行校验和。

#  rsync -avzW  thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp
Password:
receiving file list ... done
./
Basenames
Conflictname
Dirnames
Filemd5s
Group
Installtid
Name

sent 406 bytes  received 15810211 bytes  2874657.64 bytes/sec
total size is 45305958  speedup is 2.87
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。