无lvm的操作系统访问基于lv卷的存储设备的方法

文档序号:6575209

专利名称::无lvm的操作系统访问基于lv卷的存储设备的方法
技术领域
:本发明涉及一种无LVM的操作系统访问基于LV巻的存储设备的方法。
背景技术
:LVM,逻辑盘巻管理(LogicalVolumeManager),是目前Linux操作系统下提供的一种在零停机前提下可以自如对文件系统的大小进行调整,方便实现文件系统跨越不同磁盘和分区的一个解决方案。LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如将若干个磁盘分区连接为一个整块的巻组(VolumeGroup),形成一个存储池。管理员可以在巻组上随意创建逻辑巻(LV,LogicalVolumes),并进一步在逻辑巻上创建文件系统。管理员通过LVM可以方便的调整逻辑巻的大小,并且可以对磁盘存储按照巻组的方式进行命名、管理和分配。基于LVM机制在磁盘建立的LV巻,在磁盘扇区起始位置是没有分区表的。Linux是靠自己特有的LVM机制,来区别和操作磁盘上不同的LV巻的。当一个没有LVM机制的操作系统,例如Windows操作系统,访问一个由LVM机制管理的磁盘时,它是找不到分区的。也就是说,如果一个没有LVM机制的主机,如安装Windows操作系统的计算机,直接对该磁盘分区地址访问,是得不到分区信息的,即无法识别该f兹盘。例如,对于采用LVM才几制的USB移动^更盘,接入安装Windows操作系统的计算机后,Windows操作系统是无法识别出该移动硬盘LV巻的。
发明内容有鉴于此,本发明的主要目的在于提供一种无LVM的操作系统访问基于LV巻的存储设备的方法,以实现无LVM操作系统的主机可以直接识别基于LVM机制在磁盘上所建立的LV巻。本发明提供一种无LVM的操作系统访问基于LV巻的存储设备的方法,包括步骤A、构造一具有主引导扇区的虚拟磁盘;B、将虛拟磁盘的各个存储地址映射到所要访问的LV巻的各个存储地址;C、对虛拟/磁盘的存储地址进行访问时,访问该存4诸地址所映射到的LV巻的存储地址。由此可知,通过在基于LVM机制的磁盘上构造一具有主引导扇区的虚拟磁盘,可以使无LVM操作系统的主机识别并访问基于LVM才几制的》兹盘。上述的方法中,其特征在于,步骤A中构造所述主引导扇区的虚拟磁盘的步骤包括Al、申请特定字节的内存緩冲区作为虚拟磁盘的虚拟主引导扇区;A2、对所创建的虚拟主引导扇区进行赋值以使所述虚拟磁盘可访问。由此可知,申请特定字节的内存緩冲区作为虚拟磁盘的虚拟主引导扇区,利用设备已有硬件资源,不用额外增加硬件,低成本消耗下实现较方便地生产或改装基于LVM机制的磁盘。上述的方法中,其特征在于,步骤A2所述对所创建的虚拟主引导扇区进行赋值包括获取LV巻的主引导记录扇区的主引导记录启动程序和启动字符串,并赋值给所述虚拟主引导扇区的主引导记录启动程序和主引导记录启动字符串;根据磁盘结构对虚拟磁盘分区表进行赋值。由此可知,利用已有Linux下的系统函数获取LV巻的主引导记录扇区的主引导记录启动程序和启动字符串,并赋值给所述虚拟主引导扇区的主引导记录启动程序和主引导记录启动字符串,可以构造出虛拟磁盘分区的主引导记录启动程序和启动字符串。上述的方法中,其特征在于,所述对虚拟磁盘分区表进行赋值包括将包含的表示虚拟磁盘分区开始的扇区地址的字节设置为表示虚拟i兹盘分区开始的扇区地址;将包含的表示虚拟磁盘分区占用的总扇区数的字节设置为LV巻所占扇区数目与所申请的特定字节的内存緩冲区所占扇区数之和。由此可知,对虚拟》兹盘分区开始的扇区地址的字节i殳置,以及对虚拟磁盘分区占用的总扇区数的字节设置,可以构造出虚拟磁盘主引导分区的开始扇区地址和总扇区数。上述的方法中,其特征在于,所述对虚拟磁盘分区表进行赋值包括将包含的表示虚拟磁盘分区引导标示的字节设置为表示非活动分区;将包含的表示虚拟磁盘分区开始地址格式的字节设置为表示非CHS格式;将包含的表示虚拟磁盘分区的类型的字节设置为表示分区类型为fat32文件系统;将包含的表示虚拟磁盘分区结束地址格式的字节设置为表示非CHS格式;由此可知,上述虚拟分区表具有较好磁盘分区表格式,其值可被灵活地设置。上述的方法中,其特征在于,所述LV巻所占扇区数目采用如下方式获得获取LV巻的所占的字节数;根据下述公式计算LV巻所占扇区数LV巻所占扇区数=乙V巻的所占的字节数/512。由此可知,利用上述公式计算出LV巻所占扇区数,能进一步推出虚拟磁盘分区占用的总扇区数。上述的方法中,其特征在于,所述步骤B包括Bl、根据虚拟磁盘分区表中表示虚拟磁盘分区开始的扇区地址作为虚拟》兹盘分区起始地址;B2、根据获取的各个丄V巻所占扇区数目计算出各个LV巻所占存储设备的存储地址数;B3、以所述虚拟磁盘分区起始地址为偏移量,将虚拟磁盘分区该起始地址后的各个存储地址依次映射到所述各个LV巻的存储地址。由此可知,可以将虚拟磁盘的各个存储地址映射到所要访问的LV巻的各个存储地址。上述的方法中,其特征在于,步骤C所述访问为读取时,所述访问的步骤包括C71、计算实际访问的LV巻扇区的起始地址,包括实际访问LV—A巻扇区的起始地址=(请求读的扇区地址-127)x512;C72、由计算出的实际访问LV巻扇区的起始地址,根据所述读取指令中的所读取字节长度进行读取。由此可知,才艮据虚拟》兹盘与LV巻之间的良好映射,可以通过访问虚拟磁盘的存储地址,间接对该存储地址所映射到的LV巻的存储地址进行读操作。上述的方法中,其特征在于,步骤C所述访问为写数据时,所述访问的步骤包括C81、计算实际访问LV巻扇区的起始地址,包括实际访问LV—A巻扇区的起始地址=(请求写的扇区地址-127)x512;C82、由计算出的实际访问LV巻扇区的起始地址,将所述写数据指令中的数据进行写入LV巻中。由此可知,才艮据虚拟石兹盘与LV巻之间的良好映射,可以通过访问虚拟磁盘的存储地址,间接对该存储地址所映射到的LV巻的存储地址进行写操作。图1为LVM巻组管理的磁盘中的LV巻与虚拟磁盘映射关系示意图2为通过USB总线访问基于LVM巻组的磁盘中的分区的流程图3为虚拟磁盘存储空间与LV巻存储空间的映射关系图;图4为读取LV巻的磁盘的流程图;图5为写LV巻的磁盘的流程图。具体实施例方式对于没有LVM机制的操作系统,如Windows操作系统(本实施方式将以此为例),访问磁盘时是以其所规定的逻辑扇区寻址方式访问磁盘,由于与基于LVM机制在》兹盘上创建LV巻方式不同,因而无法直接访问所述^兹盘上创建的LV巻。本发明在所述基于LVM机制管理的磁盘中设置一具有LVM机制的系统程序(如基于Linux的程序),由所述程序通过创建一虚拟磁盘建立磁盘上的LV巻与Windows才乘作系统访问的逻辑扇区的映射关系,实现Windows才喿作系统可通过所述虚拟》兹盘访问磁盘上的LV巻。其中,所述i兹盘可以为安装有Linux系统程序的移动硬盘,或者为安装Linux系统的移动播放装置,如基于Liunx系统的MP3/MP4硬盘播放器等。首先对如图1示出的基于LVM机制管理的磁盘中的LV巻与虚拟磁盘映射关系进行说明,包括磁盘101:表示物理存储介质,可为硬盘、移动硬盘、U盘(或称闪存盘)等;逻辑巻组(LVM,LogicalVolumeGroup)102:是指在一个或多个》兹盘101分区中划出一片区域组成的逻辑巻组空间。LVM巻组类似于非LVM系统中的物理磁盘,其由物理巻(物理巻是LVM的基本存储逻辑块,指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备,如RAID)组成;逻辑巻(LV,LogicalVolume)103:是从LVM巻组中划出的一片空间组成一个独立的巻,即LV巻。LV巻的空间要小于LVM巻组中可以使用的空间,LV巻必须归属于一个LVM巻组。LV巻类似于非LVM系统中的石更盘分区,在LV巻上可以建立文件系统,如ext2、ext3、reiserfs、ntfs文件系统等;虛拟磁盘104:本发明中用于将一个以上的LV巻虚拟组成的一个虚拟的i兹盘;USB接口层105:表示由USB设备(USBDEVICE)芯片所组成的一个逻辑中间层;它有自己的逻辑扇区寻址空间,与磁盘的实际逻辑扇区寻址空间——对应;负责接收主机发送过来的命令,解析其命令,并执行其操作,从磁盘中读取扇区数据返回给主机或将主机发送过来的数据写入指定扇区;主机106:本例中为安装Windows操作系统(如Windows98、WindowsXP、WindowsNT、WinCE等操作系统)的设备,如PC机或笔记本电脑。如图2示出了安装Windows操作系统的主机106通过USB总线访问基于LVM机制在磁盘上创建的LV巻103的流程图,当接收所述主机106对磁盘101访问的指令后,扭j亍以下步骤步骤201:根据预先设计的分区表结构,创建一虚拟主引导扇区,并创建虚拟磁盘104的分区表。具体包括首先,静态申请一个65024字节(虚拟》兹盘104前127块扇区,每块扇区512字节,一共512x127字节)的内存緩冲区(iovst—mem—partition),其中前512字节,即第一个扇区作为虚拟主引导扇区,存放创建的虚拟磁盘分区表。其中,所创建的虚拟主引导扇区地址如下表1所示进行分配:<table>tableseeoriginaldocumentpage11</column></row><table>然后,对所创建的虚拟主引导扇区进行赋值。具体包括主引导记录启动程序和启动字符串的赋值调用Linux操作系统提供的vfs_read函数,获取磁盘101上LV巻103的第一个扇区数据,即主引导记录扇区(MBR,MasterBootRecorder),然后将获取的主引导记录扇区的数据(即LV巻103的第一个扇区数据)赋值给所述虚拟主引导扇区,具体包括将第一个LV巻103的第一个扇区数据的主引导纪录启动程序和启动字符串分别赋值给所创建的虚拟主引导分区表的主引导纪录启动程序和启动字符串。保留域的赋值保留域填充为零。磁盘分区表域,即虚拟磁盘分区表,由4个分区表组成,每个分区具有16字节,此处釆用分区O,其赋值如下虚拟磁盘分区表分区0的第0字节(用来表示虚拟磁盘104分区引导标示)设置为0x0,表示将此分区设置为非活动分区;虚拟磁盘分区表分区0的第1~3字节(用来表示虛拟磁盘104分区开始地址的CHS格式)设置为0x0,表示不采用CHS格式,固将其设置为零;虚拟磁盘分区表分区0的第4字节(用来表示虚拟磁盘104分区的类型)设置为0xc,表示分区类型为fat32文件系统;虚拟磁盘分区表分区0的第5~7字节(用来表示虚拟磁盘104分区结束地址的CHS格式)设置为0x0,表示不采用CHS格式,固将其设置为零;虚拟》兹盘分区表分区0的第8~11字节(用来表示虚拟i兹盘分区104开始的扇区地址)设置为Ox80,表示分区开始的扇区地址为0x80;虚拟磁盘分区表分区0的第1215字节(用来表示虚拟磁盘104分区占用的总共的扇区数)设置为LV巻103的实际所占扇区数目与所申请的127块扇区之和。比如,本实施例一共有三个LV巻103,其名称分别为LV一A巻、LV—B巻和LV_C巻,各巻总共的所有扇区数=LV—A巻的扇区数目+LV—B巻的扇区数目+LV—C巻的扇区数目+127。其中,对于虛拟磁盘104分区所占扇区数目的获取,将在下文进行描述。主引导纪录有效标记的赋值设置为Oxaa55,表示分区表结束标记。至此,所创建的虚拟主引导扇区赋值完毕。另外,对于内存緩冲区其他126块扇区,即第2—127块扇区,其值也填充为零,用于作为保留区域。对于上文提到的虚拟磁盘104分区所占扇区数目的获取步骤,包括以下步骤首先,调用Linux内核系统函数flip—open,打开LV巻103(LV巻103以一文件方式存在);然后,调用Linux内核系统函数i—size_read获取LV巻103的所占字节多少,即LV巻103的文件长度file—length(LV—A与LV—B、LV_C的文件长度之和);并由LV巻103文件长度计算出LV巻103的所占总共扇区l丈目num—sectors=file—length/512;从而,计算出虚拟磁盘104的所占字节多少,即虚拟磁盘104的所占字节=file—length+127x512;以及计算出虚拟磁盘104的所占扇区数目=num—sectors+127。这里的127即所申"i青的虚拟f兹盘104前127块扇区。步骤202:根据虚拟磁盘分区表中提供的表示虚拟磁盘分区开始的扇区地址作为起始地址,即将从虚拟磁盘第128块扇区开始,根据各个LV巻的扇区实际数量进行偏移计算,将虚拟磁盘104第128块以后的扇区存储空间映射到所要访问的各个LV巻103的各个存储空间。具体参见如图3示出的虚拟磁盘104存储空间与LV巻103存储空间的映射关系,其中虚拟磁盘104的地址表示如下内容OxOOOOOOx001FF:即步骤201所建立的表示虚拟磁盘104的第1块扇区(扇区0),为构建的虚拟主引导扇区,由512个字节组成;0x002000x0FFFF:即步骤201所建立的表示虚拟》兹盘104的第2~127块扇区(扇区1—126),为保留区域,全部用零填充;Oxl0000(0xl0000+MAX_A-1):即本步骤建立的表示虚拟磁盘104的数据存储空间的第一部分,按照一对一的关系直接映射到实际的LV一A巻的存储空间中;其中映射到的LV_A巻存储空间地址为0~(MAX—A-l);(0xl0000+MAX—A)~(0xl0000+MAX—A+MAX—B-1):即本步骤建立的表示虚拟磁盘104的数据存储空间第二部分,按照一对一的关系直接映射到实际的LV—B巻的存储空间中;其中映射到的LV—B巻存储空间地址为0(MAX—B-l);(OxlOOOO+MAX—A+MAX—B)~(0xl0000+MAX_A+MAX—B+MAX—C-l):即本步骤建立的表示虚拟磁盘104的数据存储空间的第三部分,按照一对一的关系直接映射到实际的LV—C巻的存储空间中;其中映射到的LV—C巻存储空间地址为0~(MAX_C-1)。步骤203:当安装Windows系统的主机106访问所述LV巻103的磁盘101时,通过访问所建立的虚拟磁盘104的存储空间的方式,访问所映射到的各个LV巻103的存储空间,实现对该具有LV巻的磁盘101的数据读耳又或写入等操作。下面以读写为例对主机106访问LV巻103的^兹盘101的过程进行详细说明当建立完所述虚拟》兹盘104,主才几106通过USB总线发送READCAPABILITY命令给USB接口层105后,USB接口层105将虚拟磁盘104所占扇区数作为最大逻辑扇区数返回给主机。如图4示出的读取LV巻103的磁盘101的流程图,主机106通过USB总线发送读命令时,将所要读的扇区地址和所读的长度给USB接口层105;USB接口层105解析此命令,识别出为读操作并解析出请求读的扇区地址和长度,之后包括以下步骤步骤2031:判断请求读的扇区地址大于或等于虚拟磁盘104的最大扇区数时,则返回越界访问错误码,程序返回,否则执行下一步。步骤2032:判断请求读的扇区地址等于0(即第一个扇区)时,进行如下操作,否则执行步骤2033。步骤2032a:判断若请求读的长度等于0或大于127时,返回越界访问错误码函数返回;否则执行下一步。步骤2032b:判断请求读的长度等于1时,将构造出的虚拟磁盘分区表返回给主机106;否则执行下一步。步骤2032c:执行此步骤时,则请求读的长度大于1且小于127,由于第一个扇区(O扇区)为构造出的虚拟磁盘分区表,1到127扇区长度的内容全部用零填充,故将填充的O数据返回给主机106。步骤2033:判断请求读的扇区地址大于0且小于等于分区开始的扇区数127,则将填充的O数据返回;否则执行下一步。步骤2034:l丸行此步骤时,则请求读的扇区地址大于分区开始的扇区数127,进行如下操作步骤2034a:请求读的扇区地址-虚拟》兹盘分区开始的扇区地址,然后将其差值乘以512,最终将会得到实际读访问LV一A巻扇区的起始地址;步骤2034b:根据实际读访问LV_A巻扇区的起始地址,读取所述长度的数据返回给主机106。这里说的是,本文中扇区地址的单位例如第n扇区,所述扇区起始地址的单位是物理地址。参见图5示出的写LV巻103的磁盘101的流程图,主机106通过USB总线发送写命令时,将所要写的扇区地址和所要写的数据给USB接口层105;USB接口层105解析此命令,识别出为写操作并解析出请求写的扇区地址和数据,之后包括以下步骤步骤20301:如果请求写的扇区地址大于或等于虚拟磁盘104的最大扇区数时,则返回越界访问错误码,程序返回;否则执行下一步。步骤20302-20303:如果请求写的扇区地址等于0或请求写的扇区地址大于0且小于等于127时,USB接口层105忽略此写操作,程序返回;否则,执行步骤20304的如下操作。步骤20304a:请求写的扇区地址-虚拟磁盘分区开始的扇区地址,然后将其差值乘以512,最终将会得到实际写LV一A巻扇区的起始地址;步骤20304b:将要写入的数据从实际写LV—A巻扇区的起始地址开始写入。对于多个LV巻103,如LV—B,LV_C:实际访问LV—B巻的扇区起始地址=(请求访问的扇区地址-虚拟石兹盘分区开始的扇区地址-LV—A巻的最大扇区数)x5i2;实际访问LV—C巻的扇区起始地址=("i貪求访问的扇区地址-虚拟》兹盘分区开始的扇区地址_LV—A巻的最大扇区数-LV—B巻的最大扇区数)x512。以此类推,可以计算出多个巻存在时的实际访问地址。由上可以看出,通过建立的虚拟磁盘104与LV巻103存储空间的的映射关系,当Windows系统的主机需要访问LV103巻的存储空间时,其访问所建立的虚拟磁盘104即可实现访问所映射到的LV103巻的存储空间的数据。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明。例如本实施例以安装Windows操作系统的设备作为实施例进行说明,也可以是安装其他无LVM机制的操作系统的设备,如手机、DVD机所使用的操作系统等。另外,以上虽然以USB接口为例进行说明,是考虑到以LV巻的磁盘作为移动硬盘为例。不难理解,也可以是其他接口,如串口、并口、1394火线接口等。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。权利要求1.一种无LVM的操作系统访问基于LV卷的存储设备的方法,其特征在于,包括A、构造一具有主引导扇区的虚拟磁盘;B、将虚拟磁盘的各个存储地址映射到所要访问的LV卷的各个存储地址;C、对虚拟磁盘的存储地址进行访问时,访问该存储地址所映射到的LV卷的存储地址。2.根据权利要求1所述的方法,其特征在于,步骤A中构造所述主引导扇区的虛拟磁盘的步骤包括Al、申请特定字节的内存緩冲区作为虚拟磁盘的虚拟主引导扇区;A2、对所创建的虚拟主引导扇区进行赋值以使所述虚拟磁盘可访问。3.根据权利要求2所述的方法,其特征在于,步骤A2所述对所创建的虚拟主引导扇区进行赋值包括获取LV巻的主引导记录扇区的主引导记录启动程序和启动字符串,并赋值给所述虚拟主引导扇区的主引导记录启动程序和主引导记录启动字符串;根据磁盘结构对虚拟磁盘分区表进行赋值。4.根据权利要求3所述的方法,其特征在于,所述对虚拟磁盘分区表进行赋值包括将包含的表示虚拟磁盘分区开始的扇区地址的字节设置为表示虚拟i兹盘分区开始的扇区地址;将包含的表示虚拟磁盘分区占用的总扇区数的字节设置为LV巻所占扇区数目与所申请的特定字节的内存緩冲区所占扇区数之和。5.根据权利要求4所述的方法,其特征在于,所述对虚拟磁盘分区表进行赋值包括将包含的表示虚拟磁盘分区引导标示的字节设置为表示非活动分区;将包含的表示虚拟磁盘分区开始地址格式的字节设置为表示非CHS格式;将包含的表示虚拟磁盘分区的类型的字节设置为表示分区类型为fat32文件系统;将包含的表示虚拟磁盘分区结束地址格式的字节设置为表示非CHS格式。6.根据权利要求4所述的方法,其特征在于,所述LV巻所占扇区数目釆用如下方式获得获取LV巻的所占的字节数;根据下述公式计算LV巻所占扇区数LV巻所占扇区数二LV巻的所占的字节数/512。7.根据权利要求4、5或6所述的方法,其特征在于,所述步骤B包括Bl、根据虚拟i兹盘分区表中表示虚拟i兹盘分区开始的扇区地址作为虚拟万兹盘分区起始地址;B2、根据获取的各个LV巻所占扇区数目计算出各个LV巻所占存储设备的存储地址数;B3、以所述虚拟》兹盘分区起始地址为偏移量,将虚拟磁盘分区该起始地址后的各个存储地址依次映射到所述各个LV巻的存储地址。8.根据权利要求7所述的方法,其特征在于,步骤C所述访问为读取时,所述访问的步骤包括C71、计算实际访问的LV巻扇区的起始地址,包括实际访问LV—A巻扇区的起始地址=(请求读的扇区地址-127)x512;C72、由计算出的实际访问LV巻扇区的起始地址,根据所述读取指令中的所读取字节长度进行读取。9.根据权利要求7所述的方法,其特征在于,步骤C所述访问为写数据时,所述访问的步骤包括C81、计算实际访问LV巻扇区的起始地址,包括实际访问LV—A巻扇区的起始地址=(请求写的扇区地址-127)x512;C82、由计算出的实际访问LV巻扇区的起始地址,将所述写数据指令中的数据进行写入LV巻中。全文摘要本发明提供了一种无LVM的操作系统访问基于LV卷的存储设备的方法,包括构造一具有主引导扇区的虚拟磁盘;将虚拟磁盘的各个存储地址映射到所要访问的LV卷的各个存储地;对虚拟磁盘的存储地址进行访问时,访问该存储地址所映射到的LV卷的存储地址。使用本发明,解决无LVM机制的操作系统无法识别基于LVM的存储装置,即实现无LVM操作系统的主机可以直接识别基于LVM机制在磁盘上所建立的LV卷。文档编号G06F3/06GK101609393SQ20091008947公开日2009年12月23日申请日期2009年7月21日优先权日2009年7月21日发明者勇刘申请人:北京数帅科技有限公司
再多了解一些
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1