linux lun指的是Linux系统中识别到的逻辑单元号,是存储设备分配给主机的逻辑存储单元标识,通常对应外部存储阵列划分出的一个逻辑卷,在Linux系统中会被识别为块设备供用户使用。

什么是LUN
LUN的全称是Logical Unit Number,即逻辑单元号,是SCSI协议中用来标识存储设备内不同逻辑单元的一个编号。当外部存储阵列(比如SAN存储)划分出多个逻辑卷后,会通过存储映射的方式把这些逻辑卷分配给不同的服务器主机,每个分配给主机的逻辑卷都会对应一个唯一的LUN ID,服务器识别到这个逻辑单元后就会产生对应的设备节点。
Linux系统中LUN的表现形式
在Linux系统中,识别到的LUN通常会被内核识别为SCSI块设备,设备节点一般存放在/dev目录下,常见的命名规则如下:
- 如果是传统的SCSI设备命名,会显示为/dev/sdb、/dev/sdc这类形式,和本地磁盘的命名规则一致
- 如果是使用设备映射器的多路径场景,会显示为/dev/mapper/mpathX或者/dev/dm-X的形式
- 部分场景下也会通过/dev/disk/by-id/目录下的符号链接来标识,链接名称中会包含LUN的相关标识信息
查看Linux系统中LUN信息的方法
使用lsscsi命令查看
lsscsi命令可以列出系统中所有的SCSI设备信息,包括LUN对应的设备,执行以下命令可以查看详细信息:
# 安装lsscsi工具,CentOS/RHEL系统 yum install -y lsscsi # Ubuntu/Debian系统 apt install -y lsscsi # 列出所有SCSI设备,包含LUN信息 lsscsi -l
输出结果中,每一行对应一个SCSI设备,其中会显示设备的LUN编号、厂商信息、设备型号以及对应的/dev设备节点路径。
通过/proc/scsi/scsi文件查看
系统的/proc/scsi/scsi文件也记录了所有SCSI设备的信息,执行以下命令可以查看:
cat /proc/scsi/scsi
输出内容中会包含每个SCSI设备的Attached devices信息,其中LUN的编号会显示在对应的设备条目中。
使用multipath命令查看多路径LUN
如果服务器配置了存储多路径,可以使用multipath命令查看多路径对应的LUN信息:
# 查看多路径设备列表 multipath -ll
该命令会输出每个多路径设备对应的底层SCSI设备,以及对应的LUN ID和状态信息。
Linux LUN和本地磁盘的区别
| 对比项 | Linux LUN | 本地磁盘 |
|---|---|---|
| 存储位置 | 外部存储阵列,通过网络(FC、iSCSI等)连接 | 服务器本地挂载的物理磁盘 |
| 设备标识 | 由存储阵列分配LUN ID,可能随映射关系变化 | 由服务器本地磁盘控制器识别,通常固定 |
| 可靠性 | 通常支持RAID、快照、远程复制等存储高级特性 | 依赖本地磁盘的RAID配置,高级特性较少 |
| 扩容方式 | 可以在存储阵列侧直接扩容,无需停机 | 通常需要添加物理磁盘或者更换大容量磁盘 |
常见问题说明
有时候Linux系统识别到LUN之后,无法看到对应的设备节点,可能是以下原因导致:
- 存储侧没有正确配置主机映射,没有把LUN分配给当前服务器
- 服务器的HBA卡或者iSCSI服务没有正常启动,无法和存储建立连接
- 系统内核没有加载对应的SCSI驱动模块,需要手动加载对应的驱动
如果遇到LUN容量变化之后系统没有识别到新容量的情况,可以执行以下命令让系统重新扫描SCSI总线:
# 扫描所有SCSI主机总线,刷新设备信息 echo "- - -" > /sys/class/scsi_host/hostX/scan
其中hostX需要替换为实际的SCSI主机编号,可以通过ls /sys/class/scsi_host/命令查看系统中存在的SCSI主机列表。