CN117707431A - 一种基于bios的软件raid数据读取方法、装置 - Google Patents

一种基于bios的软件raid数据读取方法、装置 Download PDF

Info

Publication number
CN117707431A
CN117707431A CN202311774887.5A CN202311774887A CN117707431A CN 117707431 A CN117707431 A CN 117707431A CN 202311774887 A CN202311774887 A CN 202311774887A CN 117707431 A CN117707431 A CN 117707431A
Authority
CN
China
Prior art keywords
raid
data
software
software raid
bios
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
Application number
CN202311774887.5A
Other languages
English (en)
Inventor
陈小春
张超
朱立森
孙亮
李莎
肖志坤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kunlun Taike Beijing Technology Co ltd
Original Assignee
Kunlun Taike Beijing Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Kunlun Taike Beijing Technology Co ltd filed Critical Kunlun Taike Beijing Technology Co ltd
Priority to CN202311774887.5A priority Critical patent/CN117707431A/zh
Publication of CN117707431A publication Critical patent/CN117707431A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于BIOS的软件RAID数据读取方法、装置,通过基于BIOS创建软件RAID,并对RAID阵列进行分区;对分区的文件系统进行格式化,并将BIOS系统的文件复制到文件系统;BIOS系统通过软件RAID驱动读取并解析文件系统的数据。实现了BIOS系统对软件RAID数据读取,达到了扩展软件RAID备份数据的范围,可以通过软件RAID的方式对磁盘上的全部数据,包括操作系统的BootLoader、内核等启动相关文件进行备份,使得软件RAID能够更好地对BIOS系统起到保护作用。

Description

