首页 > 系统相关 >备份 Linux 系统神器:rsync

备份 Linux 系统神器:rsync

时间:2023-04-01 10:44:51浏览次数:50  
标签:文件 rsync -- 创建 备份 Linux 目录

导读
探索 rsync 在备份方案中的作用。在系统管理员的工作中备份无疑是一个重要的部分。当没有完整备份或者良好规划的备份和实施时,就可能或早或晚不可挽回地丢失重要的数据。

所有公司,无论大小,都运营在数据之上。考虑到丢失业务数据造成的经济和业务损失,从最小的个人公司到最大的跨国企业,没有一个公司能在丢失大部分数据以后得以幸存。你的办公室可以通过保险赔偿重建,但是你的数据就不可能再恢复了。

这里提到的丢失是指数据的完全损坏。而不是指数据被偷走,那是另一种灾难。我这里说的是数据被完全摧毁。

即使你只是个人用户而不是一个企业,备份你自己的数据也是非常重要的,我有二十年来的个人财务数据和我现在已经关闭的企业的数据,以及大量的电子发票。也包括近年来我创作的大量不同类型的文档、报告和数据报表。我不想失去任何这些数据。

所以备份是我数据长期安全的必要保障。

备份软件选择

有许多软件可以执行备份。大多数 Linux 发行版提供至少一种开源的备份软件。同时也有许多商业备份软件,但是这些都不符合我的需求,所以我决定使用基础的 Linux 工具来进行备份。

在我为 Open Source Yearbook 写的文章, 《最佳搭档之 2015:tar 和 ssh》 中,我说明了昂贵的商业备份软件在设计实施可行的备份计划中并不是必要的。

从去年开始我尝试了另一种选择, rsync 命令,它有许多我已经从中受益的有趣特性。我的主要需求是所创建的备份,用户不需要解压备份压缩包就能定位和恢复文件,以便节约创建备份的时间。

这篇文章的目的只是为了说明 rsync 在我的备份方案中的作用。并不是 rsync 的全部能力或者它的各种适用场景的概览。

rsync 命令

Andrew Tridgell 和 Paul Mackerras 编写了 rsync ,首次发布于 1996 年。它的目标是向另一台电脑同步文件。你注意到了他们为什么取这个名字了吗(remotely synchronize)?它是大多数发行版都提供的开源软件。

rsync 能够用于同步两个目录或目录树,无论它们是在同一个计算机上还是不同的计算机上,而且不仅如此,它还能做到更多。它创建或者更新的目录与源目录完全一样。新的目录不是以 tar 或 zip 等打包存储,而是普通的目录和文件,常见的 Linux 工具都能轻松访问,而这正是我所需要的。

rsync 的最重要的特性之一是它处理源目录被修改的已有文件的方式。它使用分块校验来比较源文件和目标文件,而不是从源把整个文件复制过去。如果两个文件所有块的校验和都相同,那么就不用传输数据。否则只有被改变的块被传输。这样节约了远程同步消耗的大量时间和带宽。比如,我第一次使用 rsync 脚本来把我所有的主机备份到一个外接的大型 usb 硬盘上需要三个小时,因为所有的数据都需要传输过去。而接下来的备份需要的时间就只是 3 到 8 分钟,这取决于上次备份以来创建和改变了多少文件。我使用 time 命令来记录实际花费的时间。昨天晚上,我只花了三分钟来从六个远程系统和本地工作站备份大概 750 Gb 数据。实际上只有在白天改变的几百 Mb 数据需要备份。

下面的命令可以用来同步两个目录及其任意子目录的内容。也就是说,在新目录的内容和源目录同步完之后,它们的内容完全一样。

rsync -aH sourcedir targetdir

-a 选项表示归档模式,它会保持权限、所有关系和符号(软)链接。-H 选项用来保持硬链接。注意源目录和目标目录都可以在远程主机上。

假设昨天我们使用 rsync 同步了两个目录。今天我们想再同步一次,但是我们从源目录删除了一些文件。rsync 默认只复制新的和改变过的文件到新目录里,而不去改变新目录里被我们删除的文件,但是如果你想让那些在源目录里被删除的文件在新目录里也被删除,那么你可以加上 --delete 选项来删除。

