一种基于UEFI的备份及一键引导启动项的方法与流程

文档序号:29219004发布日期:2022-03-12 12:16阅读:775来源:国知局
一种基于UEFI的备份及一键引导启动项的方法与流程
一种基于uefi的备份及一键引导启动项的方法
技术领域
1.本发明属于计算机系统安全技术领域,具体为一种基于uefi的备份及一键引导启动项的方法。


背景技术:

2.由于用户购买的电脑通常没有系统备份,且由于现在互联网中影响操作系统稳定性的因素较多,当用户的操作系统出现问题或需要优化时往往比较费力,通常需要使用第三方的优化工具或者购买付费服务,其效果也不一定能将系统优化到之前最优的状态。亟需一种能快速有效的备份及还原方法,将系统快速恢复到最优状态。


技术实现要素:

3.本发明的目的在于提供一种基于uefi的备份及一键引导启动项的方法,以解决背景技术中提出的现有技术中,家用电脑中缺少系统备份,在进行恢复时需要借助第三方软件的问题。
4.为解决上述技术问题,本发明所采用的技术方案是:
5.一种基于uefi的备份方法,包括以下步骤:
6.系统判断步骤:判断当前系统是否支持uefi引导;如果是,则继续,如果不是,则结束;
7.系统分区检测步骤:对当前系统的system分区进行检测,如果检测到当前系统的system分区所在头盘为gpt磁盘,且当前系统分区的标志位efi分区的标志,则保留该分区的符号链接;如果不是,则结束;
8.恢复分区检测步骤:检查当前操作系统所在磁盘是否存在恢复分区,如果存在则进行下一步,如果不存在,则根据用户指定的位置重新创建恢复分区;
9.恢复分区容量判断步骤:判断当前操作系统所在磁盘上存在的恢复分区容量是否能够保存系统备份的所有文件,如果是,则不做调整,如果不是,则根据用户指定的位置重新创建分区;
10.文件移动步骤:将制作好的wim文件、引导文件以及配置文件拷贝到恢复分区;
11.一键引导创建步骤:在uefi的bios中创建用于一键引导的引导项;
12.一键引导配置步骤:配置一键引导创建步骤中创建的引导项;
13.一键引导调整步骤:将一键引导配置步骤中配置完成的引导项的顺序调整至引导的第一项;通过一键引导完成备份;
14.一键引导创建步骤中,uefi的引导管理通过getfirmwareenvironmentvariable、getfirmwareenvironmentvariableex和setfirmwareenvironmentvariable、setfirmwareenvironmentvariableex来完成。
15.根据上述技术方案,恢复分区检测步骤中,创建恢复分区的具体步骤为:
16.恢复分区判断步骤:用户是否选择创建恢复分区,如果是,则根据用户指定的位置
调整分区并创建恢复分区,如果不是,则将系统备份镜像文件存储在用户指定的位置;
17.系统备份步骤:根据用户指定的位置执行系统备份;
18.引导项创建步骤:备份完成后,创建uefi引导项,结束。
19.根据上述技术方案,所述一键引导创建步骤中,引导项的创建具体为:
20.获取引导配置步骤:首先,调用getfirmwareenvironmentvariable获得当前uefi的所有引导配置;
21.创建引导配置步骤:判断当前uefi是否存在已有的引导项,如果是,则将已有的引导项删除,并重新创建一个引导项,如果不是,则直接创建一个引导项。
22.根据上述技术方案,所述一键引导配置步骤中,配置引导项具体操作为:
23.获取引导步骤:通过getfirmwareenvironmentvariable获取到一键引导创建步骤中创建的引导项;
24.配置引导步骤:在一键引导创建步骤中创建的引导项的数据结构中填入恢复分区的标识,完成配置。
25.根据上述技术方案,所述配置引导步骤中,分区标识包括恢复分区所在的分区号、分区的起始位置、分区的大小、分区的guid、分区的类型、分区的签名。
26.根据上述技术方案,所述一键引导调整步骤中,调整引导项位置具体为:
27.调用引导配置步骤:调用getfirmwareenvironmentvariable获得当前uefi的所有引导项配置;
28.判断引导配置步骤:判断创建的引导项是否为所有引导项配置的第一项,如果是,则不做处理,如果不是,则跳转到步骤;
29.调整引导配置步骤:将引导项的bootorder0001后再次调用setfirmwareenvironmentvariable将其回写即可。
30.一种一键引导启动项的方法,所述一键引导包括以下步骤:
31.信息获取步骤:读取onekeyeficonfig.dat文件,获得显示信息、延时信息和按键的配置;
32.信息显示步骤:显示配置文件中的信息并根据延时信息进行等待;
33.加载判断步骤:判断用户是否按下对应的按键;如果是,则加载wim文件,进入恢复环境;如果超时没有按下对应的按钮则,则加载boot
×
64.efi文件启动系统;完成后结束。
34.根据上述技术方案,所述加载判断步骤中,具体调用为:
35.如果用户按下对应的按键则调用:
36.bootdevpath=filedevicepath(handlebuf[i],(char16*)l"\\efi\\boot\\aomeipeldr.efi");
[0037]
status=gbs-》loadimage(true,imagehandle,bootdevpath,null,0,&hoskernel);
[0038]
加载恢复环境下的aomeipeldr.efi引导加载wim文件;
[0039]
如果超时则调用:
[0040]
strcpy(filename,(char16*)l"\\efi\\boot\\bootx64.efi");
[0041]
bootdevpath=filedevicepath(loadedimage-》devicehandle,filename);
[0042]
status=gbs-》loadimage(true,imagehandle,bootdevpath,null,0,&
hoskernel);
[0043]
用于加载bootx64.efi程序;
[0044]
如果调用失败则调用:
[0045]
strcpy(filename,(char16*)l"\\efi\\mircosoft\\boot\\bootmgfw.efi");
[0046]
bootdevpath=filedevicepath(loadedimage-》devicehandle,filename);
[0047]
status=gbs-》loadimage(true,imagehandle,bootdevpath,null,0,&hoskernel),用于加载bootmgfw.efi程序。
[0048]
根据上述技术方案,aomeipeldr.efi通过调用efi sdk提供的gst/conin/readkeystroke;获取到用户的按键信息。
[0049]
与现有技术相比,本发明具有以下有益效果:
[0050]
在本发明中,通过将用户的操作系统备份到自定义的恢复环境中,并且,通过本发明中提供的一键还原方法,一键引导用户进入恢复环境,使得用户可以方便、快速的将系统还原到最优状态。
[0051]
在本发明中,不需要使用额外的第三方软件,避免了数据外泄的风险。并且,本发明操作简单,使用方便,能够有效降低用户的使用难度。
附图说明
[0052]
图1为本发明备份以及引导项的创建流程图;
[0053]
图2为本发明一键引导的流程图。
具体实施方式
[0054]
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0055]
实施例一
[0056]
如图1所述,一种基于uefi的备份方法,包括以下步骤:
[0057]
系统判断步骤:通过调用ntquerysysteminformation,并通过systembootenvironmentinformation查询获得当前系统的引导类型,判断当前系统是否支持uefi引导;如果是,则继续,如果不是,则结束;
[0058]
系统分区检测步骤:对当前系统的system分区进行检测,如果检测到当前系统的system分区所在头盘为gpt磁盘,且当前系统分区的标志位efi分区的标志,则保留该分区的符号链接;如果不是,则结束;
[0059]
恢复分区检测步骤:检查当前操作系统所在磁盘是否存在恢复分区,如果存在则进行下一步,如果不存在,则根据用户指定的位置重新创建恢复分区;
[0060]
恢复分区容量判断步骤:判断当前操作系统所在磁盘上存在的恢复分区容量是否能够保存系统备份的所有文件,如果是,则不做调整,如果不是,则根据用户指定的位置重新创建分区;
[0061]
文件移动步骤:将制作好的wim文件、引导文件以及配置文件拷贝到恢复分区;
[0062]
一键引导创建步骤:在uefi的bios中创建用于一键引导的引导项;
[0063]
一键引导配置步骤:配置一键引导创建步骤中创建的引导项;
[0064]
一键引导调整步骤:将一键引导配置步骤中配置完成的引导项的顺序调整至引导的第一项;通过一键引导完成备份;
[0065]
一键引导创建步骤中,uefi的引导管理通过getfirmwareenvironmentvariable、getfirmwareenvironmentvariableex和setfirmwareenvironmentvariable、setfirmwareenvironmentvariableex来完成。
[0066]
恢复分区检测步骤中,创建恢复分区的具体步骤为:
[0067]
恢复分区判断步骤:用户是否选择创建恢复分区,如果是,则根据用户指定的位置调整分区并创建恢复分区,如果不是,则将系统备份镜像文件存储在用户指定的位置;
[0068]
系统备份步骤:根据用户指定的位置执行系统备份;
[0069]
引导项创建步骤:备份完成后,创建uefi引导项,结束。
[0070]
所述一键引导创建步骤中,引导项的创建具体为:
[0071]
获取引导配置步骤:首先,调用getfirmwareenvironmentvariable获得当前uefi的所有引导配置;
[0072]
创建引导配置步骤:判断当前uefi是否存在已有的引导项,如果是,则将已有的引导项删除,并重新创建一个引导项,如果不是,则直接创建一个引导项。
[0073]
所述一键引导配置步骤中,配置引导项具体操作为:
[0074]
获取引导步骤:通过getfirmwareenvironmentvariable获取到一键引导创建步骤中创建的引导项;
[0075]
配置引导步骤:在一键引导创建步骤中创建的引导项的数据结构中填入恢复分区的标识,完成配置。
[0076]
所述配置引导步骤中,分区标识包括恢复分区所在的分区号、分区的起始位置、分区的大小、分区的guid、分区的类型、分区的签名。
[0077]
所述一键引导调整步骤中,调整引导项位置具体为:
[0078]
调用引导配置步骤:调用getfirmwareenvironmentvariable获得当前uefi的所有引导项配置;
[0079]
判断引导配置步骤:判断创建的引导项是否为所有引导项配置的第一项,如果是,则不做处理,如果不是,则跳转到步骤;
[0080]
调整引导配置步骤:将引导项的bootorder0001后再次调用setfirmwareenvironmentvariable将其回写即可。
[0081]
一种一键引导启动项的方法,所述一键引导包括以下步骤:
[0082]
信息获取步骤:读取onekeyeficonfig.dat文件,获得显示信息、延时信息和按键的配置;
[0083]
信息显示步骤:显示配置文件中的信息并根据延时信息进行等待;
[0084]
加载判断步骤:判断用户是否按下对应的按键;如果是,则加载wim文件,进入恢复环境;如果超时没有按下对应的按钮则,则加载boot
×
64.efi文件启动系统;完成后结束。
[0085]
所述加载判断步骤中,具体调用为:
[0086]
如果用户按下对应的按键则调用:
[0087]
bootdevpath=filedevicepath(handlebuf[i],(char16*)l"\\efi\\boot\\aomeipeldr.efi");
[0088]
status=gbs-》loadimage(true,imagehandle,bootdevpath,null,0,&hoskernel);
[0089]
加载恢复环境下的aomeipeldr.efi引导加载wim文件;
[0090]
如果超时则调用:
[0091]
strcpy(filename,(char16*)l"\\efi\\boot\\bootx64.efi");
[0092]
bootdevpath=filedevicepath(loadedimage-》devicehandle,filename);
[0093]
status=gbs-》loadimage(true,imagehandle,bootdevpath,null,0,&hoskernel);用于加载bootx64.efi程序;
[0094]
如果调用失败则调用:
[0095]
strcpy(filename,(char16*)l"\\efi\\mircosoft\\boot\\bootmgfw.efi");
[0096]
bootdevpath=filedevicepath(loadedimage-》devicehandle,filename);
[0097]
status=gbs-》loadimage(true,imagehandle,bootdevpath,null,0,&hoskernel),用于加载bootmgfw.efi程序。
[0098]
aomeipeldr.efi通过调用efisdk提供的gst/conin/readkeystroke;获取到用户的按键信息。
[0099]
实施例二
[0100]
本发明中,具体的实施步骤为:a)检查当前系统是否支持uefi引导,如果不支持则进入legacy的一键引导流程,如果检测到当前系统的system分区所在头盘为gpt磁盘,且当前系统分区的标志为efi分区的标志,则保存该分区的符号链接。
[0101]
b)检查当前操作系统所在磁盘是否存在恢复分区,如果没有则需要创建,检测当前操作系统所在的磁盘是否具备创建恢复分区境的条件,如果没有则需要通过调整当前磁盘用户指定的某个分区的大小后创建恢复分区;如果当前操作系统所在的磁盘上存在恢复分区容量足够保存系统备份的镜像文件则不作调整,如果当前的恢复不分的容量不足以存储系统备份的镜像文件则需要用户指定位置且重新创建恢复分区,程序也可以自动根据恢复分区的位置调整其邻近分区的大小后扩大恢复分区。用户也可以选择将镜像文件备份到数据分区,这样就不需要创建单独的恢复分区。
[0102]
程序拷贝制作好的wim文件、引导文件以及配置文件到恢复环境,其主要的文件和目录结构如下所示:
[0103]
[0104]
[0105][0106]
其中aomeipeldr.efi是自主研发的efi程序,用于加载恢复分区中的wim文件,boot.wim文件是自主自定义的windows pe,其中包含了用于做操作系统还原功能的aomei onekey recovery应用程序,bootmgr.efi是系统自带的操作系统导致程序。
[0107]
c)待以上环境创建好后需要在uefi的bios中创建用于一键引导的启动项,windows操作系统下主要通过getfirmwareenvironmentvariable、getfirmwareenvironmentvariableex和setfirmwareenvironmentvariable、setfirmwareenvironmentvariableex四个api来对uefi的引导进行管理,首先会调用getfirmwareenvironmentvariable获得当前uefi的所有引导配置,如果已经存在自己的引导项则先删除,再创建;如果不存在则直接创建一个引导项即可。
[0108]
d)引导项创建后需要配置这个引导项,配置的目地在于让这个引导项能识别的恢复分区并加载引导文件aomeipeldr.efi文件,还通过getfirmwareenvironmentvariable获取到创建的引导项,并在引导项的数据结构中填入恢复分区所在的分区号、分区的起始位置、分区的大小、分区的guid、分区的类型、分区的签名等。该数据结构如下所示:
[0109]
[0110][0111]
再通过调用setfirmwareenvironmentvariable将修改的引导项写入到uefi的引导配置中即完成引导项的创建。
[0112]
e)最后还需要将该引导项的顺序调整到引导的第一项,以确保每次开机都会默认加载一键引导这个启动项,引导项的改变还是调用getfirmwareenvironmentvariable获得当前uefi的所有引导项配置,如果引导项是第一项则不做处理,如果不是第一项则需要调整其引导配置,需要将引导项的bootorder0001后再次调用setfirmwareenvironmentvariable将其回写即可。
[0113]
实施例三
[0114]
本实施例为实施例二的进一步细化。一键引导的具体流程为:1、根据上述步骤bios已经自己可以正常加载aomeipeldr.efi程序,aomeipeldr.efi中主要负责两件事情:1、加载wim文件,启动恢复环境;2、加载当前系统的bootmgr.efi程序,启动当前系统;
[0115]
2、当bios加载aomeipeldr.efi成功后,aomeipeldr.efi会读取onekeyeficonfig.dat文件读取显示信息、延时信息和按键的配置,aomeipeldr.efi会根据显示信息、延时信息显示相关的信息到屏幕上,如果在延时范围内用户按下了配置对应的按键则进入到恢复环境,如果超时没有按下对应的按钮则引导当前的操作系统。
[0116]
3、aomeipeldr.efi通过调用efisdk提供的gst-》conin-》readkeystroke(gst-》conin,&key);获取到用户的按键信息,如果用户按下对应的按键则调用:
[0117]
bootdevpath=filedevicepath(handlebuf[i],(char16*)l"\\efi\\boot\\aomeipeldr.efi");
[0118]
status=gbs-》loadimage(true,imagehandle,bootdevpath,null,0,&
hoskernel)。
[0119]
加载恢复环境下的aomeipeldr.efi引导加载wim文件:
[0120]
如果超时则调用:
[0121]
strcpy(filename,(char16*)l"\\efi\\boot\\bootx64.efi");
[0122]
bootdevpath=filedevicepath(loadedimage-》devicehandle,filename);
[0123]
status=gbs-》loadimage(true,imagehandle,bootdevpath,null,0,&hoskernel);
[0124]
如果调用失败则调用:
[0125]
strcpy(filename,(char16*)l"\\efi\\mircosoft\\boot\\bootmgfw.efi");
[0126]
bootdevpath=filedevicepath(loadedimage-》devicehandle,filename);
[0127]
status=gbs-》loadimage(true,imagehandle,bootdevpath,null,0,&hoskernel);
[0128]
至此,以上便是一种基于uefi的备份及一键引导启动项的方法的全部流程。
[0129]
实施例四
[0130]
专业述语解释:
[0131]
system分区:指的是引导分区
[0132]
bootmgfw.efi:基于uefi的windows的引导程序
[0133]
aomeipeldr.efi:基于uefi的引导程序
[0134]
创建分区:在磁盘的某个位置建立一个文件系统,例如:c盘
[0135]
扩展分区:基于aomei的文件系统模块对ntfs、fat32等文件系统进行扩大、缩小等操作。
[0136]
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
[0137]
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1