当前位置: 首页 > 科技观察

用rsync备份Linux系统_0

时间:2023-03-20 22:42:29 科技观察

备份绝对是系统管理员工作的重要组成部分。如果没有完整备份或精心计划的备份和实施,迟早重要数据可能会丢失,无法挽回。所有公司,无论大小,都以数据为基础。考虑到丢失业务数据所造成的经济和业务损失,从最小的个体公司到最大的跨国企业,没有一家公司能够在大部分数据丢失后幸免于难。您的办公室可以通过保险报销重建,但您的数据无法恢复。这里所说的丢失是指数据的完全损坏。这不是数据被盗,而是另一种灾难。我在这里说的是数据完全被破坏了。即使你是个人用户而不是企业,备份你自己的数据也很重要,我有二十年的个人财务数据和我现在关闭的企业的数据,还有大量的电子发票。还收录了我近几年创作的大量不同类型的文档、报告和数据报告。我不想丢失任何这些数据。所以备份是我的数据长期安全的必要保障。备份软件选择有许多软件可以执行备份。大多数Linux发行版至少提供一种开源备份软件。也有很多商业备份软件,但没有一个适合我的需求,所以我决定使用基本的Linux工具进行备份。在我为开源年鉴撰写的文章“2015年最佳合作伙伴:tar和ssh”中,我展示了在设计和实施可行的备份计划时不需要昂贵的商业备份软件。自去年以来,我尝试了另一种选择,即rsync命令,它具有许多我已经从中受益的有趣功能。我的主要需求是创建的备份,用户可以在不解压备份存档的情况下定位和恢复文件,从而节省创建备份的时间。这篇文章的目的只是为了说明rsync在我的备份方案中的作用。这不是rsync的全部功能或其各种用例的概述。rsync命令AndrewTridgell和PaulMackerras编写的rsync于1996年首次发布。它的目标是将文件同步到另一台计算机。你有没有注意到他们为什么取这个名字(远程同步)?它是大多数发行版中都可用的开源软件。rsync可以用来同步两个目录或目录树,无论它们在同一台计算机上还是在不同的计算机上,不仅如此,它还能做更多的事情。它创建或更新的目录与源目录完全相同。新建的目录并没有像tar或者zip那样存放在一个包中,而是普通的目录和文件,可以通过常用的Linux工具轻松访问,这正是我所需要的。rsync最重要的特性之一是它处理正在修改的源目录中的现有文件的方式。它使用块验证来比较源文件和目标文件,而不是将整个文件从源文件复制到过去。如果两个文件的所有块的校验和相同,则不会传输任何数据。否则只传输改变的块。这样可以节省大量远程同步消耗的时间和带宽。例如,我第一次使用rsync脚本将我所有的主机备份到一个大的外部USB硬盘驱动器,因为需要传输所有数据,所以花了三个小时。后续备份只需3到8分钟,具体取决于自上次备份以来创建和更改的文件数量。我使用time命令记录实际花费的时间。昨晚,我只用了三分钟就从六个远程系统和一个本地工作站备份了大约750Gb的数据。实际上只有几百Mb的白天变化的数据需要备份。以下命令可用于同步两个目录和任何子目录的内容。即新目录和源目录的内容同步后,它们的内容是完全一样的。rsync-aHsourcedirtargetdir选项指示归档模式,它保留权限、所有权和符号(软)链接。-H选项用于保留硬链接。请注意,源目录和目标目录都可以位于远程主机上。假设我们昨天使用rsync同步了两个目录。今天我们想再次同步,但是我们从源目录中删除了一些文件。默认情况下,rsync只把新的和修改过的文件复制到新目录下,而不会改变我们在新目录下删除的文件,但是如果你想让那些在源目录下被删除的文件在新目录下也被删除,然后你可以添加--delete选项来删除。另一个有趣的选项,也是我个人最喜欢的选项,是--link-dest,因为它大大增加了rsync的功能和灵活性。--link-dest进行每日备份,占用很少的额外空间和时间。使用此选项指定前一天的备份目录和今天的备份目录,则rsync会创建今天的新备份目录,并在今天的备份目录中为昨天备份目录中的每个文件创建一个硬链接。现在我们在今天的备份目录中有一堆硬链接指向昨天的备份。这些文件不会重复创建,但会创建一些硬链接。对于硬链接,维基百科中有非常详细的描述。并且用昨天的备份目录文件的硬链接创建今天的备份后,rsync照常备份,如果检测到文件有变化,不会做硬链接,而是从昨天的备份目录复制一份文件,然后复制源文件的更改部分。(LCTT译注:这里好像原文不清楚,看generator.c的try_dests_reg函数,先根据match_level选择copy或hardlink,而不是创建硬链接再判断match_level)现在我们的命令类似下列。rsync-aH--delete--link-dest=yesterdaytargetdirsourcedirtodaytargetdir你可能还想排除一些你不想备份的目录或文件。然后你可以使用--exclude选项。使用此选项添加要排除的文件或目录的模式。您可以使用下面的新命令排除浏览器的缓存。rsync-aH--delete--excludeCache--link-dest=yesterdaytargetdirsourcedirtodaystartargetdir注意:每个要排除的文件模式都需要在前面加上--exclude选项。rsync可以同步远程主机,既可以作为源也可以作为目标。再举个例子,假设我们要将名为remote1的远程主机的目录同步到本地。由于ssh是与远程主机交换数据的默认协议,因此我一直在使用ssh选项。现在命令看起来像这样。rsync-aH-essh--delete--excludeCache--link-dest=yesterdaytargetdirremote1:sourcedirtodaytargetdir这是我的rsync备份命令的最终版本。您可以依靠rsync的大量选项来定制您的同步过程。在大多数情况下,我刚才描述的简单命令足以满足我的个人需求。您可以阅读rsync的详尽文档以了解其其他功能。部署备份我的备份自动运行,因为-“一切都可以自动化”。我编写了一个使用rsync创建每日备份的BASH脚本。这包括确保备份媒体已安装、生成每日备份目录的名称、在备份媒体中创建正确的目录结构、最后执行实际备份然后卸载备份媒体。我每天早上都使用cron来运行脚本,以确保我永远不会忘记备份。我的脚本rsbu和配置文件rsbu.conf在GitHub上可用。恢复测试没有经过测试的备份计划是不完整的。您可以测试还原文件或整个目录,以确保备份正常工作,并可用于从全部数据丢失中恢复。我见过太多的备份由于各种原因而失败,并且由于缺乏忽略问题的测试而丢失了宝贵的数据。选择一个文件以还原到/tmp等测试目录,这样您就不会覆盖备份后更新的任何文件。验证文件的内容是否符合您的预期。恢复使用rsync备份的文件就像找到备份文件并将其复制到要恢复的位置一样简单。我不得不多次恢复我的个人文件和整个目录。他们中的大多数人不小心自己删除了文件或目录。有几次是因为硬盘驱动器崩溃。这些备份迟早会派上用场。最后一步,但单独创建备份并不能挽救您的业务,您需要定期创建备份,以便将最新的备份存储在另一台远程机器上,如果可能的话,在另一栋建筑物或几英里之外。这可确保大规模灾难不会破坏您的所有备份。对于小型企业来说,一个合理的选择是在可移动媒体上进行每日备份,晚上将最旧的备份带回家,并在第二天早上将较早的备份带到办公室。然后,您将轮流拥有多个副本。甚至可以将上次的备份带到银行,放入自己的保险箱,再带回之前的备份。