一种MBR磁盘转GPT磁盘的方法及其系统与流程

文档序号:15980472发布日期:2018-11-17 00:16阅读:493来源:国知局
本发明属于计算机磁盘分区领域,具体来说,涉及一种将mbr磁盘转gpt磁盘的系统及其方法。
背景技术
:微软公司在2012年中推出了新一代的pc桌面系统windows8,微软公司在推出windows8的同时,使用了新一代的磁盘分区技术——gpt(guidpartitiontable)磁盘分区格式来替代已经使用很多年的mbr(masterbootrecord)磁盘分区格式。新型的gpt分区方式相对传统的mbr分区方式在易用性和扩展性方面都更优秀,因此,新型的gpt分区方式逐步越来越受到消费者的青睐。鉴于鉴于windows自身转换mbr磁盘到gpt磁盘需要先清除mbr磁盘上所有分区才能转换的限制问题,申请公布号为cn104238952a,申请公布日为2014年12月24日的中国发明专利申请公开了一种磁盘分区格式转换方法,所述方法包括:从硬盘中读取适配于第一磁盘分区格式的第一磁盘分区表;根据第一磁盘分区格式与第二磁盘分区格式的映射关系,将第一磁盘分区表转换为适配于第二次盘分区格式的第二磁盘分区表;将硬盘由第一磁盘分区格式转换为第二磁盘分区格式;将第二磁盘分区表写入硬盘。其中第一磁盘分区格式为mbr磁盘分区格式,第二磁盘分区格式为gpt磁盘分区格式,通过该发明提供的方法可以将mbr磁盘分区格式转换成gpt磁盘分区格式。但是其存在如下不足之处:1、需要单独设计组装一个电子装置,在电子装置安装中央处理器、存储装置、显示器、输入装置、磁盘读写接口和磁盘分区格式转换系统,需要进行分区格式转换时,需要将硬盘从电脑上拆卸下来,然后与电子装置的磁盘读写接口连接后,操作电子装置才能将应硬盘的mbr区格式转换成gpt分区格式。很明显用户在使用该装置将硬盘的mbr区格式转换成gpt分区格式时,需要拆卸和安装电脑上的硬盘,操作较为麻烦。而且使用者需要单独购买一个电子装置,使用成本较高。2、如果是系统所在的磁盘(当前系统所在的磁盘)转换还需要重新配置系统的引导信息,如果是非专业的士很难修复转换之后的系统的引导配置,很明显使用者在转换后系统不能启动的机率非常高,极易导致系统宕机。技术实现要素:本发明为了解决现有将硬盘的mbr区格式转换成gpt分区格式的方法存在的缺陷,本发明提供了一种mbr磁盘转gpt磁盘的方法,通过该方法可直接在计算机上操作,以实现将mbr磁盘转gpt磁盘的目的,操作简单方便,使用成本较低。为解决上述技术问题,本发明所采用的技术方案是:一种mbr磁盘转gpt磁盘的方法,其特征在于:所述方法包括如下步骤:步骤1,判断当前计算机的系统是否支持mbr磁盘转gpt磁盘;步骤2,如果需要转换的mbr磁盘为当前系统所在的磁盘,则判断当前mbr磁盘上的分区位置是否支持mbr磁盘转gpt磁盘;如果需要转换的mbr磁盘为非当前系统所在的磁盘,则不执行这一步骤;步骤3,读取并保存mbr磁盘的分区信息,如果需要转换的mbr磁盘为当前系统所在的磁盘则需要将必要文件拷贝到windows目录,如果需要转换的mbr磁盘为非当前系统所在的磁盘则不需要将必要文件拷贝到windows目录;步骤4,清除mbr磁盘的分区表信息;步骤5,将mbr磁盘初始化为gpt磁盘;步骤6,根据步骤3保存的mbr磁盘的分区信息重新构建gpt分区表;步骤7,如果需要转换的mbr磁盘为当前系统所在的磁盘则需要分配盘符和引导修复,如果需要转换的mbr磁盘为非当前系统所在的磁盘,则不执行这一步骤。步骤1的具体判断方法为:判断磁盘是当前系统所在的磁盘还是非当前系统所在的磁盘,如果是非当前系统所在的磁盘,需要当前系统是windows200364位系统及以上系统才支持mbr磁盘转gpt磁盘;如果是当前系统所在的磁盘,需要当前系统是vista64位及以上64位系统,并且当前系统的windows\boot\efi目录下存在系统引导所需要的文件bootmgfw.efi和bootmgr.efi,才支持mbr磁盘转gpt磁盘。步骤2中,如果当前mbr磁盘上的分区位置不支持mbr磁盘转gpt磁盘,则需要执行分区调整,具体方法为:判断当前计算机的系统的system分区与boot分区是分离还是不分离;如果分离,则需要先将system分区格式化成fat32文件系统,并将该分区的类型设置为efi分区;如果不分离,则需要先判断boot分区之后有没有100mb的空闲空间,如果有,则直接在boot分区之后的空闲位置上创建一个100mb的fat32分区用作efi分区,如果boot分区之后没有空闲空间则需要检测当前boot分区是否有足够的未使用空间,如果没有,则分区调整失败,如果有足够的未使用空间则将boot分区的尾部缩小100bm,并使用这100mb的空间创建一个fat32的分区用作efi分区。步骤2中,如果分离,则需要先将system分区格式化成fat32文件系统,并通过配置gpt分区表的方式将该分区的类型设置为efi分区,具体方法为:将system分区的类型在gpt磁盘上将其设置为efi类型,每个分区在分区表中的每一项定义如下:structgpttableitem{guidpartitiontype;//该分区的类型guiduniqueguid;//该分区的唯一标识uint64firstlba;//该分区的起始扇区uint64lastlba;//该分区的结束扇区uint64attributes;//该分区的属性wcharname[gpt_name_size];//该分区的名称};将partitiontype的值设置为{c12a7328-f81f-11d2-ba4b-00a0c93ec93b},最终将此项写入gpt磁盘的分区表中时这个分区就变成了efi分区。步骤3中,读取并保存mbr磁盘的分区信息的具体方法为:将读取的mbr磁盘的分区信息使用diskmgr(磁盘管理器,后面统一称为diskmgr)统一管理,在diskmgr中找到需要转换的mbr磁盘,从diskmgr中克隆需要转换的mbr磁盘。步骤3中,读取并保存mbr磁盘的分区信息的具体方法中还需要备份原系统的恢复环境和转换到gpt后需要的bcd拷贝,如果原系统的恢复环境存在于system分区,需要将system分区中的recovery目录全部拷贝到boot分区的根目录的recovery目录中,待转换成功之后再将系统的恢复环境修复,确保系统功能的完整性。步骤3中,将必要文件拷贝到windows目录是指将安装目录中的2gpt_bcd文件拷贝到当前系统的windows目录。步骤4中,清除mbr磁盘的分区表信息的具体方法为:将磁盘上的前34个扇区读取到内存中备份之后填0,清除mbr磁盘的分区表。清除mbr分区表的主要目地是为了保留真实的分区却让该磁盘表示为一块空磁盘,是为了后面调用转换功能能够成功,同时也是为了初始化gpt磁盘分区表,以免残留信息导致的错误的分区信息。步骤5中,将mbr磁盘初始化为gpt磁盘的具体方法为:调用windows的deviceiocontrol函数并传入控制码ioctl_disk_create_disk,将初始化参数设置为partition_style_gpt。步骤5中,将初始化参数设置为partition_style_gpt后,如果函数返回成功则表示初始化成功,如果函数调用失败则将步骤4中的备份到内存中的分区表信息回写到当前磁盘,确保用户数据的完整性。步骤6中,重新构建gpt分区表时,如果需要转换的mbr磁盘为当前系统所在的磁盘,则手动组织分区表信息并通过系统的写文件函数直接更新分区表,如果需要转换的mbr磁盘为非当前系统所在的磁盘,直接调用系统的deviceiocontrol函数并使用控制码ioctl_disk_set_drive_layout_ex更新分区表。步骤6中,手动组织分区表信息并通过系统的写文件函数直接更新分区表的具体方法为:构建一个128项的gpttableitem数组,每一项代表一个分区,将每个分区的类型、唯一标识、起始扇区、结束扇区信息、属性、名称,然后将这个数组写入该磁盘第3个扇区开始的连续32个扇区中,待写入成功之后再构建并写入gpt头和mbr中的gpt磁盘的标识。步骤7中,所述分配盘符的具体方法为:根据system分区的arcnumber通知windows的mountpointmanager注册新的设备,然后为新的设备分配盘符。步骤7中,所述引导修复的具体方法为:首先在system分区创建如下结构的目录:efi┏━┻━┓┃┃bootmicrosoft┃boot将当前系统中windows\boot\efi\bootmgfw.efi拷贝到efi\boot目录下重命名为bootx64.efi,再将efi\boot目录下除bootmgfw.efi以外的所有文件拷贝到efi\microsoft\boot目录下,将步骤3中拷贝到windows目录的bcd文件拷贝到efi\microsft\boot目录并重命名为bcd文件名。bcd修复:为了解决系统引导问题,需要对拷贝到system的bcd文件根据当前的系统分区的起始位置进行重新配置,由于此bcd文件已经被深度订制,所以只需要将文件打开搜索关键字并替换成对应的值即可;盘符修复:通过保留的原始磁盘的分区信息在注册表hkey_local_machine\system\mounteddevices位置中找到对应的键值,并将其更新为转换后的数据,做完以上步骤重启系统并设置bios的启动模式为uefi即完成无损转换。专业术语解释:system分区:指的是引导分区。boot分区:指的是系统所在分区。为了实现上述步骤,本发明提供了一种mbr磁盘转gpt磁盘的系统,其特征在于:包括磁盘读写模块、磁盘管理器、文件系统模块和转换模块;所述磁盘读写模块用于负责磁盘扇区的读写;所述磁盘管理器用于构建磁盘和分区信息;所述文件系统模块用于提供对应文件系统的创建、调整大小,负责mbr转gpt的创建fat32文件系统和调整boot分区的大小;所述转换模块用于负责将磁盘的mbr分区格式转成gpt分区格式。还包括native模块,该模块用于提供系统在native环境的显示和运行环境支持。还包括引导修复模块,该模块用于负责转换完成后确保系统能正常启动。还包括系统检查模块和磁盘检查模块,所述系统检查模块用于判断当前系统是否支持将磁盘的mbr分区格式转成gpt分区格式,所述磁盘检查模块用于判断当前磁盘是当前系统所在的磁盘还是非当前系统所在的磁盘。与现有技术相比,本发明具有以下有益效果:通过本发明提供的方法能够直接在计算机上操作,以实现将mbr磁盘转gpt磁盘的目的,不需要用户将磁盘从电脑上拆卸下来进行转换,转换完成后再安装在电脑上,省时省力,用户使用非常的方便。本发明还提供了一种mbr磁盘转gpt磁盘的系统,将该系统安装在计算机上,即可实现上述步骤,安装完成后,用户只需选择需要转换的mbr磁盘即可实现自动转换,操作简单方便。由于本发明为纯软件结构,不需要安装和购买其他硬件,使用成本相对于现有技术来讲大大降低。本发明转换完成后自动实现系统引导信息的修复,用户不需要借助等三方或自己手动修复,大大节省了时间成本和提高了系统的稳定性。附图说明图1为本发明的工艺流程图。具体实施方式下面结合实施例对本发明作进一步的描述,所描述的实施例仅仅是本发明一部分实施例,并不是全部的实施例。基于本发明中的实施例,本领域的普通技术人员在没有做出创造性劳动前提下所获得的其他所用实施例,都属于本发明的保护范围。本发明提供了一种能够直接在计算机上将mbr磁盘转gpt磁盘的方法,具体为:步骤1,判断当前计算机的系统是否支持mbr磁盘转gpt磁盘,具体的判断条件为:判断磁盘是当前系统所在的磁盘还是非当前系统所在的磁盘(可以人工判断,也可以系统自动判断),如果是非当前系统所在的磁盘,需要当前系统是windows200364位系统及以上系统才支持mbr磁盘转gpt磁盘;如果是当前系统所在的磁盘,需要当前系统是vista64位及以上64位系统,并且当前系统的windows\boot\efi目录下存在系统引导所需要的文件bootmgfw.efi和bootmgr.efi,才支持mbr磁盘转gpt磁盘;步骤2,判断当前磁盘上的分区位置是否支持mbr磁盘转gpt磁盘,是,则进入步骤3,否,则执行分区调整,如果调整成功在进入步骤3,如果调整失败则结束;只有当前磁盘为当前系统所在的磁盘才执行该步骤,如果是非当前系统所在的磁盘则不执行该步骤;执行分区调整的具体方法为:判断当前计算机的系统的system分区与boot分区是分离还是不分离;如果分离,则需要先将system分区格式化成fat32文件系统,并通过配置gpt分区表的方式将该分区的类型设置为efi分区;如果不分离,则需要先判断boot分区之后有没有100mb的空闲空间,如果有,则直接在boot分区之后的空闲位置上创建一个100mb的fat32分区用作efi分区,如果boot分区之后没有空闲空间则需要检测当前boot分区是否有足够的未使用空间,如果没有,则分区调整失败,如果有足够的未使用空间则将boot分区的尾部缩小100bm,并使用这100mb的空间创建一个fat32的分区用作efi分区;通过配置gpt分区表的方式将该分区的类型设置为efi分区,具体方法为:将system分区的类型在gpt磁盘上将其设置为efi类型,每个分区在分区表中的每一项定义如下:structgpttableitem{guidpartitiontype;//该分区的类型guiduniqueguid;//该分区的唯一标识uint64firstlba;//该分区的起始扇区uint64lastlba;//该分区的结束扇区uint64attributes;//该分区的属性wcharname[gpt_name_size];//该分区的名称};将partitiontype的值设置为{c12a7328-f81f-11d2-ba4b-00a0c93ec93b},最终将此项写入gpt磁盘的分区表中时这个分区就变成了efi分区;步骤3,读取并保存mbr磁盘的分区信息,如果需要转换的mbr磁盘为当前系统所在的磁盘则需要将必要文件拷贝到windows目录,如果需要转换的mbr磁盘为非当前系统所在的磁盘则不需要将必要文件拷贝到windows目录;读取并保存mbr磁盘的分区信息的具体方法为:将读取的mbr磁盘的分区信息使用diskmgr(磁盘管理器,后面统一称为diskmgr)统一管理,在diskmgr中找到需要转换的mbr磁盘,从diskmgr中克隆需要转换的mbr磁盘,从diskmgr中克隆需要转换的磁盘,其主要目的是为了保存原始的磁盘分区信息方便转换成功之后重新构建适用于gpt磁盘的分区表;读取并保存mbr磁盘的分区信息的具体方法中还需要备份原系统的恢复环境和转换到gpt后需要的bcd拷贝,如果原系统的恢复环境存在于system分区,需要将system分区中的recovery目录全部拷贝到boot分区的根目录的recovery目录中,待转换成功之后再将系统的恢复环境修复,确保系统功能的完整性。将必要文件拷贝到windows目录是指将安装目录中的2gpt_bcd文件拷贝到当前系统的windows目录;步骤4,清除mbr磁盘的分区表信息,具体为:将磁盘上的前34(从该磁盘的第1个扇区开始的连续34个扇区)个扇区读取到内存中备份之后填0,清除mbr磁盘的分区表。清除mbr分区表的主要目地是为了保留真实的分区却让该磁盘表示为一块空磁盘,是为了后面调用转换功能能够成功,同时也是为了初始化gpt磁盘分区表,以免残留信息导致的错误的分区信息。步骤5,调用计算机的系统的初始化函数将当前mbr磁盘重新初始化为gpt磁盘,具体为:调用windows的deviceiocontrol函数并传入控制码ioctl_disk_create_disk,将初始化参数设置为partition_style_gpt,如果函数返回成功则表示初始化成功,如果函数调用失败则将步骤4中的备份到内存中的分区表信息回写到当前磁盘,确保用户数据的完整性;步骤6,根据步骤3保存的mbr磁盘的分区信息重新构建gpt分区表;如果需要转换的mbr磁盘为当前系统所在的磁盘,则手动组织分区表信息并通过系统的写文件函数直接更新分区表,如果需要转换的mbr磁盘为非当前系统所在的磁盘,直接调用系统的deviceiocontrol函数并使用控制码ioctl_disk_set_drive_layout_ex更新分区表;手动组织分区表信息并通过系统的写文件函数直接更新分区表的具体方法为:构建一个128项的gpttableitem数组,每一项代表一个分区,将每个分区的类型、唯一标识、起始扇区、结束扇区信息、属性、名称,然后将这个数组写入该磁盘第3个扇区开始的连续32个扇区中,待写入成功之后再构建并写入gpt头和mbr中的gpt磁盘的标识;步骤7,如果需要转换的mbr磁盘为当前系统所在的磁盘则需要分配盘符和引导修复,如果需要转换的mbr磁盘为非当前系统所在的磁盘,则不执行这一步骤;步骤7中,所述分配盘符的具体方法为:根据该system分区的arcnumber通知windows的mountpointmanager注册新的设备,然后为新的设备分配盘符;步骤7中,所述引导修复的具体方法为:首先在system分区创建如下结构的目录:efi┏━┻━┓┃┃bootmicrosoft┃boot将当前系统中windows\boot\efi\bootmgfw.efi拷贝到efi\boot目录下重命名为bootx64.efi,再将efi\boot目录下除bootmgfw.efi以外的所有文件拷贝到efi\microsoft\boot目录下,将步骤3中拷贝到windows目录的bcd文件拷贝到efi\microsft\boot目录并重命名为bcd文件名;bcd修复:为了解决系统引导问题,需要对拷贝到system的bcd文件根据当前的系统分区的起始位置进行重新配置,由于此bcd文件已经被深度订制,所以只需要将文件打开搜索关键字并替换成对应的值即可;盘符修复:通过保留的原始磁盘的分区信息在注册表hkey_local_machine\system\mounteddevices位置中找到对应的键值,并将其更新为转换后的数据,做完以上步骤重启系统并设置bios的启动模式为uefi即完成无损转换。为了实现上述步骤,本发明提供了一种mbr磁盘转gpt磁盘的系统,其特征在于:包括磁盘读写模块、磁盘管理器、文件系统模块和转换模块;所述磁盘读写模块用于负责磁盘扇区的读写;所述磁盘管理器用于构建磁盘和分区信息;所述文件系统模块用于提供对应文件系统的创建、调整大小,负责mbr转gpt的创建fat32文件系统和调整boot分区的大小;所述转换模块用于负责将磁盘的mbr分区格式转成gpt分区格式。还包括native模块,该模块用于提供系统在native环境的显示和运行环境支持。还包括引导修复模块,该模块用于负责转换完成后确保系统能正常启动。还包括系统检查模块和磁盘检查模块,所述系统检查模块用于判断当前系统是否支持将磁盘的mbr分区格式转成gpt分区格式,所述磁盘检查模块用于判断当前磁盘是当前系统所在的磁盘还是非当前系统所在的磁盘。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1