CN114138560A - 一种操作系统的备份还原方法及系统 - Google Patents
一种操作系统的备份还原方法及系统 Download PDFInfo
- Publication number
- CN114138560A CN114138560A CN202111455841.8A CN202111455841A CN114138560A CN 114138560 A CN114138560 A CN 114138560A CN 202111455841 A CN202111455841 A CN 202111455841A CN 114138560 A CN114138560 A CN 114138560A
- Authority
- CN
- China
- Prior art keywords
- sub
- volume
- backup
- snapshot
- operating system
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种操作系统的备份还原方法及系统,属于计算机信息技术领域,方法包括:响应于接收到备份指令,将操作系统磁盘文件的Btrfs文件系统分区挂载到操作系统的第一挂载点下,使用递归子卷搜索算法找出所有普通子卷内部的内部子卷,通过Btrfs文件系统提供的快照功能在需要备份的子卷中创建快照,将Btrfs文件系统分区卸载,得到包含备份内容的快照,所述需要备份的子卷包括普通子卷和内部子卷;响应于接收到还原指令,根据还原指令中包含的待还原快照信息,将待还原快照中的内容还原至操作系统中;实现了自动对内部子卷的备份和其他处理,不需要物理接触设备,减少了备份文件所占据的磁盘空间,提高了备份效率和磁盘利用率。
Description
技术领域
本发明涉及一种操作系统的备份还原方法及系统,属于计算机信息技术领域。
背景技术
在日益发展的互联网时代,高性能Linux集群系统在7*24小时运行的实时业务中需要稳定的数据收集及传输,对服务器的稳定运行要求极高;此外,在边缘计算等场景中,也需要运行Linux系统的硬件设施对外提供高效、稳定的服务;如何进一步保证系统正常运行,目前较为广泛应用的集群技术能有效提高Linux系统的冗余性,但是极个别系统的宕机、硬件故障、网络的不稳定、人为的误操作导致数据或文件丢失等等,在一定程度上会对业务的正常运行造成影响;在实时业务系统出现异常后,如何以最快的速度对系统进行恢复,逐渐成为业务维护人员首要考虑的问题。
现有的备份方案一般包括系统级备份和文件级备份,系统级备份是定期对系统进行全盘备份,在出现故障时直接进行系统回滚;文件级备份一般是定期备份文件,在出现故障或文件丢失时还原备份文件。
这些备份方案可以在一定程度上减少由于系统出现异常而导致的业务中断和数据丢失,但是仍存在较多问题;例如,现有的系统级备份方案一般需要额外的设备(如系统修复盘等),或者需要额外的分区(如备份还原分区等),因此这种备份和还原方式一般额外的备份还原设备,备份和还原过程较为不便;另外,现有的系统级备份和文件级备份方式需要使用额外的存储设备用于存放备份还原系统和备份文件,在还原时需要连接这些存储设备,备份占用的存储空间可能较大。
Btrfs(Butter FS)文件系统提供了子卷快照的功能,使用Btrfs文件系统可以实现对系统的备份;在Btrfs中,子卷(Subvolume)是基本的存储和管理单元,在Btrfs根分区中,Btrfs子卷可以作为目录直接使用;在操作系统中,Btrfs子卷可以作为分区被挂载使用;使用Btrfs文件系统进行文件级备份比较简单便捷,将待备份文件存放于Btrfs子卷中,对子卷进行快照即可备份文件。
也可以将Linux系统的根分区文件系统安装在Btrfs子卷中,通过对该子卷进行快照即可进行系统级的文件备份;但是,Btrfs只提供了存储管理的功能,并没有引导管理的功能,使用Btrfs进行子卷快照后只能保存子卷中的文件,而不能将系统还原后启动,即Btrfs只能实现系统级的备份,不能实现系统级还原。
另外,Btrfs只提供了单层子卷操作,无法同时对子卷内部的子卷进行操作;子卷内部的子卷是指,假设子卷A在操作系统中的路径为/mnt/btrfs/A,使用Btrfs在子卷A中创建子卷B,在操作系统中的路径为/mnt/btrfs/A/B,B子卷就是A子卷内部的子卷;在Btrfs中,对子卷A进行快照,生成子卷C,假设子卷C在操作系统的路径为/mnt/btrfs/C,在子卷C中,存在/mnt/btrfs/C/B目录,但是该目录下并没有内容,即在对子卷A进行快照时,并没有对子卷A内部的子卷进行快照;同时,直接删除子卷A将会失败,因为子卷A内部存在子卷;如果操作系统被安装在Btrfs子卷中,许多应用程序(如容器应用程序Docker)会自动在系统的根分区文件系统子卷中创建子卷,直接使用Btrfs对根分区文件系统子卷进行快照备份时,由于Btrfs本身的机制,应用程序创建的根分区文件系统子卷内部的子卷不会被备份。
综上,现有的备份还原方案存在如下问题:
1)需要额外的备份还原设备和存储设备;
2)需要物理接触待备份和待还原设备才能实现备份还原;
3)Btrfs提供了子卷快照的功能,但是没有提供启动到快照子卷的功能,同时,无法自动对子卷内部的子卷进行处理;
4)备份占用的存储空间可能较大。
发明内容
本发明的目的在于提供一种操作系统的备份还原方法及系统,实现了自动对内部子卷的备份和其他处理,通过软件实现备份,不需要物理接触设备,减少了备份文件所占据的磁盘空间,提高了备份效率和磁盘利用率。
为实现以上目的,本发明是采用下述技术方案实现的:
第一方面,本发明提供了一种操作系统的备份还原方法,包括:
响应于接收到备份指令,将操作系统磁盘文件的Btrfs文件系统分区挂载到操作系统的第一挂载点下,使用递归子卷搜索算法找出所有普通子卷内部的内部子卷,通过Btrfs文件系统提供的快照功能在需要备份的子卷中创建快照,将Btrfs文件系统分区卸载,得到包含备份内容的快照,所述需要备份的子卷包括普通子卷和内部子卷;
响应于接收到还原指令,根据还原指令中包含的待还原快照信息,将待还原快照中的内容还原至操作系统中。
结合第一方面,进一步的,使用递归子卷搜索算法找出所有内部子卷:
读取所有子卷的信息,将子卷名称、子卷ID、子卷所在的子卷ID保存在数据库中;
以需要备份的子卷的子卷ID为关键字,执行内部子卷查找,得到内部子卷列表;
遍历内部子卷列表,以每一个内部子卷为关键字,重复内部子卷查找,直至无内部子卷;
所述内部子卷查找为:在数据库中查询子卷所在的子卷ID为关键字的所有行,将子卷名称、子卷ID作为列表返回。
结合第一方面,进一步的,待还原快照中的内容为操作系统所有内容和/或某一分区的内容;
还原操作系统所有内容的操作为根分区还原:将操作系统磁盘文件的Btrfs文件系统分区挂载到操作系统的第二挂载点下,将待还原快照、操作系统运行时文件系统、操作系统启动分区挂载到操作系统的第三挂载点下,通过chroot进入待还原快照的文件系统中,重新安装引导并更新引导,依次卸载操作系统启动分区、操作系统运行时文件系统、待还原快照和Btrfs文件系统分区,重启操作系统,完成根分区还原;
还原某一分区的内容的操作为普通分区还原:将操作系统磁盘文件的Btrfs文件系统分区和第四挂载点的配置文件进行备份,修改配置文件,将第四挂载点下原来的子卷修改为待还原快照,将第四挂载点下原来的子卷卸载,将待还原快照挂载到第四挂载点下,完成普通分区还原。
结合第一方面,进一步的,还包括备份删除的步骤:
在对保存有备份内容的快照进行删除时,使用递归子卷搜索算法找出该快照内所有内部子卷,同时对所有内部子卷进行删除操作,再删除该保存有备份内容的快照。
结合第一方面,进一步的,还包括:在操作系统中配置软件环境。
第二方面,本发明还提供了一种操作系统的备份还原系统,包括:
备份模块:用于响应于接收到备份指令,将操作系统磁盘文件的Btrfs文件系统分区挂载到操作系统的第一挂载点下,使用递归子卷搜索算法找出所有普通子卷内部的内部子卷,通过Btrfs文件系统提供的快照功能在需要备份的子卷中创建快照,将Btrfs文件系统分区卸载,得到包含备份内容的快照,所述需要备份的子卷包括普通子卷和内部子卷;
还原模块:用于响应于接收到还原指令,根据还原指令中包含的待还原快照信息,将待还原快照中的内容还原至操作系统中。
与现有技术相比,本发明所达到的有益效果是:
本发明提供的一种操作系统的备份还原方法及系统,使用递归子卷搜索算法找出所有普通子卷内部的内部子卷,通过Btrfs文件系统提供的快照功能在需要备份的子卷中创建快照,通过递归子卷搜索算法结合Btrfs文件系统实现了自动对内部子卷的备份和其他处理,实现了对会自动创建内部子卷的应用程序(比如容器)的兼容;通过操作系统磁盘文件的Btrfs文件系统分区的挂载和卸载,结合快照功能,通过软件实现备份,不需要物理接触设备,响应于接收到还原指令,根据还原指令中包含的待还原快照信息,将待还原快照中的内容还原至操作系统中,通过软件实现还原,不需要额外的备份还原设备和存储设备,能够在操作系统运行时直接对操作系统进行备份;同时Btrfs子卷机制大大减少了备份文件所占据的磁盘空间,提高了备份效率和磁盘利用率。
附图说明
图1是本发明实施例提供的一种操作系统的备份还原系统的示意图;
图2是本发明实施例提供的备份过程的逻辑结构示意图;
图3是本发明实施例提供的递归子卷搜索算法的执行流程图;
图4是本发明实施例提供的一种操作系统的备份还原方法的流程图。
具体实施方式
下面结合附图对本发明作进一步描述,以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
实施例1
如图4所示,本发明实施例提供了一种操作系统的备份还原方法,包括备份和还原的步骤。
S1、响应于接收到备份指令,将操作系统磁盘文件的Btrfs文件系统分区挂载到操作系统的第一挂载点下,使用递归子卷搜索算法找出所有普通子卷内部的内部子卷,通过Btrfs文件系统提供的快照功能在需要备份的子卷中创建快照,将Btrfs文件系统分区卸载,得到包含备份内容的快照,所述需要备份的子卷包括普通子卷和内部子卷。
在本实施例中,先进行操作系统的部署,在物理平台上安装操作系统,提供备份和还原的底层支持,在安装操作系统时,磁盘文件系统必须选择Btrfs。
磁盘文件被分为两个分区,引导分区和Btrfs文件系统分区,Btrfs文件系统分区中有根子卷和home分区子卷;其中,根子卷是Linux系统的根分区,包括Linux根文件系统,在系统启动后,根子卷被挂载在系统的/目录下;home分区子卷是Linux系统中的/home目录对应的分区,系统启动后,该子卷被挂载到/home目录下;引导分区用于引导根子卷中的操作系统。
配置操作系统时可以将其他需要备份的目录也作为Btrfs子卷,保存在Btrfs文件系统分区中,然后在操作系统的分区挂载配置中指定该Btrfs子卷挂载到指定目录。
在本实施例中,还需要在操作系统中安装执行所述一种操作系统的备份还原方法所需要的软件环境。
备份的创建方法包括如下步骤:
1)分区挂载、2) 子卷快照、3)分区卸载;首先将Btrfs文件系统分区挂载到系统的一个空目录下(第一挂载点),然后对需要备份的子卷进行快照操作,子卷的快照操作指将子卷当前的状态保存下来,生成一个新子卷,新子卷中的数据就是进行子卷快照操作时原子卷中的数据,新子卷称为快照,生成的新子卷与原来的子卷没有任何关系,子卷快照完成后,将Btrfs文件系统分区卸载;上述第一挂载点可以是在/tmp目录下创建的空目录。
子卷快照时,如果子卷内部存在子卷,Btrfs无法自动对子卷内部的子卷进行快照。
假设当前引导的根子卷为@,安装容器软件后,软件会自动创建子卷@/var/lib/docker/btrfs/subvolumes/0fd1f73aa8a99fbc9ba7848661cb0008271585601f22a6023acbafc0d081287c(下称@内部的0fd1f73aa8a99fbc9ba7848661cb0008271585601f22a6023ac...子卷)等多个子卷,这些子卷的上层子卷是@,如果对@子卷做快照,生成快照@root,则@root/var/lib/docker/btrfs/subvolumes/0fd1f73aa8a99fbc9ba7848661cb0008271585601f22a6023acbafc0d081287c目录下不会有内容,Btrfs不会自动对@内部的0fd1f73aa8a99fbc9ba7848661cb0008271585601f22a6023ac...子卷进行快照;类似的,如果直接删除@子卷,Btrfs删除动作将会失败,因为@子卷内部存在子卷,需要先删除@内部的子卷后再删除@子卷。
因此,在进行子卷快照和子卷删除时,为提供容器兼容功能,使用递归子卷搜索算法,找出子卷内部的所有子卷,递归子卷搜索算法的步骤是:
读取所有子卷的信息,将子卷名称、子卷ID、子卷所在的子卷ID保存在数据库中;
以需要备份的子卷的子卷ID为关键字,执行内部子卷查找,得到内部子卷列表;
遍历内部子卷列表,以每一个内部子卷为关键字,重复内部子卷查找,直至无内部子卷;
所述内部子卷查找为:在数据库中查询子卷所在的子卷ID为关键字的所有行,将子卷名称、子卷ID作为列表返回。
备份创建的一个实施例是,要备份的分区子卷为@,备份名为初始化系统,首先将Btrfs文件系统分区/dev/sda2挂载到系统的/mnt/btrfs目录下,如果部署了备份还原系统,设置了Btrfs文件系统分区自动挂载,则进行备份创建时,无需挂载分区;然后对@子卷进行快照,生成新子卷,新子卷为快照,新子卷的名字是将备份名与时间戳进行HASH(哈希)的结果,假设为6AA732E2808CA0CF0792A950517B68FB,然后对@进行使用递归子卷搜索算法,获取@子卷内部的子卷,假设获取到的内部子卷为@/var/docker、@/var/docker/ubuntu、@/var/docker/centos,接着对内部子卷进行快照,新生成的快照的子卷名为:
6AA732E2808CA0CF0792A950517B68FB/var/docker
6AA732E2808CA0CF0792A950517B68FB/var/docker/ubuntu
6AA732E2808CA0CF0792A950517B68FB /var/docker/centos
当子卷快照完成后,卸载分区,如果部署了备份还原系统,设置了Btrfs文件系统分区自动挂载,则进行备份创建时,不卸载分区,且备份还原系统会记录备份名、备份时间、原子卷ID、快照子卷ID等信息。
在Btrfs中,子卷有自己的ID,通过Btrfs可以获取所有子卷的ID及其所处的子卷ID(下称上层子卷ID),例如,@的ID为256,@/var/docker的ID为268,@/var/docker所处的子卷ID为256;通过子卷ID及子卷上层子卷ID,可以获取子卷内部的所有内部子卷信息。
S2、响应于接收到还原指令,根据还原指令中包含的待还原快照信息,将待还原快照中的内容还原至操作系统中。
待还原快照中的内容为操作系统所有内容和/或某一分区的内容。
还原操作系统所有内容的操作为根分区还原:将操作系统磁盘文件的Btrfs文件系统分区挂载到操作系统的第二挂载点下,将待还原快照、操作系统运行时文件系统、操作系统启动分区挂载到操作系统的第三挂载点下,通过chroot进入待还原快照的文件系统中,重新安装引导并更新引导,依次卸载操作系统启动分区、操作系统运行时文件系统、待还原快照和Btrfs文件系统分区,重启操作系统,完成根分区还原。
根分区还原指,假设当前引导的是根子卷@,有一个备份的根子卷@root,还原根子卷@root的过程称为根分区还原,还原后重启系统,系统将会引导@root子卷中的根分区文件系统。
具体的,在操作系统安装完成后,Btrfs文件系统中存在@子卷和@home子卷,其中@子卷是根子卷,保存了Linux系统的根分区文件系统,在系统启动后这个子卷被挂载到Linux系统的/目录下,@home子卷被挂载到系统的/home 目录下;在进行操作系统备份时,将@子卷备份,生成@root子卷;进行根分区还原时,还原到@root子卷,重启系统后,@root子卷的内容被挂载到Linux系统的/目录下,所启动的系统是@root子卷中的系统。
根分区还原可以概括为如下步骤:1) 分区挂载、2) 子卷挂载、3) 运行时文件系统挂载、4)启动分区挂载、5) 根文件系统切换、6) 引导创建与更新、7) 启动分区卸载、8)运行时文件系统卸载、9)子卷卸载、10) 分区卸载、11) 系统重启。
根分区还原的一个实施例是,假设当前操作系统/目录上挂载的子卷为子卷6AA732E2808CA0CF0792A950517B68FB,待还原的子卷为子卷@,分区还原的过程时,首将Btrfs文件系统分区/dev/sda2挂载到系统的/mnt/btrfs目录下,如果部署了备份还原系统,设置了Btrfs文件系统分区自动挂载,则进行备份创建时,无需挂载分区;然后将子卷/mnt/btrfs/@挂载到系统的/tmp/mount01目录下;在将运行时文件系统/run、/proc、/sys等挂载到/tmp/mount01中的对应目录;然后将启动分区/dev/sda1挂载到系统的/tmp/mount01/boot/EFI目录下;再通过chroot切换到/tmp/mount01中的文件系统中;在/tmp/mount01的文件系统中创建引导,将引导安装到/tmp/mount01/boot/EFI(即/dev/sda1)中,并更新系统引导信息;然后依次卸载/sys、/proc、/run等文件系统以及/tmp/mount01/boot/EFI分区,然后卸载挂载在 /tmp/mount01 下的@子卷和Btrfs文件系统分区/dev/sda2,最后重启系统;系统重启后,再次引导,进入子卷@中的Linux系统,根分区还原结束。
还原某一分区的内容的操作为普通分区还原:将操作系统磁盘文件的Btrfs文件系统分区和第四挂载点的配置文件进行备份,修改配置文件,将第四挂载点下原来的子卷修改为待还原快照,将第四挂载点下原来的子卷卸载,将待还原快照挂载到第四挂载点下,完成普通分区还原。
普通分区还原指的是将某一分区还原为之前备份时的状态,而不还原整个操作系统;例如,假设将@home子卷备份为@bootHome,@home子卷被挂载在/home目录下,当进行普通分区还原时,就是将@bootHome子卷挂载到/home 目录下,不影响操作系统的其它分区和内容。
普通分区还原的一个实施例是,假设当前/home下挂载的是子卷DA4E154B739EF901737A051FC58E5B98,需要还原的子卷是子卷@home,则还原过程是,首先将目录与分区映射信息配置文件/etc/fstab复制一份,命名为/etc/fstab.bak;然后修改/etc/fstab,将启动/home目录挂载的子卷修改为@home;然后卸载当前/home目录下挂载的子卷,通过修改后的配置文件重新挂载子卷分区,如果挂载失败,则通过/etc/fstab.bak覆盖/etc/fstab,并提示用户还原失败,如果挂载成功,则普通分区还原结束。
在进行还原时,根分区还原和普通分区还原可以同时进行,即同时修改引导子卷和挂载的子卷。
普通分区还原有两种运行模式,第一种是仅还原普通分区,第二种是在进行根分区还原时同时还原普通分区。
仅还原普通分区的步骤是:1)配置文件备份、2) 配置文件修改、3) 卸载原有子卷、4) 挂载新分区。
在仅还原普通分区的时候,首先将分区与挂载点配置文件进行备份,然后修改配置文件,将第四挂载点对应的子卷修改为待还原的子卷,修改完成后,将原子卷卸载,然后挂载新的分区(即将待还原的子卷挂载到对应的挂载点)。
进行根分区还原时同时还原普通分区的过程是,在根分区还原步骤的第5步(根文件系统切换)后、第6步(引导创建与更新)前,执行配置文件备份、配置文件修改、挂载新分区的操作,其余操作与根分区还原一致。
本发明实施例提供的一种操作系统的备份还原方法,还包括备份删除的步骤:
在对保存有备份内容的快照进行删除时,使用递归子卷搜索算法找出该快照内所有内部子卷,同时对所有内部子卷进行删除操作,再删除该保存有备份内容的快照。
备份删除具体包括:1) 分区挂载、2) 子卷删除、3)分区卸载;首先将Btrfs文件系统分区挂载到系统的某个目录下,然后将需要删除的备份对应的子卷删除,子卷删除完成后,将Btrfs文件系统分区卸载。
备份删除方法的一个实施例是,要删除的分区子卷为6AA732E2808CA0CF0792A950517B68FB,首先将Btrfs文件系统分区/dev/sda2挂载到系统的/mnt/btrfs目录下,如果部署了备份还原系统,设置了Btrfs文件系统分区自动挂载,则进行备份创建时,无需挂载分区;然后对6AA732E2808CA0CF0792A950517B68FB进行使用递归子卷搜索算法,获取6AA732E2808CA0CF0792A950517B68FB子卷内部的子卷,假设获取到的内部子卷为:
6AA732E2808CA0CF0792A950517B68FB/var/docker
6AA732E2808CA0CF0792A950517B68FB/var/docker/ubuntu
6AA732E2808CA0CF0792A950517B68FB /var/docker/centos
则倒序遍历所有内部子卷,依次删除内部子卷,当所有内部子卷删除完成后,删除子卷6AA732E2808CA0CF0792A950517B68FB,然后卸载分区,如果部署了备份还原系统,设置了Btrfs文件系统分区自动挂载,则进行备份创建时,不卸载分区。
本发明实施例提供的一种操作系统的备份还原方法,还包括对备份的管理,包括:备份ID管理、备份层级关系管理和备份状态管理。
备份ID管理指的是,每一次备份时用户需要制定备份名,备份名可以重复,备份名用于精简的描述本次备份的功能,每一次执行备份后会生成一个新的子卷(即快照),快照的名字与备份名有关。
备份ID的生成规则是,将备份名与当前时间戳连接后进行哈希操作,生成32位由字母和数字组成的备份ID,本次备份生成的子卷名为备份ID。
备份层级关系管理指的是,通过数据库记录备份之间的层级关系,并以方便用户使用的形式展示。
备份层级关系指的是子卷及其父子卷的关系,子卷的父子卷是指:对子卷A进行快照,生成子卷B,则子卷B的父子卷是子卷A,子卷B是子卷A的一个子子卷;在操作系统备份与还原过程中,由初始子卷(对于根子卷,初始子卷为子卷@)开始,所有子卷组成一个树形结构(备份树)。
维护备份之间的层级关系,由于子卷快照后,快照与父子卷之间不再存在关系,所以当删除一个子卷时,其子子卷不受影响,在进行子卷删除时,需要维护子卷之间的层级关系,具体为当删除一个子卷,如果该子卷存在父子卷,则生成一个虚拟子卷@V作为备份树的根。
备份状态管理指的是,记录每一个备份当前的状态,备份的状态包括ACTIVE、BACKUP、VIRTUAL,其中,当前引导的备份子卷或者当前挂载的备份子卷的状态为ACTIVE,虚拟子卷的状态为VIRTUAL,其余子卷的状态为BACKUP。
操作系统安装完成后,初始子卷(如@、@home)的状态为ACTIVE,在进行操作系统备份时,新创建的备份子卷的状态为BACKUP;进行操作系统还原后,已还原的子卷状态变为ACTIVE,原子卷的状态变为BACKUP。
使用本发明实施例提供的一种操作系统的备份还原方法,能够在秒级实现整个操作系统的快速备份和还原;解决了Btrfs只能制作子卷快照,无法使操作系统从子卷快照启动的问题,同时本发明实施例公开的递归子卷搜索算法解决了Btrfs无法自动对子卷内部的子卷进行快照和删除的问题,实现了对会创建内部子卷的应用程序(如容器)的兼容。
本发明实施例提供的一种操作系统的备份还原方法,使用Btrfs子卷机制,大大减少了备份文件所占据的磁盘空间,提高了备份效率和磁盘利用率;不需要额外的设备,通过操作系统磁盘文件的Btrfs文件系统分区的挂载和卸载,结合快照功能,通过软件实现备份,可在系统运行时直接对系统进行备份。
实施例2
本发明实施例提供的一种操作系统的备份还原系统,包括:
备份模块:用于响应于接收到备份指令,将操作系统磁盘文件的Btrfs文件系统分区挂载到操作系统的第一挂载点下,使用递归子卷搜索算法找出所有普通子卷内部的内部子卷,通过Btrfs文件系统提供的快照功能在需要备份的子卷中创建快照,将Btrfs文件系统分区卸载,得到包含备份内容的快照,所述需要备份的子卷包括普通子卷和内部子卷;
还原模块:用于响应于接收到还原指令,根据还原指令中包含的待还原快照信息,将待还原快照中的内容还原至操作系统中。
实施例3
本发明实施例提供的一种操作系统的备份还原系统,如图1所示,所述操作系统的备份还原系统运行于Linux操作系统上,自下而上分为核心层、接口层和应用层,下方接有操作系统层和基础设施层,基础设施层为备份还原系统提供了底层的硬件平台,操作系统层运行于基础设施层上,为备份还原系统提供了软件平台。
核心层提供了Btrfs子卷快照、引导创建、子卷删除等核心功能,接口层通过调用核心层实现对操作系统层中的Linux操作系统的快速备份与还原;接口层使用高级程序设计语言,将核心算法层的功能进行了封装,并增加了备份ID管理、备份层级关系管理和备份状态管理等功能;应用层提供了用户使用的接口,用户通过应用层进行Linux操作系统备份和还原。
核心层使用Shell语言编写,用于执行操作系统级别的操作,如磁盘分区挂载、子卷创建、子卷快照、日志生成、配置文件修改、引导安装、引导更新等操作。
接口层使用Python语言编写,所有数据被保存在SQLite数据库中。
所述操作系统的备份还原系统运行于安装在Btrfs文件系统中的操作系统上,在Btrfs文件系统中,创建一个子卷,用于安装操作系统的根文件系统和其他分区文件。
例如,磁盘设备为/dev/sda,将磁盘分为两个分区,EFI分区/dev/sda1和Btrfs文件系统分区/dev/sda2,在/dev/sda2中创建子卷@,保存Linux系统的根分区文件系统,在系统启动后,子卷@被挂载到Linux系统的/目录下;在/dev/sda2中创建子卷@home,保存Linux系统的家目录数据,在系统启动后,子卷@home被挂载到Linux系统的/home目录下,用户也可以在/dev/sda2中创建其它子卷,挂载到系统的对应目录;当系统启动后,将/dev/sda2挂载到系统中,比如挂载到/mnt/btrfs,用户进入到该目录下可以看到所有子卷,子卷可以作为目录直接使用。
对操作系统的备份和还原是通过对子卷的操作来实现的,系统备份通过子卷快照实现,系统还原通过配置文件修改、引导创建和更新等方式实现。
本发明实施例提供的一种操作系统的备份还原系统,还提供了备份ID管理、备份层级管理和备份状态管理的功能,能够通过实施例一所述的一种操作系统的备份还原方法中对备份的管理实现。
备份ID管理指的是,每一次备份时用户需要制定备份名,备份名可以重复,备份名用于精简的描述本次备份的功能,每一次执行备份后会生成一个新的子卷(即快照),快照的名字与备份名有关。
备份ID管理的一个实施例是,对@子卷进行快照,用户指定备份名为 INIT,当前时间戳为1634190846,将备份名与时间戳连接,并经过HASH(哈希)计算后,得出备份ID为89C52AF68194BF10870B914755F7AA33,创建的快照子卷的子卷名为89C52AF68194BF10870B914755F7AA33。
备份层级关系管理指的是,通过数据库记录备份之间的层级关系,并以方便用户使用的形式展示;一个实施例可参见图2,系统安装完成后存在@子卷,备份树的根节点就是@子卷,备份名为@,对@子卷进行三次备份操作,生成三个备份,分别为备份系统、测试快照、备份系统,即@下的三个节点;对第一个备份系统进行一次备份操作,生成更新系统备份;对第二个备份系统进行两次备份,生成安装数据库备份和安装Python备份;当前引导的子卷为安装Python备份中的子卷,用户可以通过操作系统的还原操作还原到这个树形图中的任意一个子卷。
备份状态管理指的是,记录每一个备份当前的状态,备份的状态包括ACTIVE、BACKUP、VIRTUAL,其中,当前引导的备份子卷或者当前挂载的备份子卷的状态为ACTIVE,虚拟子卷的状态为VIRTUAL,其余子卷的状态为BACKUP。
备份状态管理的一个实施例是,在操作系统安装完成后,Linux系统/目录下挂载的子卷是子卷@,/home目录下挂载的子卷为@home,对@进行备份,生成子卷89C52AF68194BF10870B914755F7AA33,则子卷@和子卷@home的状态为ACTIVE,子卷89C52AF68194BF10870B914755F7AA33的状态为BACKUP,当用户对89C52AF68194BF10870B914755F7AA33子卷进行还原,重启系统后,89C52AF68194BF10870B914755F7AA33子卷的状态变为ACTIVE,@子卷的状态变为BACKUP;当用户删除子卷@(这个子卷是系统安装完成后的第一个根分区子卷,它没有父子卷),子卷@的状态变为VIRTUAL,此时子卷@仅用于方便展示,不再代表真实的子卷。
本发明实施例提供的一种操作系统的备份还原系统,当用户向接口层发出备份还原系统(即创建子卷快照)或删除备份(即删除子卷)的指令时,接口层首先执行递归子卷搜索算法,以待备份或待删除的子卷ID作为算法的输入,如图3所示,算法执行的过程是:
301) 首先初始化子卷列表,将所有子卷名、子卷ID、子卷上层子卷的ID以子卷ID为键,升序排序,保存在子卷列表中,然后转到302);
302) 初始化结果列表,结果列表为空,转到303);
303-1) 如果子卷列表遍历完成,转到303-2),否则,转到303-3);
303-2) 返回结果列表,子流程结束;
303-3)读取子卷列表的下一个元素(首次读取的是第一个元素),转到303-4);
303-4) 如果当前元素的上层子卷ID等于待查子卷ID,转到303-5),否则转到303-1);
303-5)将当前子卷信息添加到结果列表中,转到303-6);
303-6) 以当前子卷ID、当前结果列表作为参数,调用子过程获取下层子卷,子过程结束后,转到303-1)。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (6)
1.一种操作系统的备份还原方法,其特征在于,包括:
响应于接收到备份指令,将操作系统磁盘文件的Btrfs文件系统分区挂载到操作系统的第一挂载点下,使用递归子卷搜索算法找出所有普通子卷内部的内部子卷,通过Btrfs文件系统提供的快照功能在需要备份的子卷中创建快照,将Btrfs文件系统分区卸载,得到包含备份内容的快照,所述需要备份的子卷包括普通子卷和内部子卷;
响应于接收到还原指令,根据还原指令中包含的待还原快照信息,将待还原快照中的内容还原至操作系统中。
2.根据权利要求1所述的一种操作系统的备份还原方法,其特征在于,使用递归子卷搜索算法找出所有内部子卷:
读取所有子卷的信息,将子卷名称、子卷ID、子卷所在的子卷ID保存在数据库中;
以需要备份的子卷的子卷ID为关键字,执行内部子卷查找,得到内部子卷列表;
遍历内部子卷列表,以每一个内部子卷为关键字,重复内部子卷查找,直至无内部子卷;
所述内部子卷查找为:在数据库中查询子卷所在的子卷ID为关键字的所有行,将子卷名称、子卷ID作为列表返回。
3.根据权利要求1所述的一种操作系统的备份还原方法,其特征在于,待还原快照中的内容为操作系统所有内容和/或某一分区的内容;
还原操作系统所有内容的操作为根分区还原:将操作系统磁盘文件的Btrfs文件系统分区挂载到操作系统的第二挂载点下,将待还原快照、操作系统运行时文件系统、操作系统启动分区挂载到操作系统的第三挂载点下,通过chroot进入待还原快照的文件系统中,重新安装引导并更新引导,依次卸载操作系统启动分区、操作系统运行时文件系统、待还原快照和Btrfs文件系统分区,重启操作系统,完成根分区还原;
还原某一分区的内容的操作为普通分区还原:将操作系统磁盘文件的Btrfs文件系统分区和第四挂载点的配置文件进行备份,修改配置文件,将第四挂载点下原来的子卷修改为待还原快照,将第四挂载点下原来的子卷卸载,将待还原快照挂载到第四挂载点下,完成普通分区还原。
4.根据权利要求1所述的一种操作系统的备份还原方法,其特征在于,还包括备份删除的步骤:
在对保存有备份内容的快照进行删除时,使用递归子卷搜索算法找出该快照内所有内部子卷,同时对所有内部子卷进行删除操作,再删除该保存有备份内容的快照。
5.根据权利要求1所述的一种操作系统的备份还原方法,其特征在于,还包括:在操作系统中配置软件环境。
6.一种操作系统的备份还原系统,其特征在于,包括:
备份模块:用于响应于接收到备份指令,将操作系统磁盘文件的Btrfs文件系统分区挂载到操作系统的第一挂载点下,使用递归子卷搜索算法找出所有普通子卷内部的内部子卷,通过Btrfs文件系统提供的快照功能在需要备份的子卷中创建快照,将Btrfs文件系统分区卸载,得到包含备份内容的快照,所述需要备份的子卷包括普通子卷和内部子卷;
还原模块:用于响应于接收到还原指令,根据还原指令中包含的待还原快照信息,将待还原快照中的内容还原至操作系统中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111455841.8A CN114138560A (zh) | 2021-12-01 | 2021-12-01 | 一种操作系统的备份还原方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111455841.8A CN114138560A (zh) | 2021-12-01 | 2021-12-01 | 一种操作系统的备份还原方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114138560A true CN114138560A (zh) | 2022-03-04 |
Family
ID=80386849
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111455841.8A Pending CN114138560A (zh) | 2021-12-01 | 2021-12-01 | 一种操作系统的备份还原方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114138560A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116662079A (zh) * | 2023-07-31 | 2023-08-29 | 明阳时创(北京)科技有限公司 | 一种快速备份与复原ubuntu操作系统的方法及系统 |
-
2021
- 2021-12-01 CN CN202111455841.8A patent/CN114138560A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116662079A (zh) * | 2023-07-31 | 2023-08-29 | 明阳时创(北京)科技有限公司 | 一种快速备份与复原ubuntu操作系统的方法及系统 |
CN116662079B (zh) * | 2023-07-31 | 2023-09-29 | 明阳时创(北京)科技有限公司 | 一种快速备份与复原ubuntu操作系统的方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108664359B (zh) | 一种数据库恢复方法、装置、设备及存储介质 | |
US5724581A (en) | Data base management system for recovering from an abnormal condition | |
US7257690B1 (en) | Log-structured temporal shadow store | |
JP3270216B2 (ja) | ファイル名検出方式 | |
US7487385B2 (en) | Apparatus and method for recovering destroyed data volumes | |
JP7108782B2 (ja) | データリカバリー方法、装置、サーバ及びコンピュータ・プログラム | |
US10296424B2 (en) | Resilient programming frameworks for handling failures in parallel programs | |
CN101308471B (zh) | 一种恢复数据的方法及装置 | |
CN112463450B (zh) | 一种增量备份管理方法、系统、电子设备及存储介质 | |
CN113886143B (zh) | 虚拟机持续数据保护方法、装置及数据恢复方法、装置 | |
US6944635B2 (en) | Method for file deletion and recovery against system failures in database management system | |
CN111078667A (zh) | 一种数据迁移的方法以及相关装置 | |
CN111651304B (zh) | 基于双芯智能电表的软件恢复方法、装置和计算机设备 | |
Dathathri et al. | Phoenix: A substrate for resilient distributed graph analytics | |
CN114138560A (zh) | 一种操作系统的备份还原方法及系统 | |
CN112925676B (zh) | 一种基于wal实现分布式数据库集群任意时间点恢复的方法 | |
US7890793B1 (en) | Techniques for restoring file system resources | |
US20050066235A1 (en) | Automated fault finding in repository management program code | |
CN115495286A (zh) | 配置文件定时备份的测试方法、系统、设备和存储介质 | |
CN114610351A (zh) | 一种数据库升级方法 | |
CN115080309A (zh) | 数据备份系统、方法、存储介质以及电子设备 | |
CN112148532A (zh) | 硬盘数据的批量恢复方法、装置、存储介质及电子设备 | |
CN113495871A (zh) | 一种基于LSM-Tree存储引擎的文件管理方法和装置 | |
WO2020231754A1 (en) | Self-healing operations for root corruption in a file system | |
Kathpal et al. | {BARNS}: Towards Building Backup and Recovery for {NoSQL} Databases |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |