如何在Linux上使用rsync备份数据

时间:2020-01-09 10:45:09  来源:igfitidea点击:

rsync是为类似Unix的系统构建的协议,为备份和同步数据提供了令人难以置信的多功能性。它可以在本地用于将文件备份到其他目录,也可以配置为通过Internet同步到其他主机。

它可以在Windows系统上使用,但只能通过各种端口(例如Cygwin)使用,因此在本操作方法中,我们将讨论在Linux上进行设置。首先,我们需要安装/更新rsync客户端。在Red Hat发行版上,命令是yum install rsync,在Debian上是sudo apt-get install rsync。

使用rsync进行本地备份

在本教程的第一部分中,我们将文件从Directory1备份到Directory2. 这两个目录都位于同一硬盘驱动器上,但是如果目录存在于两个不同的驱动器上,则这将完全相同。我们可以采用几种不同的方法来实现此目标,具体取决于我们要配置哪种备份。对于大多数目的,下面的代码行就足够了:

$ rsync -av --delete /Directory1/ /Directory2/

上面的代码会将Directory1的内容同步到Directory2,并且两者之间没有任何区别。如果rsync发现Directory2具有Directory1没有的文件,它将删除它。如果rsync在Directory1中找到已更改,创建或者删除的文件,它将对Directory2反映相同的更改。

我们可以使用很多不同的开关来使rsync个性化以满足特定需求。以下是上述代码告诉rsync处理备份的内容:

  1. -a =递归(递归到目录),链接(将符号链接复制为符号链接),权限(保留权限),时间(保留修改时间),组(保留组),所有者(保留所有者),保留设备文件和保留特殊文件。
  2. -v =详细。我认为详细很重要的原因是,我们可以确切地看到rsync正在备份什么。考虑一下:如果硬盘坏了,并且在不知情的情况下开始删除文件,然后运行rsync脚本,它将这些更改推送到备份中,从而删除了我们不想获取的文件的所有实例摆脱?
  3. delete =告诉rsync删除Directory2中任何Directory1中没有的文件。如果我们选择使用此选项,出于上述原因,我建议我们也使用详细选项。

使用上面的脚本,这里是使用rsync将Directory1备份到Directory2生成的输出。请注意,没有详细的开关,我们将不会收到这样的详细信息。

上面的屏幕截图告诉我们,从Directory2中存在的副本中检测到File1.txt和File2.jpg是新文件还是其他更改,因此已对其进行了备份。新手提示:请注意,在我的rsync命令中,目录末尾的斜杠是必须的,请记住它们。

在本教程结束时,我们将介绍一些方便的开关,但请记住,要查看完整列表,可以键入man rsync并查看要使用的开关的完整列表。

就本地备份而言,有关内容涵盖了该内容。如我们所知,rsync非常易于使用。使用它通过Internet与外部主机同步数据时,它会变得稍微复杂一些,但我们将向我们展示一种简单,快速且安全的方法。

使用rsync进行外部备份

可以通过几种不同的方式为外部备份配置rsync,但我们将介绍通过SSH隧道化rsync的最实用(也是最简单,最安全)的方法。大多数服务器,甚至许多客户端已经具有SSH,它可以用于rsync备份。我们将向我们展示使一台Linux机器备份到本地网络上的另一台机器的过程。如果一台主机在Internet上的某个地方出局,则过程将完全相同,只需注意端口22(或者配置了SSH的任何端口)将需要在服务器端的任何网络设备上转发。

在服务器(将接收备份的计算机)上,确保已安装SSH和rsync。

# yum -y install ssh rsync
# sudo apt-get install ssh rsync

除了在服务器上安装SSH和rsync之外,真正需要做的就是在服务器上设置要备份文件的存储库,并确保SSH被锁定。确保计划使用的用户具有复杂的密码,并且切换SSH侦听的端口也是一个好主意(默认值为22)。

我们将运行与在本地计算机上使用rsync相同的命令,但包括必要的添加功能,以便通过SSH将rsync隧道传输到本地网络上的服务器。对于连接到192.168.235.137并使用上述相同开关(-av delete)的极客用户,我们将运行以下命令:

$ rsync -av –delete -e ssh /Directory1/ [email protected]:/Directory2/

如果我们在22以外的其他端口上进行SSH侦听,则需要指定端口号,例如在本示例中,我使用端口12345:

$ rsync -av –delete -e 'ssh -p 12345' /Directory1/ [email protected]:/Directory2/

从上面的屏幕快照中可以看到,通过网络备份时给出的输出与本地备份时几乎相同,唯一改变的是我们使用的命令。还要注意,它提示我们输入密码。这是通过SSH进行身份验证。我们可以设置RSA密钥来跳过此过程,这也将简化rsync的自动化。

自动化rsync备份

Cron可以在Linux上用于自动执行命令,例如rsync。使用Cron,我们可以让我们的Linux系统每晚运行备份,或者我们经常希望它们运行。

要为我们登录的用户编辑cron表文件,请运行:

$ crontab -e

我们将需要熟悉vi才能编辑此文件。键入I进行插入,然后开始编辑cron表文件。

Cron使用以下语法:每小时的分钟,一天中的小时,每月的某天,一年中的某月,一周中的某天,命令。

刚开始时可能会有些混乱,所以让我举个例子。以下命令将在每晚晚上10点运行rsync命令:

0 22 * * * rsync -av --delete /Directory1/ /Directory2/

第一个0指定小时的分钟,而22指定10 PM。由于我们希望该命令每天运行,因此我们将其余字段保留星号,然后粘贴rsync命令。

完成Cron的配置后,按Escape键,然后键入:wq(不带引号)并按Enter。这将保存我们在vi中的更改。

Cron可以对此进行更深入的了解,但是继续进行下去将超出本教程的范围。大多数人只希望每周或者每天进行一次简单备份,而我们向我们展示的内容可以轻松实现。有关Cron的更多信息,请参见手册页。

其他有用的功能

我们可以做的另一件事是将备份放入一个zip文件中。我们将需要指定要放置zip文件的位置,然后将该目录重新同步到备份目录。例如:

$ zip /ZippedFiles/archive.zip /Directory1/ && rsync -av --delete /ZippedFiles/ /Directory2/

上面的命令从Directory1中获取文件,将它们放在/ZippedFiles/archive.zip中,然后将该目录rsync到Directory2. 最初,我们可能会认为这种方法对于大型备份而言效率不高,因为考虑到每次对文件进行最小的改动后zip文件都会更改。但是,rsync仅传输更改后的数据,因此,如果zip文件为10 GB,然后将文本文件添加到Directory1,则rsync将知道我们添加的全部内容(即使它在zip中),并且仅传输了几千字节更改的数据。

有两种不同的方法可以加密rsync备份。最简单的方法是在硬盘驱动器本身(文件要备份到的硬盘驱动器)上安装加密。另一种方法是在将文件发送到远程服务器(或者其他硬盘驱动器,无论我们要备份到哪个文件)之前对其进行加密。