存储 频道

融合之道二:存储设备上的漫漫征途

  二、存储的扩展----NAS

  2.1 基于Linux的NAS

  在中低端NAS领域,可以采用定制的LINUX+SATA作为平台来进行设计,如图-2所示。尽管SATA采用ATA协议集,但是在LINUX下由于SCSI驱动架构比IDE架构 (专门用于IDE硬盘) 扩展能力强,所以还让SATA跑在SCSI架构下面。

图-2 采用Linux构建NAS


  在Linux下SCSI驱动架构,自下而上主要分为三层,分别是SCSI Lower Level驱动、SCSI Middle Level驱动,和SCSI Upper Level驱动。最下面是SCSI Lower Level驱动,它和系统提供的Libata模块协作,让各种SATA HBA能够正常的运行,因为系统提供的Libata是按照SATA的规范来抽象出一些共有的东西,所以对于不同的SATA HBA只要去做自己相关的事情,这样就像流水线那样,分工明确,责任清晰,从而也更加易于扩展。

  对于SCSI Middle Level驱动,它就像一个中央管理者,负责探寻下面各个SATA HBA上连接的硬盘,并向上层驱动汇报,同时将上层发下来的读写请求转化为对应的某个磁盘上对应的块读写操作。它就像一个调度者,负责协调上下模块之间的动作,在整个SCSI驱动架构中扮演重要的角色。而基于最上层的SCSI Upper Level驱动,就是针对各种SCSI设备而专门设计,对于磁盘就是通常的sd_mod.o模块。该模块一个最直观的功能就是向系统报告设备名,Linux系统中众所周知的/dev/sda, /dev/sdb, /dev/sdc等设备名就是由它来完成的。

  当通过SCSI驱动架构的处理,RAW设备就呈现出来;但是在RAW设备基础上的直接构建卷和文件系统,其可靠性不高,扩展性不强,不能加入很多有特色的元素。因此通常可以在RAW设备上提供一个卷管理软件,如MD (软件RAID), 它除了支持常规的各种RAID外, 还加入了对RAID6的支持,并且被加入到内核中;从而,使得对于MD的部署和管理更加方便。当然,也有采用基于MD的LVM, EVMS, VxVM等,它们能提供更为强大的功能。

  当构建完底层的卷之后,那么就可以设计文件系统了。文件系统,说得简单点,就是一个大管家,它把你的资料统一管理起来;例如,你不知道某张图片放在哪个磁盘的某个位置,只需要告诉大管家,要看这个文件,那么它就会把该图片取出来。当然,对于文件系统来说,最怕系统崩溃,所以在现代的文件系统设计中都加入了日志功能,对于Linux来说就是常用的Ext2, Ext3。

  当这些基础设施都准备好后,再加入上层的应用模块,这样用Linux构建的本地系统已经可以正常工作了。但是,要做NAS,就要把这个本地系统和外界连接起来,这时候NFS或CIFS就担当起这个重要的职责的桥梁。通过这些网络文件系统,就可以把本地的文件系统装载到远程去,完整地实现NAS功能。

  上面所涉及到的各个模块,在Linux下都有良好的支持,通过对Linux内核的定制,以及对各种应用程序的适当选择就可以完成;尽管看起来很容易,但实际上在整个通路上的安全问题,是由很多底层的设计人员解决掉封装好,所以用户了解不到。

  2.2基于Windows的NAS

  针对Linux在这方面的应用,Windows也设计了对应的NAS涉及解决方案,如图-3所示。和Linux构建NAS对比,可以发现在架构设计上很多是相通的,毕竟操作系统的兴旺发达还是从各个大牛们啃UNIX开始的。

图-3 基于Windows的NAS设计


  从图-3中的最底层开始,其中的MiniPort Driver和Linux下的SCSI Lower Level驱动功能类似,同样Windows中也有SCSI Port Driver来完成Linux SCSI Middle Level驱动的工作,上面的Disk Class Driver基本和sd_mod.o完成的工作一样;

  在它们之上和文件系统之间,windows放入了一个PSM Filter Driver,它和用户模式下的PSM组件一起完成Snapshot的功能;而这些功能,可以在Linux的卷管理模块,如LVM中完成。其上面就是Microsoft专有的NTFS,它本身也是一个日志文件系统;再加上CIFS网络文件系统,一个基于Windows的NAS就横空出世了。

0
相关文章