RAID组的再划分
实际中,如果用5块100GB的磁盘做了一个RAID5,那么实际数据空间是400GB,剩下100GB是校验空间。如果将这400GB虚拟成一块盘,不够灵活,如果OS不需要那么大的磁盘呢。所以需要再次划分这400GB的空间,比如划分成4块100GB的逻辑磁盘,虽然容量也是100GB,但是不同于物理盘,向逻辑盘写一个数据会被RAID计算,而有可能写向多块物理盘,这样就提升了性能,同时也得到保护,纵使RAID组中坏掉一块盘,操作系统也不会感知到,它看到的仍然是100GB的磁盘。
同一通道中可以存在多种类型的RAID组
假设总线上连接有8块100GB的磁盘,我们可以利用其中的5块磁盘来做一个RAID 5,而后再利用剩余的3块磁盘来做一个RAID 0,这样,RAID 5的可用数据空间为400GB,校验空间为100GB,RAID 0的可用数据空间为300GB。而后,RAID 5和RAID 0各自的可用空间,又可以根据上层OS的需求,再次划分为更小的逻辑磁盘。
操作系统如何看待逻辑磁盘
目前各种RAID卡都可以划分逻辑盘,逻辑盘大小任意设置。每个逻辑盘对于OS来说都认成一块单独的物理磁盘。逻辑盘和分区不一样,分区是OS在一块物理磁盘(或逻辑磁盘)上做的再次划分。而RAID卡提供给OS的,任何时候,都是一块或者几块逻辑盘,也就是OS认成的物理磁盘。而OS在这个磁盘上,还可以进行分区、格式化等操作。
RAID控制器如何管理逻辑磁盘
RAID卡对磁盘进行再次划分,需要在每块磁盘上保留一个区域,专门记录逻辑盘的划分信息、RAID类型以及组内的其他磁盘信息等,这些信息统称为RAID信息。不同厂家、不同品牌的产品实现起来不一样,SNIA委员会为了统一RAID信息的格式,专门定义了一种叫做DDF的标准。
RAID卡可以针对总线上的某几块磁盘做一种RAID类型,然后针对另外的几块磁盘做另一种RAID类型。一种RAID类型中包含的磁盘共同组成一个RAID Group,简称RG。逻辑盘就是从这个RG中划分出来的,原则上逻辑盘不能跨RG来划分,就是说不能让一个逻辑盘的一部分处于一个RG,另一部分处于另一个RG。因为RG的RAID类型不一样,其性能也就不一样,如果同一块逻辑盘中出现两种性能,对上层应用来说不是件好事,如果速度可能会忽快忽慢等。
卷管理层
卷管理器(Volume Manager,VM)是基于OS层面,将OS识别到的物理磁盘(可以是真正的物理磁盘,也可以是经过RAID卡虚拟化的逻辑磁盘)进行组合,并再次分配的软件。
PV:LVM将操作系统识别到的物理磁盘(或者RAID控制器提交的逻辑磁盘)改了个叫法,叫做Physical Volume,即物理卷。
VG:多个PV可以被逻辑地放到一个VG中,也就是Volume Group卷组。VG是一个虚拟的大存储空间,逻辑上是连续的,尽管它可以由多块PV组成,但是VG会将所有的PV首尾相连,组成一个逻辑上连续编址的大存储池,这就是VG。
PP:也就是Physical Partition(物理区块)。它是在逻辑上再将一个VG分割成连续的小块。LVM会记录PP的大小(由几个扇区组成)和PP序号的偏移。这样就相当于在VG这个大池中顺序切割,如果设定一个PP大小为4M,那么这个PP就会包含8192个实际物理磁盘上的扇区。如果PV是实际的一块物理磁盘,那么这些扇区就是连续的。如果PV本身是已经经过RAID控制器虚拟化而成的一个LUN,那么这些扇区很有可能位于若干条带中,也就是说这8192个扇区物理上不一定连续。
LP:PP可以再次组成LP,即Logical Partition(逻辑区块)。逻辑区块是比较难例解的,一个LP可以对应一个或多个PP。前者对应前后没什么区别,后者又分两种情况:一种为多个PP组成一个大LP,像RAID 0一样;另一种是一个LP对应几份PP,这几份PP每一份内容都一样,类似于RAID 1,多个PP内容互为镜像,然后用一个LP来代表它们,往这个LP写数据,也就同时写入了这个LP对应的几份PP中。
LV:若干LP再经过连续组合组成LV(Logical VoLUNme,即逻辑卷),也就是LVM所提供的最终可用来存储数据的单位。生成的逻辑卷,在主机看来还是和普通磁盘一样,可以对其进行分区、格式化等。
卷管理软件就是运行在OS操作系统磁盘控制器驱动程序之上的一层软件程序,它的作用就是实现RAID卡硬件管理磁盘空间所实现不了的灵活功能,比如随时扩容。卷管理软件对待由RAID卡提交的逻辑盘(OS识别成物理磁盘)和切切实实的物理盘的方法是一模一样的。也就是说不管最底层是单物理盘,还是由RAID控制器提交的逻辑磁盘,只要OS认为它是一块物理盘,那么卷管理器就可以对它进行卷管理。
卷管理软件首先将物理盘或RAID提交的逻辑盘进行物理卷划分(PV划分),然后将若干物理卷(PV)组成卷组(VG),然后对卷组配置最小分配单位,即物理分区(PP)或逻辑分区(LP),然后在卷组空间中再次划分逻辑卷(LV)。也就是说,卷组是所有逻辑卷的划分空间,卷管理软件把所有磁盘抽象成各个卷组空间,在卷组空间内进行逻辑卷划分,而物理分区是对逻辑卷进行数据存储的最小操作单位,类似于扇区对于磁盘。
低级VM和高级VM
分区管理可以看做是一种最简单的卷管理方式,它比LVM要低级。分区是将一块物理盘抽象成一个仓库,然后将这个仓库划分成一区和二区等分区。
把一个大的磁盘划分成小的分区,有两种方式:
1、用低级VM管理软件,比如Windows自带的磁盘管理器,对磁盘进行分区
2、用高级VM管理软件,将磁盘做成卷,然后灵活的进行划分逻辑卷。
这两种方法都可以达到将一个大的磁盘划分成多个小的分区的效果。不同的是分区管理这种低级的VM管理方式,只能针对单个磁盘进行划分,而高级的VM卷管理软件可以将多个磁盘合并后再划分。
MBR和VGDA
分区信息被保存在分区表中,分区表位于磁盘0磁道0磁头的0号扇区上,也就是LBA1这个地址的扇区上。这个扇区又叫做MBR,即主引导记录。MBR扇区不仅仅保存分区表,它还保存了BIOS跳转时所需要执行的第一句指令代码,所以才叫做主引导记录。BIOS代码都是固定的,它每次必定要执行LBA1扇区上的代码。MBR中除了包含启动指令代码,还包含分区表。通常启动时,程序都会跳转到活动分区去读取代码做OS的启动,所以必须有一个活动分区。这在分区工具中可以设置。
高级卷管理软件在划分了逻辑卷之后,一定要记录逻辑卷是怎么划分的,比如LVM就需要记录PV的数量和信息、PP的大小、起始位置及LV的数量和信息等。这些信息都要保存在磁盘上,所以要有一个数据结构来存储。这个数据结构LVM用VGDA来描述。每次启动系统,VM就是通过读取这些数据来判断目前的卷情况并挂载LV的。不管是MBR中的分区表还是VGDA数据结构,一旦这些信息丢失,逻辑卷信息就会丢失,整个系统的数据就不能被访问。
低级的VM在给磁盘分区的时候,会更新MBR中的分区表;高级VM做逻辑卷的时候,同样也会更新VGDA中的数据。其实高级VM初始化一组新磁盘的时候,并没有抛弃MBR,因为它们除了写入VGDA信息之外,也要更新MBR扇区中的分区表,将用于启动基本操作系统的代码单独存放到一个小分区中,并标明分区类型为bootable类型,证明这个分区是用于在卷管理模块还没有加载之前启动操作系统的。并将磁盘所有剩余容量划分到一个分区中,并标明这个分区的类型。
总之,高级VM没有抛弃MBR分区的解决方案,而是在MBR基础上,又增加了类似VGDA这种更加灵活的数据结构来动态管理磁盘。