另一个有趣的选项,也是我个人最喜欢的选项是 --link-dest,因为它极大地增加了 rsync 的能力和灵活性。--link-dest 使每日备份只花费很少的额外空间和很短的时间。

用这个选项指定前一天的备份目录,以及今天的备份目录,然后 rsync 会创建今天的新备份目录,并将昨天备份目录里的每一个文件在今天的备份目录中创建硬链接。现在我们在今天的备份目录中有一大堆指向昨天备份的硬链接。文件没有被重复创建,而是创建了一些硬链接。对于硬链接,在 Wikipedia 中有非常详细的描述。而在用昨天的备份目录文件的硬链接创建了今天的备份之后,rsync 和平常一样进行备份,如果在文件中检测到了变化,就不会做硬链接,而是从昨天的备份目录里做一个文件的复制,再把源文件中变化的部分复制过去。(LCTT 译注:此处疑似原文表述不清,参见 generator.c 的 try_dests_reg 函数先根据 match_level 选择复制或者硬链接,而不是创建硬链接后再判断 match_level)

现在我们的命令类似于下面这样。

rsync -aH --delete --link-dest=yesterdaystargetdir sourcedir todaystargetdir

你也可能想要排除一些不想要备份的目录或者文件。那么就可以使用 --exclude 选项。用这个选项加上你想排除文件或目录的模式。你可以用下面的新命令来排除浏览器的缓存。

rsync -aH --delete --exclude Cache --link-dest=yesterdaystargetdir sourcedir todaystargetdir

注意:你想排除的每一个文件的模式前面都分别需要加上 --exclude 选项。

rsync 可以同步远程主机,无论是作为同步源头还是目标。再举一个例子,我们假设想要把名为 remote1 的远程主机的目录同步到本地。因为 ssh 作为与远程主机交换数据的默认协议,我一直使用 ssh 选项。现在命令类似于下面这样。

rsync -aH -e ssh --delete --exclude Cache --link-dest=yesterdaystargetdir remote1:sourcedir todaystargetdir

这就是我的 rsync 备份命令的最终版本。

你可以依靠 rsync 的大量选项来定制你的同步过程。大多数情况而言,我刚刚描述的简单命令就足以胜任我的个人需要。你可以阅读 rsync 丰富的文档来了解它的其他能力。

部署备份

我的备份自动运行因为—“万物皆可自动化”。我写了一个 BASH 脚本使用 rsync 创建每天的备份。包括确保备份介质被挂载,生成每天的备份目录的名字,以及在备份介质中创建合适的目录结构,最后执行真正的备份再卸载备份介质。

我用 cron 每天早晨执行脚本确保我永远不会忘记备份。

我的脚本 rsbu 和配置文件 rsbu.conf 可以在https://github.com/opensourceway/rsync-backup-script 上获取。

恢复测试

所有没有经过测试的备份计划都不完整的。你可以通过测试恢复某个文件或者整个目录,以确保备份在照常工作并且可以通过它来在数据全部丢失后恢复。我见过太多备份由于种种理由失败,以及由于缺乏测试忽略的问题导致宝贵的数据被丢失。

选择一个文件恢复到比如 /tmp 的测试目录,这样你就不会覆盖任何备份后被更新的文件。验证文件的内容是否是你预期的。恢复用 rsync 备份的文件仅仅只是找到你的备份文件然后把它复制到你想恢复的地方去那样简单。

我有几次不得不恢复我的个人文件,偶尔是整个目录。大多数是自己意外删除了文件或者目录。有几次是因为硬盘崩溃。这些备份迟早会派上用场。

最后一步

但仅仅创建备份并不能拯救你的业务,你需要定期的地创建备份,使最近的一次备份储存在另一台远程机器上,如果有可能,放在另外一个建筑物中或几英里之外。这样可以确保大规模的灾难不会摧毁你的所有备份。

