复杂度2/5
机密度3/5
最后更新2021/04/30
LUN(Logical Unit Number)是scsi专用概念,指在同一SCSI设备(同SCSI ID)下映射的逻辑子设备。这来自最早SCSI设备是总线结构,可以支持一个或两个initiator,多个target。由于寻址SCSI设备依靠SCSI ID,而每个SCSI总线做多支持16个设备(最多15个target)。如果每个Target只能定位一个磁盘,那么一条SCSI总线仅仅能连接15个磁盘,这对现在动辄几十甚至上百磁盘的服务器设备,远远不足。为了超越原始SCSI标准的局限,后续的SCSI标准推出了子设备:LUN的概念,即一个SCSI ID下可以挂接最多65535个LUN设备,而每个LUN可以是一块磁盘,也可以是一个CD-ROM或带机。由于最常使用的SCSI设备是磁盘,我们通常把LUN与磁盘等同,一个LUN就是一块SCSI磁盘。另外,SCSI现在并不仅仅是物理SCSI设备,好多新型设备都依托于SCSI协议,而物理层及链路层采用其它方案,非原始SCSI标准的电路连接。例如基于光纤的FC设备,实际上是通过光纤通道传输,最终设备访问协议也是SCSI。
LUN磁盘(现在可能是物理磁盘,存储阵列虚拟的逻辑磁盘,介质可能是铁磁机械设备,也可能是SSD这种电子电路设备,在AIX操作系统最终都被驱动程序识别为一种磁盘设备)在AIX上,首先对应为一个hdisk(其实还有可能被识别为pdisk暂时略过),hdisk有两种使用方案:被加到VG(Volume Group)中,成为PV(Physical Volume);被应用程序直接访问(一般被称为裸设备,取其不被OS管理包装,直接赤裸使用之意)。裸设备与PV没什么区别,只是由谁对磁盘空间进行管理,如果由AIX管理,则以PV形式存在;如果被特定应用程序管理,则被叫做裸设备,例如由Oracle数据库的ASM进行磁盘管理。
PV存在的意义是将磁盘的大小、类型等物理特性屏蔽掉与VG配合,使其抽象为由同样大小的PP(Physical Partition)空间块组成的存储池。一个VG就是一堆PP,使用者不用考虑PP来自哪个PV即磁盘。
在PP基础之上,把特定一组PP组织在一起,就变成一个特定大小的存储空间,被称为LV(Logical Volume),在LV这一层,AIX加如了诸如镜像、条块化等能力,使得上层对LV使用与支持LV的PV之间实现隔离,下层可以通过增删镜像实现对上层透明的数据迁移;可以利用镜像实现对物理设备的故障冗余,实现数据保护;可以利用条块,实现类似RAID0的能力;同时采用镜像和条块技术,则达到了RAID10的效果。
有一些应用软件自身没有提供很强的磁盘管理能力,但并不需要AIX提供文件系统管理功能,则也可能直接使用LV这种物理块集合,在这种用法下,LV也被称为裸设备。事实上,LV裸设备的使用方式早于直接使用磁盘裸设备的方式。无论是磁盘裸设备还是LV裸设备,他们的使用概念是相同的,因为应用程序读写裸设备采用的访问协议是SCSI协议,定位数据和读写数据使用的是SCSI LBA(Logical Block Address)和SCSI CDB(Control Data Block结构)。换句话说,直到此层面,AIX对这些设备的管理其实是在SCSI地址和数据之间进行转换,通过各种LV到PP,PP到PV,PV到hdisk之间的映射关系,把应用程序的访问地址,转换为对应hdisk上的某个位置。
下一层面(其实上上层,这个排列是倒过来的),AIX引入了文件系统,一般都是JFS2文件系统。由于文件系统的加入,对存储设备访问发生了一次大变化,使用的通信协议由SCSI转换为file IO,即对文件的open/close,seek,read,write等等。与之对应,对SCSI设备的访问是open/close, ioctl, read/write等操作,虽然看起来差不多,编程实现时的差距其实非常大。
操作系统对设备管理进行分层,其目的不仅是为管理,更要实现隔离,实现抽象和透明化,使上层访问无需考虑下层的变化,而下层的变化也能不影响上层——这是操作系统存在的最大意义。
一个课外题,Unix,包括Linux和AIX,对任何设备的管理都抽象为文件,那么AIX是如何识别各个文件的不同呢?它怎么知道这个文件对应的设备是磁盘,另一个设备对应的是网卡?这全依赖于统一的ioctl调用的devinfo请求。具体来说,对所有的设备(驱动)都应该提供ioctl功能,这个功能至少要支持一个devinfo的请求参数,当对设备文件进行ioctl devinfo query的时候,设备驱动要返回标准的devinfo信息块,此块内需要包含对该设备的最基础描述,包括主设备类型,子设备类型等等,然后通过AIX设备驱动编程标准的对应关系,访问者就能知道所访问的设备文件对应的物理设备是何种类型,应该如何管理。
又一个课外题,文件系统文件也支持ioctl么?怎么识别普通文件和设备文件?识别文件和设备的答案再此:-)