逻辑盘,有一个问题,就是一旦划分好就无法改变,要改变也只能把数据全部抹掉,重新配置;
基于此问题,就产生了 虚拟化逻辑磁盘的概念;
RAID控制器是硬件底层实现RAID,实现逻辑盘,所以操作起来不灵活;
OS层会把RAID控制器提交上来的逻辑盘,认成是不折不扣的物理磁盘; 如果在OS层,再把RAID控制器提交上来的逻辑盘加以组织、再分配(也就是虚拟化),因为OS层上运行的都是软件,完全靠CPU,这样就会变得非常灵活 ; 基于这种思想下开发的产品,统称为 卷管理器,Volume Manager,VM;
知名的卷管理器,Volume Manager,VM有:
微软: LDM,逻辑磁盘管理;
vertas: 用于自己产品的VxVM,Veritas Volume Manager; 用于linux、AIX,HPUS的 LVM,logical volume manager; 用于sun solaris的 Disk Suite;
LVM是应用最广泛的;包括 PV,VG,PP,LP,LV;
分区的地位;
分区管理,可以看作是最简单的卷管理方式,他比LVM要低级一些;
如果把一块磁盘比作一个仓库,分区就是把仓库分成具体的一库区,二库区; 因为一个大仓库对用户来说很不方便;
对于低级VM的分区管理来说, 必须有一个东西记录分区信息,比如 一库区里是整个仓库的哪些房间,这个信息表是保存在仓库本身的一个房间,这个房间就叫做MBR; 也就是分区信息保存在分区表,分区表存放在一个固定的扇区,LBA1,这个扇区叫做MBR,主引导记录;
文件系统的管理进化史
把磁盘比作一个大仓库;磁盘驱动器驱动软件,比作是库管员;
1、文件系统的诞生----仓库理货员
早期没有文件系统,应用程序都自己管理磁盘,随便往仓库里面存放数据,容易造成数据浪费,数据之间容易冲突、覆盖,极为混乱;
所以要找一个仓库理货员,来记录所有应用程序存放的记录,存放什么粮食,存放了哪些房间;
2、簇的诞生
理货员给每个仓库准备了一个记录表; 理货员不需要关系具体房间在仓库的位置,怎么把粮食存放到仓库,这些库管员会来处理;
理货员只需要知道,送过来了什么货物,存放的房间号;
比如,程序1来存放白菜,理货员就记录:”白菜 512斤 房间号3“
程序2来存放粮食,理货员就记录: ”大米 1000斤 房间号4-1024“ ,但是如果大米存放的很多,有上万斤,那么房间号记录会变得很长;
由此,就引出,将多个房间号划分为一个逻辑空间,叫做”簇“ ; 比如8个房间为一个簇,这样空间的记录,就只有1/8 了;
3、链表概念的产生
因为不断的存入和取出;导致仓库的存放零零散散; 如果按照顺序将每个人粮食存放到各个簇,他以下取走,簇就空了,如果其他人来存粮食,如果存不下,还得额外找连续簇;所以这里的解决方案只能是,不一定非得连续存放在仓库。
因为现在 存放数据最小单位以簇来计算,那么就可以记录为: ” 冬瓜 1000斤 簇2、6、9“;表示存放的时候时,是按顺序存放到仓库的2号簇、6号簇、9号簇;
当然取出的时候,也是按顺序去除,先取2号簇,然后是6号簇,9号簇;
这样取货慢一点,但是没有空间浪费;
4、存储空间管理——位示图法
虽然按照之前的方法记录解决了空间问题,但是因为每个人存放的货物数量不一样,记录的长短也就不一样;
而且存放多了之后,记录增到后就很难查询;
还一个重要问题,就是要找到一个空闲的簇,就需要把所有占用的簇都站出来才行,然后再去选择一个没有被占用的簇,这个过程非常耗时;
要解决记录长度不一的问题,由此产生了 链表的方法; 就是参考路标的方式,我只需要描述货物占用的第一个簇,在簇中记录下一个标记,写明下一个簇的号码,然后到下一个簇取货;比如记录:“冬瓜 1000斤 簇1”,然后簇1中记录下一个标签“簇10”;
但是没解决寻找空闲簇的问题,那就换一种数据格式记录;
把整个仓库的簇都画出来,从第一个簇到最后一个簇,都用一个方格标识; 然后参照:“冬瓜 1000斤 簇1” ,如果下一个簇是簇10, 那么在簇1上记录簇10; 如果簇10的下一个是簇90,那么在簇10上记录簇90;
这样所有的关系都记录好了,而且空闲块也可以很容易就找到了;
这个图表,其实有点类似 “位示图法”,只不过位示图:每个二进制位对应一个盘块。如“0”代表盘块空闲,“1”代表盘块已分配。
记录空闲簇,还有一种“空闲i链表法”,以盘块为单位组成一条空闲链,每个空闲盘块中存储着下一个空闲盘块的指针。适合连续文件;
5、房间变多
簇是系统可以识别的最小单位。也就是对于文件,占用的簇数量都是整数,也就是不会有两个文件占用一个簇的情况发生。每个簇可以包括2、4、8、16、32或64个扇区。显然,簇是操作系统所使用的逻辑概念,而非磁盘的物理特性。
随着现在货物越来越多,动则几千上万斤,簇的号码也越来越大;以前的格子中,用于记录号码的位数就不够了; 所以记录簇号码的标记位由原来的 2Byte,变成了现在的4Byte;
6、优化
随着仓库性能的不断提升,仓库硬件方面的效率速度提升很快;那么仓库管理的软件算法,也要持续更新,才能适应不断优化的硬件;
经过观察,货物即使存放在不连续的簇中,这些簇也有局部是连续的;那存放货物时,如果不是一个簇一个簇的去找路标,而是一段一段的去找,那么就会节约很多时间;
微软将这些记录信息,叫做 metedata,元数据; 也就是用来描述其他数据是怎么组织存放的一种数据; 如果记录丢失,虽然仓库中的货物完好,但是也无法取出,因为已经不知道货物的组织结构了;
微软总共由3中仓库运作的管理模式,分表叫做: FAT16,FAT32,NTFS;
取货时,只需要告诉文件系统(理货员),文件名称,所要取出的长度和一些其他选项,理货员就可以在仓库中取出这些数据了;