对于小型企业的一个合理选择是在可移动介质上做每日备份,晚上把最新的备份带回家里,第二天早上把更早的备份带到办公室。你就会有几个轮流的拷贝。甚至可以把最新的备份带到银行并放到你的保管箱里,然后带回之前的备份。

标签:文件,rsync,--,创建,备份,Linux,目录
From: https://www.cnblogs.com/0227-yyds/p/17278212.html

相关文章

  • Linux系统下进程回收--wait()函数
    进程回收在每个进程退出的时候,内核释放该进程所有资源‘包括打开的文件、占用的内存等。但是仍然会保存一定的信息,这些信息主要是进程控制块PCB的信息(包括进程号、退出状态、运行时间等)。父进程可以调用wait()或waitpid()函数得到它的退出状态,同时彻底清除这个进程。wait()......
  • linux连接终端工具
    linux连接终端工具:electerm:https://github.com/electerm/electermhttps://electerm.github.io/electerm/MobaXterm:https://mobaxterm.mobatek.net/功能十分强大,支持SSH,FTP,串口,VNC,Xserver等功能;支持标签,切换也十分方便;可视化目录直接上传下载:注:不能支持szrz命令,可以......
  • Linux线程同步必知,常用方法揭秘!
    一、为什么要线程同步在Linux多线程编程中,线程同步是一个非常重要的问题。如果线程之间没有正确地同步,就会导致程序出现一些意外的问题,例如:竞态条件(RaceCondition):多个线程同时修改同一个共享变量,可能会导致不可预测的结果,因为线程的执行顺序是不确定的。死锁(Deadlock):当两个......
  • Linux:常用命令有哪些?
    查看文件查看文件属性:file 文件名查看内容全部内容:cat-n(可选,显示行号)文件名分页查看:less文件名文件尾部:tail文件名头部:head文件名新建文件夹mkdir......
  • Linux设备文件三大结构:inode,file,file_operations
    structinodeLinux中一切皆文件,当我们在Linux中创建一个文件时,就会在相应的文件系统创建一个inode与之对应,文件实体和文件的inode是一一对应的,创建好一个inode会存在存储器中,第一次open就会将inode在内存中有一个备份,同一个文件被多次打开并不会产生多个inode,当所有被打开的文件......
  • Redhat/CentOS Linux 系统进入单用户模式
    Redhat/CentOSLinux系统进入单用户模式以CentOS7.9和Redhat8.2为例进行操作,因为CentOS是Redhat的发行版,所以同版本号界面和操作是一样的。CentOS7.9 开机在grub引导界面时,按下e键进入编辑模式: 找到linux16这一行,在行末添加rd.break(注意这里是一整行),使用Ct......
  • RockyLinux9配置网络
    编辑配置文件vim/etc/sysconfig/network-scripts/ifcfg-enp0s3TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=noneDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=noNAME=enp0s3DEVICE=enp0s3ONBOOT=yesIPADDR=192.168.1.110PREFIX=24GATEWAY=192.168.1.1D......
  • 四个常见的Linux面试问题
    刚毕业要找工作了,只要是你找工作就会有面试这个环节,那么在面试环节中,有哪些注意事项值得我的关注呢?特别是专业技术岗位,这样的岗位询问一般都是在职的工程师,如何在面试环节更好地理解面试官的问题,我们一起往下看吧。在学校学习也好,在培训机构或者网络在线学习也好,无论是通过那种途......
  • 【webserver 前置知识 02】Linux网络编程入门其一
    网络结构模式C/S结构服务器-客户机,即Client-Server(C/S)结构。C/S结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。客户机是因特网上访问别人信息的机器,服务器则是提供信息供人访问的计算机。在C/S结构中,应用程序分为两部分:服务器部分和客户......
  • 用飞书账号登录web应用、Linux服务器
    某初创型的科技公司拥有5、6个web应用,采用飞书作为移动办公沟通协作工具。为提高办公效率及运维效率,公司想用飞书账号作为身份源,登录web应用及Linux服务器。视该公司部署方式而定(本地化部署还是采用SaaS服务),宁盾有对应的产品及解决方案:宁盾目录服务或云身份目录平台。解决思路是:将......