Linux LUN是存储领域中常见的术语,全称为Logical Unit Number,即逻辑单元号,是存储设备用来标识不同逻辑存储单元的唯一编号,在Linux系统中主要用于识别和访问存储阵列划分出的逻辑存储空间。

LUN的核心定义
LUN并不是实际的物理磁盘,而是存储阵列(如SAN存储)将物理磁盘池化后,划分出来的逻辑存储单元,每个LUN会被分配一个唯一的编号,主机系统通过这个编号来识别和访问对应的存储空间。
在SCSI架构中,一个SCSI目标设备(通常是存储阵列)可以包含多个逻辑单元,每个逻辑单元对应一个LUN,主机通过SCSI命令中的LUN字段来指定要操作的具体逻辑单元。
Linux系统中LUN的工作流程
Linux系统识别LUN的完整流程通常分为以下几个步骤:
- 存储管理员在存储阵列上创建LUN,并配置LUN的映射关系,将LUN绑定到指定主机的HBA卡WWN
- 主机HBA卡通过光纤或以太网连接到存储阵列,发送SCSI发现请求
- 存储阵列响应请求,返回已映射的LUN信息
- Linux系统的SCSI子系统识别到LUN后,将其映射为本地块设备,通常命名为/dev/sdX或者/dev/mapper/mpathX(多路径场景)
Linux下查看LUN的常用方法
通过/proc/scsi/scsi文件查看
该文件记录了系统识别到的所有SCSI设备信息,包含LUN相关信息,执行以下命令可以查看:
cat /proc/scsi/scsi
输出内容中,Attached devices部分会显示每个SCSI设备的型号、LUN编号等信息,例如:
Host: scsi0 Channel: 00 Id: 00 Lun: 00 Vendor: VMware Model: Virtual disk Rev: 2.0 Type: Direct-Access ANSI SCSI revision: 06
其中Lun: 00就是该设备的LUN编号为0。
通过lsscsi命令查看
lsscsi是更直观的SCSI设备查看工具,如果没有安装可以通过包管理器安装:
# CentOS/RHEL系统安装 yum install lsscsi -y # Ubuntu/Debian系统安装 apt install lsscsi -y
安装后执行lsscsi命令,输出如下:
lsscsi
[0:0:0:0] disk VMware Virtual disk 2.0 /dev/sda [1:0:0:1] disk HUAWEI S5600T 1.0 /dev/sdb
输出中第四列的数字就是LUN编号,比如[1:0:0:1]中的最后一个1就是该设备的LUN编号为1。
通过多路径工具查看
如果系统配置了多路径,可以通过multipath命令查看LUN对应的多路径设备信息:
multipath -ll
输出中会显示每个多路径设备对应的底层SCSI设备以及LUN信息,方便确认LUN的映射关系。
LUN和物理磁盘、分区的区别
| 对比项 | LUN | 物理磁盘 | 分区 |
|---|---|---|---|
| 本质 | 存储阵列划分的逻辑存储单元 | 实际的硬件存储设备 | 物理磁盘或LUN上的逻辑划分区域 |
| 存在位置 | 存储阵列端,主机通过网络访问 | 主机本地或直连 | 存储设备内部 |
| 编号方式 | SCSI逻辑单元号 | 无统一编号,靠系统识别顺序命名 | 靠分区表记录的分区号 |
| 容量来源 | 存储阵列的磁盘池 | 磁盘本身的物理容量 | 所属存储设备的剩余容量 |
Linux中使用LUN的常见注意事项
在Linux系统中使用LUN时,需要注意以下几点:
- LUN映射配置错误会导致主机无法识别LUN,需要确认存储端的映射规则是否和主机HBA卡信息匹配
- 多路径场景下需要正确配置multipath服务,避免同一个LUN被识别为多个本地块设备
- LUN扩容后,Linux系统需要执行扫描SCSI总线的操作才能识别新的容量,执行以下命令可以扫描:
# 扫描所有SCSI主机总线 for host in /sys/class/scsi_host/host*; do echo "- - -" > $host/scan; done
扫描完成后,可以通过fdisk -l或者lsblk命令确认LUN的容量是否已经更新。