一种基于BIOS的软件RAID数据读取方法、装置
技术领域
本发明涉及计算机固件技术领域,具体涉及一种基于BIOS的软件RAID驱动数据读取方法、装置。
背景技术
近年来,独立磁盘冗余阵列(Redundant Arrays of Independent Disks,RAID)技术逐步发展成满足数据保护要求服务器常见技术。独立的计算机扩展总线标准(Peripheral Component Interconnect Express,PCIE)接口RAID卡搭载高性能I/O处理器,能够满足数据的快速读写和备份工作,但是价格非常昂贵。基于硬件的RAID解决方案几乎是服务器数据备份的唯一选项,而RAID控制器的成本限制了其只能在服务器中的应用。
如今,随着RAID的技术广泛应用,操作系统下的出现了软件RAID功能。基于软件的RAID可在高端存储区域网络内提供优异的数据完整性。这项技术适用于装载大量硬盘驱动的笔记本电脑、台式机、工作站、服务器以及移动存储盒这类移动环境。
软件RAID的实施方案中,不涉及任何对特殊硬件的要求。软件RAID使用计算机系统自身的硬盘驱动,通过操作系统的内置I/O接口,直接访问硬盘。软件RAID在操作系统加载操作系统下的RAID驱动程序软件后立即激活。这种软件RAID解决方案通常集成于服务器操作系统和部分桌面机中,可供用户免费使用,低成本是这种解决方案的主要优势。缺点是启动时无保护,因为BIOS没有软件RAID驱动,无法识别软件RAID中的BootLoader(启动装载)或者内核。因此制作软件RAID操作系统时,要把BootLoader直接放在硬盘中。
当前基本输入/输出系统(Basic Input Output System,BIOS)由于没有软件独立磁盘冗余阵列(Redundant Arrays of Independent Disks,RAID)驱动,所以不支持从软件RAID中读取文件。在安装操作系统时,制作软件RAID过程中,需要把BootLoader以及内核放在软件RAID之外的普通磁盘中。这样就导致BootLoader和内核等启动相关文件不受软件RAID的保护,没有实现备份。如果启动相关文件受到破坏,将导致操作系统无法启动且无法恢复。
在BIOS不支持软件RAID的情况下,无法读取软件RAID中的文件。如果安装操作系统时,把BootLoader和内核等启动相关文件存放在了软件RAID中;重启开机后,BIOS无法读取BootLoader和内核,则无法开机。
由于存在以上缺陷,目前软件RAID通常用来备份用户个人数据,无法保护整个操作系统。
发明内容
有鉴于此,本发明提供了一种基于BIOS的软件RAID数据读取方法、装置,能够实现BIOS系统对软件RAID数据读取。
本发明采用的具体技术方案如下:
一种基于BIOS的软件RAID数据读取方法,包括:基于统一可扩展固件接口基本输入输出系统BIOS,创建软件独立磁盘冗余阵列RAID,并对所述RAID阵列进行分区;对所述分区的文件系统进行格式化,并将所述BIOS系统的文件复制到所述文件系统;所述BIOS系统通过软件RAID驱动读取并解析所述文件系统的数据。
进一步地,所述创建所述RAID阵列,并对所述RAID阵列进行分区,包括:采用两个物理磁盘组成软件RAID阵列,使用fdisk命令对所述软件RAID阵列进行分区。
进一步地,所述创建所述RAID阵列,并对所述RAID阵列进行分区,还包括:采用fdisk命令对两个物理磁盘进行分区,分别获得大小对应相同的分区,将大小对应相同的所述分区组成所述RAID阵列。
进一步地,所述通过软件RAID驱动读取并解析所述文件系统的数据,包括:通过所述物理磁盘的磁盘驱动的块输入输出BlockIO接口,读取硬盘中的数据,并通过所述软件RAID驱动解析所述数据。
进一步地,通过所述物理磁盘的磁盘驱动的BlockIO接口,读取硬盘中的数据,包括:通过所述物理磁盘的磁盘驱动的BlockIO接口,读取硬盘中的第一个块的数据,判断所述第一个块的数据是否包含软RAID;在有所述软RAID的情况下,安装所述软件RAID驱动,之后再读取所述数据。
进一步地,通过所述软件RAID驱动解析所述文件系统的数据,包括:通过所述软件RAID驱动获取所述数据包含的分区表;通过所述软件RAID驱动解析所述分区表,并根据所述分区表的解析结果匹配块输入输出协议;所述BIOS系统根据所述块输入输出协议访问获取所述数据。
进一步地,在通过所述软件RAID驱动解析所述文件系统的数据之后,所述方法还包括:所述BIOS系统根据所述数据,挂载对应的文件系统驱动,根据所述文件系统驱动,以文件的形式获取所述软RAID的数据信息。
进一步地,在通过所述软件RAID驱动解析所述文件系统的数据之后,所述方法还包括:所述BIOS系统读取所述软RAID的启动装载BootLoader,并跳转至所述启动装载BootLoader;根据所述启动装载BootLoader对所述BIOS引导。
一种基于BIOS的软件RAID驱动装置,包括:驱动绑定支持模块、驱动绑定启动模块、驱动绑定停止模块,其中,所述驱动绑定支持模块,用于判断当前设备是否匹配所述软件RAID驱动;所述驱动绑定启动模块,用于解析所述软件RAID的数据,创建所述软件RAID驱动的结构体和所述结构体之间的对应关系,以及确认所述软件RAID的逻辑阵列的偏移量,并发布所述软件RAID的块输入输出接口BlockIO的接口函数;所述驱动绑定停止模块,用于释放所述软件RAID驱动申请的资源。
进一步地,所述软件RAID驱动装置,还包括:创建分区模块,用于基于BIOS系统创建软件RAID阵列,并对所述RAID阵列进行分区;复制模块,用于对所述分区的文件系统进行格式化,并将所述BIOS系统的文件复制到所述文件系统;读取解析模块,用于通过软件RAID驱动读取并解析所述文件系统的数据。
有益效果:
(1)本发明实施例提供了一种基于BIOS的软件RAID数据读取方法,通过基于BIOS创建软件RAID,并对RAID阵列进行分区;对分区的文件系统进行格式化,并将BIOS系统的文件复制到文件系统;BIOS系统通过软件RAID驱动读取并解析文件系统的数据。实现了BIOS系统对软件RAID数据读取,达到了扩展软件RAID备份数据的范围,可以通过软件RAID的方式对磁盘上的全部数据,包括操作系统的BootLoader、内核等启动相关文件进行备份。使得软件RAID能够更好地对BIOS系统起到保护作用。
(2)BIOS系统挂载对应的文件系统驱动,根据文件系统驱动,以文件的形式获取软RAID的数据信息,在安装操作系统的过程中可以把全部系统文件复制到软件RAID阵列中,不用再区分普通系统文件和引导相关文件,简化了系统安装过程。
(3)通过软件RAID驱动获取数据包含的分区表;通过软件RAID驱动解析分区表,并根据分区表的解析结果匹配块输入输出协议;BIOS系统根据块输入输出协议访问获取数据。解决了软RAID无法备份操作系统的EFI分区的问题,进一步增强了对操作系统引导文件的保护。
附图说明
图1是根据本发明实施例的软件RAID数据读取方法流程图;
图2是根据本发明实施例的软件RAID驱动装置结构框图;
图3是根据本发明场景实施例的软件RAID驱动的内部执行流程示意图;
图4是根据本发明场景实施例二的软件RAID系统创建流程示意图;
图5是根据本发明场景实施例二的操作系统引导流程示意图;
图6是根据本发明场景实施例三的软件RAID系统创建流程示意图。
具体实施方式
下面结合附图并举实施例,对本发明进行详细描述。
本发明实施例提供了一种基于BIOS的软件RAID数据读取方法,图1是根据本发明实施例的软件RAID数据读取方法流程图,如图1所示,包括:
步骤S102,基于基本输入输出系统BIOS,创建软件独立磁盘冗余阵列RAID,并对RAID阵列进行分区;
在一个示例性实施例中,创建RAID阵列,并对RAID阵列进行分区,包括:采用两个物理磁盘组成软件RAID阵列,使用fdisk命令对软件RAID阵列进行分区。
在一个示例性实施例中,创建RAID阵列,并对RAID阵列进行分区,还包括:采用fdisk命令对两个物理磁盘进行分区,分别获得大小对应相同的分区,将大小对应相同的分区组成RAID阵列。
在实际实施过程中,软件RAID系统创建有两种常见方式,分别是先基于物理磁盘组成软件RAID,再对软件RAID进行分区;或者先对两个物理磁盘进行分区,再从两硬盘中各选一个分区组成软RAID。
步骤S104,对分区的文件系统进行格式化,并将BIOS系统的文件复制到文件系统;
步骤S106,BIOS系统通过软件RAID驱动读取并解析文件系统的数据。
在一个示例性实施例中,通过软件RAID驱动读取并解析文件系统的数据,包括:通过物理磁盘的磁盘驱动的块输入输出BlockIO接口,读取硬盘中的数据,并通过软件RAID驱动解析数据。
在一个示例性实施例中,通过物理磁盘的磁盘驱动的BlockIO接口,读取硬盘中的数据,包括:通过物理磁盘的磁盘驱动的BlockIO接口,读取硬盘中的第一个块的数据,判断第一个块的数据是否包含软RAID;在有软RAID的情况下,安装软件RAID驱动,之后再读取数据。
在实际实施过程中,通过BlockIO接口,读取磁盘的第一个逻辑块中的数据。根据软件RAID规范定义,超级块的前4个字节是MagicNumber(幻数,用来标记文件或者协议的格式),也称作超级块标识号(SupperBlockID)。默认值为0xa92b4efc(小尾端)。如果在磁盘相应位置读到了MagicNumber,说明这个磁盘上是保留了软件RAID信息,可以返回成功状态,进而执行驱动绑定启动模块。如果没有查到MagicNumber,说明该磁盘上没有软件RAID信息,从而退出软件RAID驱动。
在一个示例性实施例中,通过软件RAID驱动解析文件系统的数据,包括:通过软件RAID驱动获取数据包含的分区表;通过软件RAID驱动解析分区表,并根据分区表的解析结果匹配块输入输出协议;BIOS系统根据块输入输出协议访问获取数据。
在一个示例性实施例中,在通过软件RAID驱动解析文件系统的数据之后,方法还包括:BIOS系统根据数据,挂载对应的文件系统驱动,根据文件系统驱动,以文件的形式获取软RAID的数据信息。
在一个示例性实施例中,在通过软件RAID驱动解析文件系统的数据之后,方法还包括:BIOS系统读取软RAID的启动装载BootLoader,并跳转至启动装载BootLoader;根据启动装载BootLoader对BIOS引导。
本发明实施例还提供了一种基于BIOS的软件RAID驱动装置,包括:驱动绑定支持模块、驱动绑定启动模块、驱动绑定停止模块,其中,驱动绑定支持模块,用于判断当前设备是否匹配软件RAID驱动;驱动绑定启动模块,用于解析软件RAID的数据,创建软件RAID驱动的结构体和结构体之间的对应关系,以及确认软件RAID的逻辑阵列的偏移量,并发布软件RAID的块输入输出接口BlockIO的接口函数;驱动绑定停止模块,用于释放软件RAID驱动申请的资源。
在一个示例性实施例中,软件RAID驱动装置,还包括:创建分区模块,用于基于BIOS系统创建软件RAID阵列,并对RAID阵列进行分区;复制模块,用于对分区的文件系统进行格式化,并将BIOS系统的文件复制到文件系统;读取解析模块,用于通过软件RAID驱动读取并解析文件系统的数据。
在实际实施过程中,软件RAID驱动装置能够实现软件RAID读取,其装置组成还包括很多功能模块,以实现上述实施例中的基于BIOS的软件RAID数据读取方法的具体步骤,这里不对模块的功能划分和命名做具体限制。
为了使得本领域的技术人员更好地理解本发明的技术方案,下面结合具体的场景实施例进行阐述。
场景实施例一
BIOS实现软件RAID读取的核心模块,是在BIOS下实现了软件RAID驱动。即上述实施例中软件RAID驱动装置。图2是根据本发明实施例的软件RAID驱动装置结构框图,如图2所示,包括:驱动绑定支持、驱动绑定启动和驱动绑定停止三个模块。其中驱动绑定支持模块(Driver Bing Support)函数主要是快速判断当前驱动和当前硬件是否匹配。驱动绑定启动模块(Driver Binding Start)函数是驱动主体,对硬件进程初始化、构建关键结构体和内部逻辑模块、安装设备树和接口函数。驱动绑定停止模块(Driver Binding Stop)是在驱动被卸载时,被调用的函数,主要功能是卸载驱动绑定启动Start函数中安装的接口函数,释放驱动绑定启动Start函数中申请的内存资源等。
驱动绑定支持模块的作用是判断当前设备是否和当前驱动匹配。软件RAID驱动的驱动绑定支持的作用,是判断当前设备是否是一个已经完成了软件RAID配置的硬盘。如果当前设备和驱动不匹配,则退出模块。如果当前设备和驱动匹配、则继续执行驱动绑定启动函数。
如图2所示,驱动绑定支持模块由两个子模块构成。物理磁盘驱动器接口:用于判断当前硬件设备是否为一个磁盘。如果是一个磁盘,则获取这个磁盘的读写接口函数,通过BlockIO对磁盘内容按照逻辑块进行访问。如果不是一个磁盘,则退出整个驱动模块。软件RAID特征判断模块:当前设备如果是一个物理磁盘,通过BlockIO接口,读取磁盘的第一个逻辑块中的数据。根据软件RAID规范定义,超级块的前4个字节是MagicNumber(幻数,用来标记文件或者协议的格式),也称作超级块标识号(SupperBlockID)。默认值为0xa92b4efc(小尾端)。如果在磁盘相应位置读到了MagicNumber,说明这个磁盘上是保留了软件RAID信息,可以返回成功状态,进而执行驱动绑定启动模块。如果没有查到MagicNumber,说明该磁盘上没有软件RAID信息,从而退出软件RAID驱动。
驱动绑定启动模块通常的作用是对设备进行初始化、并通过安装Protocol(协议)的形式对外发布接口函数。软件RAID驱动中,驱动绑定启动模块的主要作用是:首先,读取解析磁盘中的关键数据;其次,创建驱动使用的若干重要结构体以及相应关系;而后通过逻辑计算模块找到软件RAID中逻辑阵列的偏移量;最后发布基于软件RAID的BlockIO系列接口函数。
如图2所示,驱动绑定启动模块的子模块包括:超级块模块、卷组模块、逻辑卷模块、物理卷模块、段结构体模块、节点结构体模块、内部逻辑计算模块、私有数据模块、设备路径模块、块输入输出协议模块。
超级块模块:软件RAID的超级块(supper block)是软件RAID最核心的数据,记录了软件RAID的几乎全部关键信息。该数据是在操作系统下创建软件RAID时写入到硬盘中的;在BIOS下,通过超级块模块来解析磁盘上的内容,并创建相应结构体记录超级块的信息。超级块数据保存位置根据操作系统下软件RAID配置工具的版本有所不同,目前OS下的软件RAID配置工具创建的软件RAID版本为V1.2,SupperBlock保存在磁盘的第8个逻辑扇区,地址偏移量为0x10000。
卷组模块:卷组(Volume Group),将数个物理卷进行整合,即形成了卷组,卷组相当于当前所有物理卷的一个资源汇总。卷组结构体中有两个重要的链表,一个链表指向系统中的全部物理卷,一个链表指向系统中的全部逻辑卷。在软件RAID驱动中,一个卷组也就是一个Array,表示一个磁盘阵列。
逻辑卷模块:逻辑卷(LV),由卷组的资源划分而来。逻辑卷的大小与物理区块(PE)的大小及物理区块的数量有关,Size(LV)=Count(PE)*Size(PE)。在32位的操作系统中,逻辑卷的大小与PE的大小有关;在64位的操作系统中,逻辑卷几乎没有容量限制。在软件RAID的Level 0和Level 1中,物理区块大小就是磁盘BlockSize。
物理卷模块:将实际的磁盘分区(partition)系统识别码(system ID)修改为8e后,在OS下被转化为LVM最底层的物理卷,作为后续空间管理的基础。对于直接把两个大小相同的硬盘直接组成软件RAID 1的情况,一个物理卷也就是整个磁盘。
段结构体模块:一个逻辑卷可能包含一个或者多个段(segment),每个段有自己独立的在磁盘中的长度。众多段的总长度构成了这个逻辑卷的长度。在软RAID驱动中,逻辑卷只有一个段。记录这个软件RAID的大小。段结构体中记录的当前RAID的级别。段结构体包含了多个节点
节点结构体模块:节点结构体是段结构体的重要成员。节点结构体是由节点起始物理地址、节点归属的物理卷、节点归属的逻辑卷、组成。节点的物理起始地址描述了当前节点的起始地址。
内部逻辑计算模块:内部计算逻辑模块根据当前软件RAID创建的各个基本结构体的关键信息,计算出BIOS软件RAID驱动所需要的关键数据。包括软件RAID磁盘阵列大小、软件RAID磁盘阵列数据存储区相对于物理磁盘的偏移量等。
私有数据模块:在软RAID驱动中创建一个私有的(Private)结构体,结构体中记录软RAID的关键信息,以便在接口函数中进行调用。
设备路径模块:设备路径(Device Path)模块用于生产一个软RAID驱动的设备路径。统一可扩展固件接口(Unified Extensible Firmware Interface,UEFI)设备路径是用来表示系统中设备的路径,这个设备路径并非一个简单的字符串、在UEFI规范中定义了设备路径的数据结构和若干操作它的UEFI接口函数。设备路径用来在UEFI环境中标识系统中的设备(物理设备或者逻辑设备),类似于在高级配置和电源管理接口(AdvancedConfiguration and Power Management Interface,ACPI)中用命名空间(Name Space)来标识各个对象(Object)。
这就意味着设备路径具有层级结构;众多Device Path集合起来构成了1个UEFI环境下的设备命名空间。
设备路径以设备路径节点(Device Path Node)为基本单位来依次串接而成,其结束标志是硬件设备路径的结束(End of Hardware Device Path)类型的Device PathNode。例如某个U盘在BIOS的命令行环境中的设备路径的字符串表示形式如下:
PciRoot(0x0)/Pci(0x14,0x0)/USB(0x0,0x0)/HD(1,MBR,0x01EDBE02,0x800,0x1004800)
软件RAID的设备路径模块负责根据软件RAID的实际使用情况,在完整的设备路径中插入软件RAID的结点,形成一个新的表示软件RAID的设备路径。
块输入输出协议模块:在UEFI驱动中,所有块设备的驱动最终都要发布块输入输出协议(BlockIOProtocol),用于提供对设备按块读写的接口。典型例子是非易失性快速存储器(Nonvolatile memory express,NVME)驱动、串行高级技术附件(Serial AdvancedTechnology Attachment,,SATA)驱动、U盘驱动等。除了硬件驱动、还要一个特殊的例子,就是磁盘分区驱动。磁盘分区驱动底层依赖是调用磁盘的BlockIOProtocol,而检测到分区信息后,给每个分区也发布一个BlockIOProtocol。其他调用者可以通过调用每个分区的BlockIOProtocol访问分区内容。
与分区模块的结构相类似,软RAID驱动的BlockIOProtocol模块,底层也是依赖磁盘驱动发布的BlockIOProtocol,对磁盘数据进行读取;检测到软RAID数据存在后,计算出软RAID数据区,为软RAID数据区安装BlockIOProtocol。其他调用者可以通过软RAID驱动安装的BlockIOProtocol按块读写软RAID下的数据。
驱动绑定停止模块,当UEFI驱动被卸载时,都会调用驱动的驱动绑定停止模块(DriverBingdingStop函数)。软RAID驱动中的驱动绑定停止模块实现了相关功能。在驱动被卸载时,首先卸载驱动绑定启动模块中发布的DevicePathProtocol和BlockIOProtocol。而后释放驱动绑定启动模块中描述的若干模块申请的内存资源。
图3是根据本发明场景实施例的软件RAID驱动的内部执行流程示意图,如图3所示,包括:
第一步:驱动绑定支持模块负责判断整机上的各个硬件设备是否和当前驱动匹配。如果硬件设备和驱动匹配,则进入到驱动绑定启动模块。
第二步:超级块模块的作用是直接从硬盘上读取软件RAID的超级块信息,创建超级块结构体,供给关键结构体使用。
第三步:物理卷模块收集各个物理磁盘关键信息,包括磁盘容量、磁盘的句柄等。物理卷把全部物理设备信息提供给卷组模块。
第四步:卷组模块根据物理卷的资源,创建卷组结构体。在软RAID驱动中,一个软RAID对应一个卷组。卷组把汇总的全部物理资源再划分为若干逻辑卷。
第五步:逻辑卷模块根据卷组提供的划分方式,创建逻辑卷结构体。逻辑卷结构体又包含段结构体。段结构体是逻辑卷结构体的一部分。段结构体模块负责补充逻辑卷中的段结构体数据。
第六步:逻辑卷结构体又包含节点结构体。节点结构体是逻辑卷结构体的一部分。节点结构体模块负责补充逻辑卷中的节点结构体数据。
第七步:卷组模块把准备好的卷组数据传递给内部逻辑计算模块。内部逻辑计算模块根据卷组结构体的内容,计算出软件RAID下存储数据在磁盘中的真实偏移量。
第八步:根据内部逻辑计算模块提供的数据,创建BIOS驱动所需要的设备路径。设备路径是BIOS驱动的一个重要接口。
第九步:根据内部逻辑计算模块提供的数据,实现私有数据模块。私有数据模块保存了多项驱动内部重要数据,这些数据便于驱动内部调用,也可以提供给驱动外部调用。
第十步:根据内部逻辑计算模块提供的数据,创建块输入输出协议接口函数。这也是本驱动最重要的对外接口函数。驱动外部应用可以通过块输入输出接口函数直接访问软件RAID的文件数据保存区,而不用关心软件驱动内部是如何工作的。
第十一步:驱动绑定停止模块安装。驱动绑定停止模块作为UEFI驱动模型的重要组成部分,用于在驱动被卸载时释放驱动申请的资源。
场景实施例二
在本场景实施例中,对上述基于BIOS的软件RAID数据读取方法结合具体实施场景进行阐述。
软件RAID驱动模块作为一个BIOS的驱动,会在BIOS开机阶段被执行,在UEFI环境中提供软件RAID接口服务。
在本场景实施例中,先基于物理磁盘组成软件RAID,再对软件RAID进行分区。
图4是根据本发明场景实施例二的软件RAID系统创建流程示意图,如图4所示,在安装操作系统的过程中,对磁盘进行分区和组RAID等操作,最终完成系统部署。步骤如下:
计算机上插入两块容量相同的硬盘,进入安装环境后,可以通过linux命令lsblk查看到两个硬盘分别为/dev/sda和/dev/sdb。
把sda和sdb两个磁盘组成一个软件RAID level 1。配置命令如下:
mdadm--create--verbose/dev/md0--level=1--raid-devices=2/dev/sda/dev/sdb
对新生成的磁盘阵列/dev/md0进行分区,具体操作与对一个普通硬盘进行分区的方式相同。可用fdisk命令进行分区,图4中把md0划分为三个分区。这三个分区分别是/dev/md0p1,/dev/md0p2和/dev/md0/p3。
对三个分区进行格式化。/dev/md0p1格式化为fat32文件系统,可以作为操作系统的BOOT分区,通常BOOT分区也称为EFI分区、存放启动相关文件。/dev/md0p2格式化为ext2文件系统,作为ROOT分区,保存操作系统的系统文件。软件RAID组成的系统也会把ROOT分区格式化为XFS文件系统。/dev/md0p3格式化为ext2文件系统,可用于保存用户数据。
完成文件系统格式化后,把操作系统的相应文件复制到各个文件系统中,完成操作系统安装。
以上步骤通常是系统安装文件自动完成。在实际实施过程中,根据用户自己的要求进行定制修改。
图5是根据本发明场景实施例二的操作系统引导流程示意图,如图5所示,BIOS通过磁盘驱动的BlockIO接口,可以按块访问整个硬盘中的数据。读取硬盘中第一个块的数据。
BIOS通过软件RAID驱动解析硬盘第一个Block的数据,判断磁盘上是否有软RAID。如果有软RAID,则安装软RAID驱动。安装后,BIOS可以通过软件RAID驱动发布的BlockIO接口按块为单位,读取软件RAID中的数据。BIOS通过软RAID驱动,读取软RAID下的一个块的数据。
BIOS对软RAID第一个块的数据进行解析,通过分区驱动判断该数据包含分区表,通过分区驱动解析分区表。分区驱动对分区表解析成功后,给每个分区安装一个BlockIOProtocol。BIOS可以根据分区安装的BlockIOProtocol直接按块访问分区中的内容。
BIOS在根据分区中读取的块数据信息,挂载相应的文件系统驱动。文件系统驱动挂载成功后,就能够以文件的形式从磁盘上读取信息了。
BIOS从磁盘上读取BootLoader,并跳转到BootLoader。由BootLoader进一步加载内核并最终完成操作系统的引导。
场景实施例三
在本场景实施例中,先对两个物理磁盘进行分区,再从两硬盘中各选一个分区组成软RAID。
图6是根据本发明场景实施例三的软件RAID系统创建流程示意图,如图6所示,在安装操作系统的过程中,对磁盘同样进行分区和组RAID等操作,最终完成系统部署。步骤如下:
计算机上插入两块容量相同的硬盘,进入安装环境后,可以通过linux命令lsblk查看到两个硬盘分别为/dev/sda和/dev/sdb。
通过fdisk命令对/dev/sda和/dev/sdb两个磁盘进行分区。/dev/sda被划分为/dev/sda1,/dev/sda2和/dev/sda3三个分区。磁盘/dev/sdb被划分为/dev/sdb1,/dev/sdb2和/dev/sdb3三个分区。要求/dev/sda1和/dev/sdb1分区大小相同,/dev/sda2和/dev/sdb2分区大小相同,/dev/sda3和/dev/sdb3分区大小相同。
把dev/sda1和/dev/sdb1两个分区组成一个级别1的软件RAID,名称为md0。
配置命令如下:
mdadm--create--verbose/dev/md0--level=1--raid-devices=2/dev/sda1/dev/sdb1
把dev/sda2和/dev/sdb2两个分区组成一个级别1的软件RAID,名称为md1。
把dev/sda3和/dev/sdb3两个分区组成一个级别1的软件RAID,名称为md2。
对三个软RAID进行格式化。/dev/md0格式化为fat32文件系统,可以作为操作系统的BOOT分区,通常BOOT分区也称为EFI分区、存放启动相关文件。/dev/md1格式化为ext2文件系统,作为ROOT分区,保存操作系统的系统文件。软件RAID组成的系统也会把ROOT分区格式化为XFS文件系统。/dev/md2格式化为ext2文件系统,可用于保存用户数据。
完成文件系统格式化后,把操作系统的相应文件复制到各个文件系统中,完成操作系统安装。
以上步骤通常是系统安装文件自动完成。在实际实施过程中,根据用户自己的要求进行定制修改。
软件RAID系统引导的核心,是通过各个软硬件驱动,从磁盘中加载BootLoader、并支持BootLoader读取Linux内核,最终完成操作系统的引导。在本场景实施例中,与场景实施例二中的引导过程并没有本质区别。只是根据磁盘上的数据排布不同,BIOS的驱动加载顺序不同。在本场景实施例中,磁盘上的数据是现有分区表,每个分区中保存着软RAID信息,在软RAID下保存了相应的文件系统和文件。整个步骤的各个驱动环环相扣,如果缺少任何一个驱动,都将导致操作系统引导失败。在BIOS中实现了软件RAID驱动,是补齐软件RAID系统引导的关键一环。
综上,本发明提供了一种基于BIOS的软件RAID数据读取方法及软件RAID驱动装置,在安装操作系统过程中、操作系统下创建软件RAID阵列,对阵列进行分区、格式化、把系统文件复制到相应的分区。在引导操作系统时,BIOS先读取磁盘中的数据,通过BIOS下的软件RAID驱动解析磁盘数据,安装软件RAID的块输入输出(Block Input Output,BlockIO)读写接口。从而进一步挂载分区和文件系统驱动,最终读取BootLoader,实现对操作系统的引导。通过在BIOS下,以一个标准UEFI驱动的形式,实现了软RAID的读盘功能、包括对RAID 0、RAID 1、RAID 10三种常见软RAID级别的支持。首次实现了BIOS对软RAID的支持,解决了BIOS无法读取软RAID下文件的问题,解决了软RAID无法备份操作系统的EFI分区、保护操作系统引导文件的问题。在BIOS下实现对软件RAID的支持,包括但不限于在BIOS下以驱动、库函数、应用的形式实现对磁盘上软件RAID的解析。BIOS下软件RAID驱动通过磁盘BlockIO读取磁盘上的数据,通过创建各个模块构成BIOS下软件RAID驱动主体。BIOS下的软件RAID驱动模块发布BlockIOProtocol和DevicePathProtocol。
通过本发明实施例提供的技术方案,可以通过软件RAID的方式对磁盘上的全部数据,包括操作系统的BootLoader、内核等启动相关文件进行备份。从而解决了无法通过软件RAID的方式保护引导文件的问题。可以通过软件RAID方式保护磁盘全部数据,加强了系统的可靠性。使用本技术后,在安装操作系统的过程中可以把全部系统文件复制到软件RAID阵列中,不用再区分普通系统文件和引导相关文件,简化了系统安装过程。
以上的具体实施例仅描述了本发明的设计原理,该描述中的部件形状,名称可以不同,不受限制。所以,本发明领域的技术人员可以对前述实施例记载的技术方案进行修改或等同替换;而这些修改和替换未脱离本发明创造宗旨和技术方案,均应属于本发明的保护范围。

