rsync协议可以非常简单地用于普通的备份/同步作业,但是它的一些更高级的特性可能会让您感到惊讶。在本文中,我们将展示即使是最大的数据囤积者和备份爱好者如何将rsync作为一个单一的解决方案来满足他们所有的数据冗余需求。
如果你坐在那里想“rsync到底是什么?”?“或者“我只在非常简单的任务中使用rsync”,您可能想查看我们上一篇关于如何在Linux上使用rsync备份数据的文章,这篇文章介绍了rsync,指导您完成安装,并展示了它的更基本的功能。一旦您牢牢掌握了如何使用rsync(老实说,它并没有那么复杂)并且熟悉了Linux终端,您就可以继续阅读这个高级指南了。
首先,让我们的Windows读者和Linux专家站在同一个页面上。尽管rsync是为在类Unix系统上运行而构建的,但是没有理由不让您在Windows上使用它。Cygwin提供了一个很好的LinuxAPI,我们可以用它来运行rsync,所以请访问他们的网站,根据您的计算机下载32位或64位版本。
安装很简单;在进入“选择软件包”屏幕之前,您可以将所有选项保持为默认值。
现在,您需要对Vim和SSH执行相同的步骤,但是当您选择它们时,这些包看起来会有点不同,因此下面是一些屏幕截图:
安装Vim:
正在安装SSH:
在选择了这三个软件包之后,继续单击next,直到完成安装。然后你可以通过点击安装程序放在桌面上的图标来打开Cygwin。
既然Windows用户都在同一个页面上,那么让我们看看一个简单的rsync命令,并展示如何使用一些高级开关快速地使它变得复杂。
假设您有一堆需要备份的文件—现在谁不备份呢?**便携式硬盘以便备份计算机文件,并发出以下命令:
rsync -a /home/geek/files/ /mnt/u**/files/
或者,它在装有Cygwin的Windows电脑上的外观:
rsync -a /cygdrive/c/files/ /cygdrive/e/files/
非常简单,而且在这一点上真的不需要使用rsync,因为您可以拖放文件。但是,如果您的另一个硬盘已经有一些文件,并且只需要更新的版本以及自上次同步以来创建的文件,则此命令非常方便,因为它只将新数据发送到硬盘。对于大文件,尤其是通过互联网传输文件,这是一件大事。
将文件备份到外部硬盘,然后将硬盘与计算机放在同一位置是一个非常糟糕的主意,因此,让我们看看通过internet将文件发送到另一台计算机(您租用的计算机、家庭成员的计算机等)需要做些什么。
rsync -av --delete -e 'ssh -p 12345’ /home/geek/files/ [email protected]:/home/geek2/files/
上面的命令会将您的文件发送到IP地址为10.1.1.1的另一台计算机。它将从目标中删除源目录中不再存在的无关文件,输出正在传输的文件名,以便您了解发生了什么,并在端口12345上通过SSH传输rsync。
-a-v-e--delete开关是一些最基本和最常用的开关;如果您正在阅读本教程,您应该已经对它们有了很多了解。我们来看看其他一些有时被忽略但非常有用的开关:
--progress–此开关允许我们查看每个文件的传输进度。它在通过internet传输大文件时特别有用,但在通过快速网络传输小文件时,它会输出大量无意义的信息。
正在执行以--progress开关作为备份的rsync命令:
--partial–这是另一个开关,在通过internet传输大型文件时特别有用。如果rsync在文件传输过程中由于任何原因被中断,则部分传输的文件将保留在目标目录中,并且一旦再次执行rsync命令,传输将在停止的位置继续。当通过internet传输大文件(比如说,几GB)时,没有什么比几秒钟的internet中断、蓝屏或人为错误导致文件传输中断而不得不重新开始更糟糕的了。
-P–这个开关结合了--progress和--partial,所以改用它,它将使rsync命令更加整洁。
-z或--compress–此开关将使rsync在传输文件数据时压缩文件数据,从而减少必须发送到目标的数据量。它实际上是一个相当常见的开关,但远不是必要的,只是真正有利于您之间的传输速度慢连接,它没有做什么,为以下类型的文件:7z,avi,bz2,deb,g,ziso,jpeg,jpg,mov,mp3,mp4,ogg,rpm,tbz,tgz,z,zip。
-或者——人类可读的——如果您使用的是——progress开关,那么您肯定也想使用这个开关。也就是说,除非您喜欢动态地将字节转换为兆字节。h开关将所有输出的数字转换成可读的格式,这样您就可以真正了解传输的数据量。
-n或者——试运行——这个开关对于您第一次编写rsync脚本并测试它是非常重要的。它执行了一个试运行,但实际上没有做任何更改—可能的更改仍然正常输出,因此您可以在将脚本转入生产之前阅读所有内容并确保它看起来正常。
-R或--relative–如果目标目录不存在,则必须使用此开关。我们将在本指南的后面部分使用此选项,以便在目标计算机上创建文件夹名称中带有时间戳的目录。
--exclude from–此开关用于链接到包含不希望备份的目录路径的排除列表。它只需要一个纯文本文件,每行有一个目录或文件路径。
--include from–类似于--exclude from,但它链接到一个包含要备份的数据的目录和文件路径的文件。
--stats–无论如何都不是一个重要的交换机,但是如果您是系统管理员,了解每个备份的详细统计信息会很方便,这样您就可以监视通过网络发送的通信量等。
--日志文件–这允许您将rsync输出发送到日志文件。对于自动备份,我们绝对建议您这样做,因为您不必亲自阅读输出。总是给日志文件一次在您的业余时间,以确保一切正常工作。而且,它是系统管理员使用的一个关键开关,因此您不必担心在让实习生负责时备份是如何失败的。
现在让我们看看rsync命令,我们又添加了几个开关:
rsync -avzhP --delete --stats --log-file=/home/geek/rsynclogs/backup.log --exclude-from '/home/geek/exclude.txt' -e 'ssh -p 12345' /home/geek/files/ [email protected]:/home/geek2/files/
命令仍然非常简单,但我们仍然没有创建一个像样的备份解决方案。尽管我们的文件现在位于两个不同的物理位置,但此备份无法保护我们免受数据丢失的主要原因之一:人为错误。
如果您不小心删除了一个文件,病毒会损坏您的任何文件,或者发生了其他不希望更改您的文件的情况,然后您运行rsync备份脚本,您备份的数据将被不希望更改的内容覆盖。当发生这种情况时(不是如果,而是什么时候),您的备份解决方案无法保护您免受数据丢失的影响。
rsync的创建者意识到了这一点,并添加了--backup和--backup dir参数,以便用户可以运行差异备份。rsync网站上的第一个示例显示了一个脚本,其中每七天运行一次完整备份,然后每天将对这些文件所做的更改备份到不同的目录中。这种方法的问题是,要恢复文件,必须有效地恢复七次。而且,大多数极客一天要运行几次备份,因此在任何给定时间都可以轻松地拥有20多个不同的备份目录。现在恢复文件不仅是一件痛苦的事,而且即使只是查看备份的数据也可能非常耗时—您必须知道文件上次更改的时间,才能找到其最近的备份副本。最重要的是,仅每周(在某些情况下甚至更少)运行增量备份是低效的。
快照备份到救援!快照备份不过是增量备份,但它们利用硬链接保留原始源的文件结构。一开始你可能很难理解,所以让我们看一个例子。
假设我们有一个备份脚本,每两小时自动备份一次数据。每当rsync执行此操作时,它都以以下格式命名每个备份:backup month day year time。
因此,在一天结束时,我们的目标目录中会有一个文件夹列表,如下所示:
当遍历这些目录时,您将看到源目录中的每个文件与当时的完全相同。然而,任何两个目录之间都不会有重复。rsync通过--link dest=DIR参数使用硬链接来实现这一点。
当然,为了拥有这些日期整洁的目录名,我们必须对rsync脚本进行一些增强。让我们看一下实现这样的备份解决方案需要什么,然后我们将更详细地解释脚本:
#!/bin/bash
#copy old time.txt to time2.txt
yes | cp ~/backup/time.txt ~/backup/time2.txt
#overwrite old time.txt file with new time
echo `date +”%F-%I%p”` > ~/backup/time.txt
#make the log file
echo “” > ~/backup/rsync-`date +”%F-%I%p”`.log
#rsync command
rsync -avzhPR --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r --delete --stats --log-file=~/backup/rsync-`date +”%F-%I%p”`.log --exclude-from '~/exclude.txt' --link-dest=/home/geek2/files/`cat ~/backup/time2.txt` -e 'ssh -p 12345' /home/geek/files/ [email protected]:/home/geek2/files/`date +”%F-%I%p”`/
#don’t forget to scp the log file and put it with the backup
scp -P 12345 ~/backup/rsync-`cat ~/backup/time.txt`.log [email protected]:/home/geek2/files/`cat ~/backup/time.txt`/rsync-`cat ~/backup/time.txt`.log
这将是一个典型的快照rsync脚本。万一我们把你丢在什么地方了,让我们一块一块地解剖一下:
我们脚本的第一行复制了时间.txt到time2.txt。“是”管道用于确认是否要覆盖该文件。接下来,我们将当前时间放入时间.txt. 这些文件稍后会派上用场。
下一行生成rsync日志文件,命名为rsync-日期.log(其中日期是实际日期和时间)。
现在,我们警告您的复杂rsync命令:
-avzhPR、-e、-delete、-stats、-log file、-exclude from、-link dest–只是我们前面提到的开关;如果需要刷新,请向上滚动。
--chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r–这些是目标目录的权限。因为我们在rsync脚本中间创建这个目录,所以我们需要指定权限,以便用户可以向其中写入文件。
date和cat命令的使用
我们将按照date和cat命令在rsync命令中的出现顺序来讨论它们的每个用法。注意:我们知道还有其他方法可以实现这个功能,特别是使用声明变量,但是为了本指南的目的,我们决定使用这个方法。
日志文件指定为:
~/backup/rsync-`date +”%F-%I%p”`.log
或者,我们可以将其指定为:
~/backup/rsync-`cat ~/backup/time.txt`.log
不管是哪种方式,--log file命令都应该能够找到先前创建的带日期的日志文件并对其进行写入。
链接目标文件指定为:
--link-dest=/home/geek2/files/`cat ~/backup/time2.txt`
这意味着--link dest命令被赋予了上一次备份的目录。如果我们每两小时运行一次备份,并且在运行此脚本时已是下午4:00,那么--link dest命令将查找在下午2:00创建的目录,并且只传输此后更改的数据(如果有)。
重申一下,这就是为什么时间.txt在脚本的开头复制到time2.txt,因此--link dest命令可以在以后引用该时间。
目标目录指定为:
[email protected]:/home/geek2/files/`date +”%F-%I%p”`
这个命令只是将源文件放入一个标题为当前日期和时间的目录中。
最后,我们要确保日志文件的副本放在备份中。
scp -P 12345 ~/backup/rsync-`cat ~/backup/time.txt`.log [email protected]:/home/geek2/files/`cat ~/backup/time.txt`/rsync-`cat ~/backup/time.txt`.log
我们使用端口12345上的secure copy获取rsync日志并将其放置在适当的目录中。要选择正确的日志文件并确保它最终位于正确的位置时间.txt文件必须通过cat命令引用。如果你想知道为什么我们决定时间.txt不是只使用date命令,而是因为rsync命令运行时可能会发生很多时间,所以为了确保我们有正确的时间,我们只需对之前创建的文本文档进行cat。
在Linux上使用Cron或在Windows上使用任务调度器来自动执行rsync脚本。您必须小心的一件事是,在继续新的rsync进程之前,确保结束当前正在运行的rsync进程。任务调度器似乎会自动关闭任何已经运行的实例,但是对于Linux,您需要更具创造性。
大多数Linux发行版都可以使用pkill命令,因此请确保在rsync脚本的开头添加以下内容:
pkill -9 rsync
不,我们还没做完。我们终于有一个美妙的(和免费!)备份解决方案到位,但我们所有的文件仍然容易被盗。希望你能把文件备份到几百英里外的某个地方。不管那遥远的地方有多安全,盗窃和黑客攻击总是个问题。
在我们的示例中,我们已经通过SSH对所有rsync通信量进行了隧道传输,这意味着所有文件在传输到目的地的过程中都是加密的。然而,我们需要确保目的地同样安全。请记住,rsync只在传输数据时对数据进行加密,但一旦文件到达目的地,它们就会完全打开。
rsync最好的特性之一是它只传输每个文件中的更改。如果您对所有文件进行了加密,并进行了一次小的更改,则整个文件将必须重新传输,因为加密会使任何更改后的所有数据完全随机化。
因此,最好/最容易使用某种类型的磁盘加密,例如用于Windows的BitLocker或用于Linux的dm crypt。这样,您的数据在发生盗窃时会受到保护,但可以使用rsync传输文件,并且您的加密不会影响其性能。还有其他可用的选项与rsync类似,甚至可以实现某种形式的rsync,例如Duplicity,但是它们缺少rsync必须提供的一些特性。
在异地设置快照备份并加密源和目标硬盘驱动器后,请鼓励自己掌握rsync并实施最简单的数据备份解决方案。
... 有时,您不想备份整个文件夹的数据,rsync也可以处理这个问题。除了选择要复制的更具体的文件夹外,还可以使用--exclude选项跳过它们。这允许您告诉rsync忽略选定的文件夹、文件或模式。 ...
...用rsync命令,无需手动干预即可根据需要将本地文件自动同步到远程服务器。请注意,本指南确实需要访问远程Linux服务器(如AWS),并且是在Ubuntu20.04下编写的,尽管任何Linux发行版都可以正常工作。 ...
...效率与其自20世纪90年代中期以来在执行文件拷贝和目录同步方面的良好记录相结合时,rsync是从Linux命令行创建备份的完美候选。 此外,还有一些独立的软件程序充当rsync的前端。它们为rsync提供图形用户界面(gui),有些人可...
...器管理员最有用的实用程序之一,但是它在默认情况下会同步所有内容,如果您的应用程序创建大量临时文件,这可能会很烦人。下面介绍如何在使用rsync时排除文件。 从文件的列表中排除 这是排除文件和文件夹的理想方法,...
...使用nano,我们强烈建议您查看Linux命令行文本编辑器nano初学者指南。您应该在终端窗口中看到如下内容: Nano完全由键盘控制,使用箭头键将光标移动到要编辑的位置。当您单击配置设置时,您将看到一些值得注意或更改的设...
rsync是为类Unix系统构建的协议,它为备份和同步数据提供了难以置信的多功能性。它可以在本地用于将文件备份到不同的目录,也可以配置为通过Internet同步到其他主机。 它可以在Windows系统上使用,但只能通过各种端口(如Cygw...
...可以从任何计算机访问保存的游戏。 如何备份、恢复和同步所有PC上的Minecraft存储 安装Wii游戏加载器,便于备份和快速加载时间 如何使用GameSave Manager备份和恢复1000多个PC游戏 web服务器文件 除了备份桌面电脑上的文件外,备...
...是简单的方法。 在过去,我们向您展示了如何使用SyncToy同步文件和文件夹,但是SyncToy只适用于Windows。另一方面,Rsync是一个开源工具,可以在任何计算平台上工作。无论您是在Windows、Linux还是Mac上,Rsync都会备份这些平台上的...
...机是否打开,它都会运行。rsync支持恢复的传输、差异和同步。如果由于某种原因您的传输失败了,比如异常的断电、系统错误或任何其他问题,rsync能够在您没有问题的情况下继续进行。同样,由于rsync的设计目的是同步目录(...