存储 频道

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

【IT168 资讯】前面讲到了数据通路上的安全问题,本文就各种存储设备上数据流动的细节上作进一步的剖析,讲其中可能涉及的安全问题 (它应该被看作是一种广义的安全,包括传输安全,和存储安全;比如实现数据的可靠性,就是广义数据安全)。通常,存储设备中的细节都被封装为一个黑盒子,这里将其美妙设计,为你一一展示开来。

  一、存储的鼻祖----DAS

  在DAS存储中,最基本的设备就是磁盘;不管是传统的IDE (也就是PATA) 硬盘,还是其升级版本SATA; 或者是服务器领域的并行SCSI硬盘,还是最近火爆的SAS硬盘,甚至包括高端的FC硬盘。不管采用的接口如何变化,目前其架构无外乎都可以用图-1所示的模块来表示。

图-1 磁盘架构


  硬盘通常有三个模块组成:接口电路、Firware、盘片和机械控制电路。数据通过Cable到达接口电路,就是上面所说IDE、SATA、SCSI、FC接口,它完成对应协议相关物理电信号的转换和处理,得到相关的数据和命令。通常,硬盘采用的两种协议集:ATA和SCSI。其中IDE和SATA采用ATA协议集,而并行SCSI和串行SCSI,以及FC基本都采用SCSI协议集。为了加强接口电路的可靠性,FC硬盘中还采用了双端口技术。

  当数据通过了接口电路后,就由Firmware来处理,它会根据传递来的命令进行相关的处理,如果需要写入数据,则还要操纵机械控制电路将它们写入盘片。由于Firmware功能越来越强大,为硬盘加入了很多特性,比如命令队列,磁盘缓冲,数据加密设计等。

  最后数据通过机械臂写入到盘片,由于盘片可能因为某些坏块而导致数据丢失,或者数据写入错误。目前,有一种重定向技术,来解决这种问题;例如,写入到某数据块错误 (比如LBA地址 M ),Firmware可以将这个块的数据重新写入一个专用区域块;从而即使该块损坏,也可以通过Mapping,将坏块重定向到好的区域,并完成正常的读写操作。

  可见,在硬盘存储设备上,每一个模块都涉及到数据安全的细节设计。

 

  二、存储的扩展----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
相关文章