LUN---Logical Unit Number

本文介绍了LUN(逻辑单元号)的基本概念及其在存储系统中的作用。LUN用于扩展SCSI总线上的设备标识能力,使得能够管理和描述更多的存储资源。文章还解释了LUN在不同上下文中的含义,并对比了存储系统与主机中LUN的区别。
 

LUN的概念

  LUN的全称是Logical Unit Number,也就是 逻辑单元号。我们知道SCSI总线上可挂接的设备数量是有限的,一般为6个或者15个,我们可以用Target ID(也有称为SCSI ID的)来描述这些设备,设备只要一加入系统,就有一个代号,我们在区别设备的时候,只要说几号几号就ok了。
  而实际上我们需要用来描述的对象,是远远超过该数字的,于是我们引进了LUN的概念,也就是说LUN ID的作用就是扩充了Target ID。每个Target下都可以有多个LUN Device,我们通常简称LUN Device为LUN,这样就可以说每个设备的描述就有原来的Target x变成Target x LUN y了,那么显而易见的,我们描述设备的能力增强了。就好比,以前你给别人邮寄东西,写地址的时候,可以写:
  xx市 人民大街54号 xxx(收)
  但是自从高楼大厦越来越多,你不得不这么写:
  xx市人民大街54号xx大厦518室 xxx (收)
  所以我们可以总结一下,LUN就是我们为了使用和描述更多设备及对象而引进的一个方法而已,一点也没什么特别的地方。

LUN是什么东西

  LUN ID不等于某个设备,只是个号码而已,不代表任何实体属性,在我们的实际环境里,我们碰到的LUN可能是磁盘空间,可能是磁带机,或者是media changer等等。
  LUN的神秘之处(相对于一些新手来说)在于,它很多时候不是什么可见的实体,而是一些虚拟的对象。比如一个阵列柜,主机那边看作是一个Target Device,那为了某些特殊需要,我们要将磁盘阵列柜的磁盘空间划分成若干个小的单元给主机来用,于是就产生了一些什么逻辑驱动器的说法,也就是比Target Device级别更低的逻辑对象,我们习惯于把这些更小的磁盘资源称之为LUN0、LUN1、LUN2…什么的。而 操作系统的机制使然,操作系统识别的最小存储对象级别就是LUN Device,这是一个逻辑对象,所以很多时候被称为Logical Device。
  有人说,我的Windows里,就认到一个磁盘呀,没看到什么LUN的说法,是不是LUN=Physical Disk呢?回答是否定的,只要你注意,磁盘的属性里就可以看到有一个LUN的值,只是因为你的Disk没有被划分为多个存储资源对象,而将整个磁盘当作 一个LUN来用,LUN ID默认为零,如此而已。
  我们曾经碰到过这样的问题,比如有人问,我们有一个磁盘阵列,连到了两个主机上,我们划分了一个LUN给两个主机认到,然后我们想,先在操作系统将磁盘分为两个分区,让两个主机分别使用两个分区,然后再出现某一台主机宕机之后,使用集群 软件将该分区切换到另外一个主机上去,这样可行吗?答案也是否定的,集群软件操作的磁盘单元是LUN,而不是分区,所以该操作是不可行的。当然,在一些环境,一般也是一些要求比较低的环境,可以在多个主机上挂载不同的磁盘分区,但是这种情况下,实际上是没有涉及到磁盘的切换的,所以在一些高要求的环境里,这种情况根本就不允许存在。
  还要说明的地方是,在有些厂商和有些产品的概念里,LUN ID被绑定到了具体的Device上,比如IBM的一些带库,整个带库只有一个Target ID,然后changer,tape drive被分别分配为LUN0、LUN1、LUN2…,但是我们要注意到,这只是产品做了特别设计,也是少数情况。

存储和主机的LUN概念区别

  还有很多新手总是把阵列里面的磁盘和主机的内部磁盘的一些概念搞混淆了。
  在磁盘阵列和磁带库大行其道的时代,存储越来越智能化,越来越像一个独立的机器,实际上存储和主机的电气独立本来就是一个必然趋势,俗话说得好,儿大要分家嘛。在存储越来越重要的时代,存储要自立门户是必然的事。
  如果我们把存储当作一个独立的主机来看,理解起来就很简单了。我们说到LUN的概念的时候,我们就要将分为两个层面。一个层面就是在阵列这个机器的OS识别到的范围,另一个层面就是服务器的OS识别到的范围。这两个层面是相对独立的,因为如果我们把存储当作一个主机来看,那么它自然有自己的Device、Target、LUN之说,而服务器也有自己的Device、Target、LUN之说;另外一方面,这两个层面又是相互关联的,一个阵列的控制系统,大多都有虚拟化的功能,阵列想让主机看到什么样的东西,主机才能看到相应的东西。当然,服务器识别到的最小的存储资源,就是LUN级别的。那么主机的HBA 卡看到的存储上的存储资源就靠主要两个东西来 定位,一个就是 存储系统的控制器(Target),一个就是LUN ID,这个LUN是由存储的控制系统给定的,是存储系统的某部分存储资源。
在计算领域,特别是在硬件和网络协议中,“unit address specification”通常用于描述对设备或接口的地址配置方式。虽然该术语可能不会直接出现在所有技术文档中,但其核心概念可以与内存映射、寄存器寻址、网络接口配置等场景相关联。 ### 内存映射中的 Unit Address Specification 在操作系统和嵌入式系统中,**unit address** 可以指代某个硬件单元(如外设寄存器)在内存空间中的基地址。例如,在设备树(Device Tree)或 ACPI 表中,硬件模块的地址范围被定义为 `reg` 属性,其中包含起始地址和长度: ```dts uart0: serial@1a4000 { compatible = "arm,pl011"; reg = <0x1a4000 0x1000>; }; ``` 这里的 `0x1a4000` 就是该 UART 设备的 unit address,表示它在内存中的起始位置 [^3]。 ### 网络接口中的 Unit Address 在网络协议栈中,unit address 可能与 MAC 地址或 IP 接口配置相关。例如,Linux 系统中可以通过 `ip link` 查看网络接口的 MAC 地址,这是该接口的唯一物理层标识符: ```bash ip link show eth0 # 输出示例: # link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff ``` 这种地址可视为网络接口的 unit address,用于链路层通信 [^1]。 ### 操作系统内核中的 Unit Address 使用 在 Linux 内核中,某些驱动程序通过 unit address 来区分多个相同类型的设备实例。例如,串口设备 `/dev/ttyS0` 到 `/dev/ttyS3` 分别对应不同的 I/O 地址或 MMIO 基址,这些地址在初始化时由平台代码或设备树提供 [^3]。 ### SCSI 和 存储设备中的 Unit Address 在存储子系统中,SCSI 协议使用“Logical Unit Number (LUN)”来标识一个设备内的不同逻辑单元,这也可以被视为一种 unit address specification。例如,一个磁盘阵列可以暴露多个 LUN,每个 LUN 对应一个独立的逻辑磁盘 [^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值