Claims (10)

1.一种基于BIOS的软件RAID数据读取方法,其特征在于,包括:
基于统一可扩展固件接口基本输入输出系统BIOS,创建软件独立磁盘冗余阵列RAID,并对所述RAID阵列进行分区;
对所述分区的文件系统进行格式化,并将所述BIOS系统的文件复制到所述文件系统;
所述BIOS系统通过软件RAID驱动读取并解析所述文件系统的数据。
2.如权利要求1所述的方法,其特征在于,所述创建所述RAID阵列,并对所述RAID阵列进行分区,包括:
采用两个物理磁盘组成软件RAID阵列,使用fdisk命令对所述软件RAID阵列进行分区。
3.如权利要求1所述的方法,其特征在于,所述创建所述RAID阵列,并对所述RAID阵列进行分区,还包括:
采用fdisk命令对两个物理磁盘进行分区,分别获得大小对应相同的分区,将大小对应相同的所述分区组成所述RAID阵列。
4.如权利要求1所述的方法,其特征在于,所述通过软件RAID驱动读取并解析所述文件系统的数据,包括:
通过所述物理磁盘的磁盘驱动的块输入输出BlockIO接口,读取硬盘中的数据,并通过所述软件RAID驱动解析所述数据。
5.如权利要求4所述的方法,其特征在于,通过所述物理磁盘的磁盘驱动的BlockIO接口,读取硬盘中的数据,包括:
通过所述物理磁盘的磁盘驱动的BlockIO接口,读取硬盘中的第一个块的数据,判断所述第一个块的数据是否包含软RAID;在有所述软RAID的情况下,安装所述软件RAID驱动,之后再读取所述数据。
6.如权利要求1所述的方法,其特征在于,通过所述软件RAID驱动解析所述文件系统的数据,包括:
通过所述软件RAID驱动获取所述数据包含的分区表;
通过所述软件RAID驱动解析所述分区表,并根据所述分区表的解析结果匹配块输入输出协议;
所述BIOS系统根据所述块输入输出协议访问获取所述数据。
7.如权利要求6所述的方法,其特征在于,在通过所述软件RAID驱动解析所述文件系统的数据之后,所述方法还包括:
所述BIOS系统根据所述数据,挂载对应的文件系统驱动,根据所述文件系统驱动,以文件的形式获取所述软RAID的数据信息。
8.如权利要求7所述的方法,其特征在于,在通过所述软件RAID驱动解析所述文件系统的数据之后,所述方法还包括:
所述BIOS系统读取所述软RAID的启动装载BootLoader,并跳转至所述启动装载BootLoader;根据所述启动装载BootLoader对所述BIOS引导。
9.一种基于BIOS的软件RAID驱动装置,其特征在于,包括:驱动绑定支持模块、驱动绑定启动模块、驱动绑定停止模块,其中,
所述驱动绑定支持模块,用于判断当前设备是否匹配所述软件RAID驱动;
所述驱动绑定启动模块,用于解析所述软件RAID的数据,创建所述软件RAID驱动的结构体和所述结构体之间的对应关系,以及确认所述软件RAID的逻辑阵列的偏移量,并发布所述软件RAID的块输入输出接口BlockIO的接口函数;
所述驱动绑定停止模块,用于释放所述软件RAID驱动申请的资源。
10.如权利要求9所述的装置,其特征在于,所述软件RAID驱动装置,还包括:
创建分区模块,用于基于BIOS系统创建软件RAID阵列,并对所述RAID阵列进行分区;
复制模块,用于对所述分区的文件系统进行格式化,并将所述BIOS系统的文件复制到所述文件系统;
读取解析模块,用于通过软件RAID驱动读取并解析所述文件系统的数据。
CN202311774887.5A 2023-12-21 2023-12-21 一种基于bios的软件raid数据读取方法、装置 Pending CN117707431A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311774887.5A CN117707431A (zh) 2023-12-21 2023-12-21 一种基于bios的软件raid数据读取方法、装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311774887.5A CN117707431A (zh) 2023-12-21 2023-12-21 一种基于bios的软件raid数据读取方法、装置

