同步文件和目录
维护系统备份副本的常见策略包括将一个或多个目录与位于本地系统(通常是某种可移动存储设备)或远程系统上的另一个目录(或多个目录)保持同步。 例如,我们可能有一个正在开发的网站的本地副本,并不时将其与远程 Web 服务器上的“实时”副本同步。
在类 Unix 世界中,执行此任务的首选工具是 rsync的. 该程序可以通过使用 rsync 远程更新协议, 这使得 rsync的 快速检测两个目录之间的差异并执行使它们同步所需的最少复制量。 这使得 rsync的 与其他类型的复制程序相比,使用起来非常快速且经济。
rsync 是这样调用的:
rsync的 选项源目的地
协调 资源 和 目的地 是以下之一:
● 本地文件或目录
● 远程文件或目录的形式 [用户@]主机:路径
● 使用 URI 指定的远程 rsync 服务器 rsync://[用户@]主机[:端口]/路径
请注意,源或目标必须是本地文件。 不支持远程到远程复制。
我们试试吧 rsync的 在一些本地文件上。 首先,让我们清理我们的 FOO 目录:
[我@linuxbox ~]$ rm -rf foo/*
[我@linuxbox ~]$ rm -rf foo/*
接下来,我们将同步 操场 带有相应副本的目录 FOO:
[我@linuxbox ~]$ rsync -av 游乐场 foo
[我@linuxbox ~]$ rsync -av 游乐场 foo
我们已经包括了 -a 选项(用于存档 - 导致递归和保存文件属性)和 -v 选项(详细输出)来制作 镜面 的 操场 内的目录 FOO. 当命令运行时,我们将看到正在复制的文件和目录的列表。 最后,我们将看到如下摘要消息:
发送 135759 字节 接收 57870 字节 387258.00 字节/秒 总大小为 3230 加速为 0.02
发送 135759 字节 接收 57870 字节 387258.00 字节/秒 总大小为 3230 加速为 0.02
指示执行的复印量。 如果我们再次运行该命令,我们将看到不同的结果:
[我@linuxbox ~]$ rsync -av 游乐场 foo
构建文件列表...完成
发送 22635 字节 接收 20 字节 45310.00 字节/秒 总大小为 3230 加速为 0.14
[我@linuxbox ~]$ rsync -av 游乐场 foo
构建文件列表...完成
发送 22635 字节 接收 20 字节 45310.00 字节/秒 总大小为 3230 加速为 0.14
请注意,没有文件列表。 这是因为 rsync的 检测到之间没有差异 〜/游乐场 和 ~/foo/操场,因此它不需要复制任何东西。 如果我们修改一个文件 操场 并运行 rsync的 再次:
[我@linuxbox ~]$ 触摸操场/dir-099/file-Z [我@linuxbox ~]$ rsync -av 游乐场 foo 构建文件列表...完成
游乐场/dir-099/file-Z
发送 22685 字节 接收 42 字节 45454.00 字节/秒 总大小为 3230 加速为 0.14
[我@linuxbox ~]$ 触摸操场/dir-099/file-Z [我@linuxbox ~]$ rsync -av 游乐场 foo 构建文件列表...完成
游乐场/dir-099/file-Z
发送 22685 字节 接收 42 字节 45454.00 字节/秒 总大小为 3230 加速为 0.14
我们看到了 rsync的 检测到更改并仅复制更新的文件。
作为一个实际的例子,让我们考虑一下我们之前使用的虚拟外置硬盘驱动器 焦油. 如果我们将驱动器连接到我们的系统,并再次安装在 /媒体/BigDisk,我们可以通过首先创建一个名为的目录来执行有用的系统备份 / 备份 在外部驱动器上,然后使用 rsync的 将最重要的内容从我们的系统复制到外部驱动器:
[我@linuxbox ~]$ mkdir /媒体/BigDisk/备份
[我@linuxbox ~]$ 须藤 rsync -av --delete /etc /home /usr/local
/媒体/BigDisk/备份
[我@linuxbox ~]$ mkdir /媒体/BigDisk/备份
[我@linuxbox ~]$ 须藤 rsync -av --delete /etc /home /usr/local
/媒体/BigDisk/备份
在这个例子中,我们复制了 /等, /主页和 在/ usr /本地 目录从我们的系统到我们想象的存储设备。 我们包括 - 删除 用于删除备份设备上可能存在但源设备上不再存在的文件的选项(这与我们第一次进行备份无关,但对后续副本很有用)。 重复连接外部驱动器并运行它的过程 rsync的 命令将是保持小型系统备份的有用(虽然不是理想的)方式。 当然,别名在这里也很有帮助。 我们可以创建一个别名并将其添加到我们的
.bashrc 文件以提供此功能:
别名备份='sudo rsync -av --delete /etc /home /usr/local
/media/BigDisk/备份'
别名备份='sudo rsync -av --delete /etc /home /usr/local
/media/BigDisk/备份'
现在我们要做的就是连接我们的外部驱动器并运行 备份 命令来完成这项工作。