怎么备份Linux ?15 个 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
- 点赞
- 收藏
- 关注作者
评论(0)