Publications (1)

Publication Number Publication Date
CN117707431A true CN117707431A (zh) 2024-03-15

Family

ID=90155079

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311774887.5A Pending CN117707431A (zh) 2023-12-21 2023-12-21 一种基于bios的软件raid数据读取方法、装置

Country Status (1)

Country Link
CN (1) CN117707431A (zh)

Similar Documents

Publication Publication Date Title
US7702894B2 (en) System and method for loading programs from HDD independent of operating system
US8370835B2 (en) Method for dynamically generating a configuration for a virtual machine with a virtual hard disk in an external storage device
US8352721B1 (en) Initiating an operating system boot from firmware
US6996706B1 (en) Booting an operating system or running other pre-boot code from a file stored under a different operating system
US7519806B2 (en) Virtual partition for recording and restoring computer data files
US7293166B2 (en) Method of indicating a format of accessing an operating system contained on a USB memory device
US6993649B2 (en) Method of altering a computer operating system to boot and run from protected media
KR100860447B1 (ko) 선택된 기능성을 갖는 오퍼레이팅 시스템 생성 및 이용을위한 방법 및 시스템
US6944867B2 (en) Method for providing a single preloaded software image with an ability to support multiple hardware configurations and multiple types of computer systems
US7689802B2 (en) Controlling memory access in a multi-booting system
US9804855B1 (en) Modification of temporary file system for booting on target hardware
US9239725B2 (en) System and method for installing an OS via a network card supporting PXE
US20090094447A1 (en) Universal serial bus flash drive for booting computer and method for loading programs to the flash drive
US11314523B2 (en) Master boot record (MBR)/global unique identifer (GUID) partition table (GPT) hybrid disk that includes GPT bootstrap code
US20080098381A1 (en) Systems and methods for firmware update in a data processing device
US8539214B1 (en) Execution of a program module within both a PEI phase and a DXE phase of an EFI firmware
US10664598B1 (en) Firmware security patch deployment
CN111258666A (zh) 计算机文件的读取方法、装置、计算机系统及存储介质
US9672047B1 (en) Systems and methods for accessing a bootable partition on a serial peripheral interface device
US20090013167A1 (en) Computer device, method for booting the same, and booting module for the same
US7565524B2 (en) Computer backup system at BIOS level
US7849300B2 (en) Method for changing booting sources of a computer system and a related backup/restore method thereof
US8499142B1 (en) UEFI boot loader for loading non-UEFI compliant operating systems
US20040243385A1 (en) Emulation of hardware devices in a pre-boot environment
US8612737B2 (en) System and method for supporting multiple hardware platforms with a single disk image

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