存储子系统的元素包括:磁盘、磁盘控制器、存储网络、磁盘阵列、卷管理层、目录虚拟层、文件系统虚拟层。我们就从下到上,一一描述这几个元素,看看存储了系统楚怎么抽象虚拟的。
1.磁盘控制器
磁盘控制器的工作就是根据驱动程序发来的磁盘读写信息,向磁盘发送SCSI指令和数据。这个部件看似没有什么可抽象虚拟的东西,其实磁盘控制器完全可以对其驱动程序隐藏其下挂的物理磁盘,而虚拟出一个或者多个虚拟磁盘。由控制器来完成虚拟磁盘和物理磁盘的映射和抽象虚拟。RAID就是一个点型代表,控制器将物理磁盘组成RAID Group,然后在RG的基础上,虚拟出多个LUN,通告给主机驱动。
2.存储网络
早期的存储子系统,没有网络化,而目前的存储系统,网络化己经作常彻底。从磁盘到磁盘阵列控制器,从磁盘阵控制器到主机总线适配器,都已经嵌入了网络化元素。比如使用FC协议或者TCP/IP协议、SAS协议、Infiniband协议等。那么在这一层上,有什么可以抽象的么?网络化只是为部件之间提供了一种可扩展的传输通路而已,貌似在这个层面上不能做出于什么大文章来。
实则不然,这一层也是有所深究的。在交换式SAN中,不管是基于TCP/IP协议的还是基于FC协议的SAN ,网络中的任何节点都是通过交换设备来互相通信,这是节点间通信的必经之路。如果在交换设备上做点手脚,就完全可以达到虚拟化的效果。
要抽象一种逻辑,那么一定要理解这种逻辑,所以我们可以在FC交换机或者以太网交换机上,嵌入SCSI协议感知模块。比如某个N节点向另一个N节点Report LUN的时候,交换机收到这个Frame,则可以感知这个N节点的LUN信息。如果此时网络中还有另个节点的LU N信息,则可以在交换机这一层。达到这两个节点的LUN的镜像.也就是说,SCSI发起设备向目标设备传输的数据,经由交换机的时候,交换机内嵌的虚拟化模块,会自动复制对应的帧到另一个节点的LUN 上,让这两个LUN形成镜像,当其中一个节点故障的时候,交换机因为知道此时还有一个备份镜像LUN存在,所以并不会向发起者通告失败,而是默默的将发起者的数据重定向到这个镜像的LUN,发起设备并不会感知,这样,就达到了基于网络层的虚拟化抽象。
当然,网络层的虚拟化,并不只是镜像,比如将某些N节点的LUN合并成一个池,然后动态的从这个池中再划分出虚拟LNN,向发起者报告等。基于这些思想,己经开发出了智能FC交换机。
3.磁盘阵列
磁盘阵列可以说本身就是一个小计算机系统(JBOD除外),这个系统五脏俱全,是对存储子系统的抽象虚拟化最佳的表现。磁盘阵列,简要地说,就是将大量磁盘进行组织管理,抽象虚拟,最终形成虚拟的逻辑磁盘,最后通过和主机适配器通信,将这些逻辑磁盘呈现给主机。这个功能和前面提到的磁盘控制器的功能类似,但是磁盘阵列能比狭义的磁盘控制器提供更多的特色功能,况且简单的插在主机IO总线上的那种RAID磁盘控制器,其接入磁盘数量有限.功能也有限。
大型磁盘阵列,有自己的控制器。有的利用嵌入式技术.将特别定制的操作系统及其核心管理软件嵌入芯片中,来管理艳个控制器并实现其功能;有的则干脆利用现成的上机来充当盘阵控制器的角色,比如IBM的DS8000系列盘阵,内部就是用的两台IBM P系列小型机作为其组织管理磁盘的控制器,其上运行AIX操作系统和相应的存储管理软件。
不管是嵌入式,还是主机式的,盘阵控制器所担任的角色都是类似的。这个中心控制器,不直接参与连接每块磁盘,而是利用后端适配器来管理下挂的磁盘,由后端适配器向其上级汇报。
这些适配器,就是由中心控制器驱动的二级磁盘控制器,这些磁盘控制器作为中心CPU的IO适配器,直接控制和管理物理磁盘,然后由中心控制器统一实现RAID,卷等高级功能(有些盘阵则可以将简单的RAI D功能直接下放给几级控制器来做)。后端适配器与中心控制器CPU之间通过某种总线技术连接,比如PCIX、PCIE总线等。中心控制器对这些磁盘进行虚拟抽象之后,通过前端的接口.向最终使用它的主机进行通告。中心控制器不但可以实现最基本的RAI D功能,而且可以实现很多高级功能,比如LUN镜像、快照、远程复制、CDP数据保护、LUN再分配等。在磁盘阵列上实现虚拟化,是目前最广泛的一种存储系统虚拟化形式。
4.卷管理层
卷管理层是指运行在应用主机h的功能模块。它负责底层物理磁盘或者LUN的收集和再分配。经过盘阵控制器虚拟化之后生成的LUN提交给主机使用,主机可以对这些LUN进行再次抽象和虚拟,也就是重复虚拟化,比如对其中两个LUN进行镜像处理,或者对其中的多个LUN,做成一个软RAID系统。再或者将所有LUN合并.形成一个大的资源池,然后像掰面团一样所成多个卷,这个过程和磁盘控制器。盘阵控制器所做的虚拟化动作类似,但是这个动作是在主机上实现的。典型的卷管理软件有LVM,或者第三方的软件,比如Veritas公司的VxVM。
5.文件系统
数据只是存储到磁盘上就完了么?显然不是。打个比方,有位记者早晨出去采访,乎中拿了一攘纸,他母看到一件事就记录下来。对于“怎么将字写在纸上”这个问题,他是这么解决的,他用笔在格子上写字,写满一行再写下一行。还不够就换一张纸。对于“怎么让白己在纸上写字”,这个问题,是他自己通过大脑〔控制器〕,通过神经网络(SCSI线缆〕,操纵白己的手指〔磁头臂〕,拿着笔〔磁头〕,看见有格了,就向里写。这两个问题都解决了。。可是这一天下来,他回去想看看一天都发生了什么,他拿出记录纸,却发现,信息都是零散的,根本无法阅读,有时候读到一半,就断了,显然当时是因为格了不够用了,写到其他地方了,造成了信息记录的不连续,有的地方还有删除线,证明这一块作废了,那么有效的记录到底在哪里昵?记者方寸大乱,数据虽然都完好的一记录在纸上,但是他们都是不连续的、凌乱的,当时是部记下来了,但是事后想要读取时却没辙了。
磁盘记录也一样,只解决磁盘怎么记录数据和怎么让磁盘记录数据,是远远不够的,还应该考虑“怎么组织磁盘上的数据”。
还是用这个记者的例子来说明。我们都能想到,将凌乱的记录组织成完整的一个记录,只需要在相应的地方做一下标记,比如“此文章下一段位于某某页,第几行”。就像路标一样,一次一次的指引你最终找出这个完整的数据,这个思想称为“链表”。
如果将这个链表单独的做成一个记录,存放到固定位置,每次只要参考这个表,就能找出条数据在磁盘上的完整分布情况。利用这种思想做出来的文件系统,比如FAT文件系统,它把每个完整的数据称为文件。文件可以在磁盘上不连续的存放,由单独的数据结构来描述这个文件在磁盘上的分布。这个数据结构就是文件分配表。File Allocate Table,也就是FAT的由来。或者用另一种思想来组织不连续的数据,比如NTFS,它是直接给出了一个文件在磁盘上的具体扇区,开始一结束,开始一结束。用这样的结构来描述文件的分布情况。
文件系统将磁盘抽象成了文件柜,同一份文件可能存放在一个柜子的不同抽屉中,利用一份特别的文件来记录“文件——对应抽屉”的分布情况,这些用来描述其他文件分布情况及其属性的文件,称为元文件(Metadata)。元文件一般情况下要存放在磁盘的固定位置,而不能将其分散,因为最终要有一个绝对参考系统。但是有些文件系统,甚至将元文件也可以像普通文件一样。在磁盘上不连续的分布。前面还说过一定要有一个绝对参考系统,也就是固定的入口,所以这些特殊的文件系统,其实最上层还是有一个绝对参考点的,这个参考点将生成元文件/在磁盘上的分布情况记录,从而定位元文件,再根据元文件,定位数据文件,这样一层一层的嵌套,最终形成文件系统。
最终一句话,文件系统是对磁盘块的虚拟、抽象、组织和管理。用户只要访问一个个的“文件”,就等于访问了磁盘扇区。而访问文件,这个动作是非常容易理解的,也是很简单的。用户不必了解这个文件最终在磁盘上是存放到哪里,怎么存放的,怎么访问磁盘来存放这个文件.这些统统都是由文件系统和磁盘控制器驱动程序来做。
6.目录虚拟层
不管是Windows系统、UNIX系统,还是Linux系统.其内部都有一个虚拟的日录结构。在Linux中叫做VFS, 即Virtual File System。
虚拟文件系统,顾名思义也就是说这个文件系统目录并不是真实的,而是虚拟的。任何实际文件系统,都可以挂载到这个目录下,真实FS中的真实目录,被挂载到这个虚拟目录下之后,就成为了这个虚拟目录的子目录。这样做的好处是增强灵活性。其次,操作系统目前处理外部设备,一般都将其虚拟成一个虚拟文件的方式,比如一个卷,在Linux中就是/dev/hda这种文件。对这个文件进行读写,就等于直接对设备进行了读写。
存储户系统的虚拟化,可以在“磁盘——盘阵控制器——存储网络——主机总线适配器——卷管理层——文件系统层——虑拟目录层和最终应用层”各个环节的虚拟抽象工作,使得鼓终应用软件,只要通过文件系统访问文件,就可以做到访问放底层的磁盘一样的效果。有时候还可以重复虚拟化。
核心关注:拓步ERP系统平台是覆盖了众多的业务领域、行业应用,蕴涵了丰富的ERP管理思想,集成了ERP软件业务管理理念,功能涉及供应链、成本、制造、CRM、HR等众多业务领域的管理,全面涵盖了企业关注ERP管理系统的核心领域,是众多中小企业信息化建设首选的ERP管理软件信赖品牌。
转载请注明出处:拓步ERP资讯网http://www.toberp.com/
本文标题:存储子系统的虚拟化