In some cases, you may need to find a block device mapped against a logical unit number (LUNs) for filesystem (FS) expansion or disaster recovery (DR) activity.
Also, this information is required if you want to work with the storage team to troubleshoot or fix a high latency or disk error on a specific block device.
Refer the following article to map ASM disks against storage LUNs.
This information can be found at the following location. However, you will not find mapping details for multipath LUNs because it shows the name of the multipath device instead of the block devices.
ls -ltrh /dev/disk/by-id
Therefore, since there is no direct command to find this information in Linux, this can be achieved by writing a small shell script, which we will discuss further in this article.
In this article, we will show you how Disks mapped to SAN LUNs in Linux.
Shell Script to check SAN disk LUN id in Linux
This shell script helps you to identify which SAN disk LUN id is assigned to which OS Underlying disk on Linux.
In this shell script we are using the lsblk command and smartctl command to achieve the results.
vi block_device_mapping_with_LUN.sh #!/bin/bash echo "Device_Name" "|" "LUN_ID" echo "---------------------" for lunmap in `lsblk | grep disk | grep ^s | awk '{print $1}'` do echo -e "$lunmap \t--> $(smartctl -a /dev/$lunmap | grep "Logical Unit id" | awk -F":" '{print $2}')" done
Set an executable permission to ‘block_device_mapping_with_LUN.sh’ file.
chmod +x block_device_mapping_with_LUN.sh
Finally run the script to view the results.
sh block_device_mapping_with_LUN.sh Device_Name | LUN_ID --------------------- sda --> sdb --> 3600d0230000000000e1140463955737c sdc --> 3600d0230000000000e114046395577cd sdd --> 3600d0230000000000e11404639558cc5
If you want to run the script on a single line instead of the steps above, use the below one. This one liner script will map Linux system disks against storage LUNs as shown below.
echo "Device_Name" "|" "LUN_ID"; echo "---------------------"; for lunmap in `lsblk | grep disk | grep ^s | awk '{print $1}'`; do echo -e "$lunmap \t--> $(smartctl -a /dev/$lunmap | grep "Logical Unit id" | awk -F":" '{print $2}')"; done Device_Name | LUN_ID --------------------- sda --> sdb --> 3600d0230000000000e1140463955737c sdc --> 3600d0230000000000e114046395577cd sdd --> 3600d0230000000000e11404639558cc5
Checking SAN disk LUN mapping using lsscsi command in Linux
lsscsi stands for list small Computer System Interface. The lsscsi command lists information about SCSI/Sata devices attached to the system.
The command below will display a list of LUNs attached to the system, their block devices mapping and size.
lsscsi --scsi --size [0:0:0:0] disk VMWare Virtual disk 2.0 /dev/sda - 60.3GB [0:0:2:0] disk EMC SYMMETRIX 6544 /dev/sdb 3600d0230000000000e1140463955737c 16.1GB [0:0:3:0] disk EMC SYMMETRIX 6544 /dev/sdc 3600d0230000000000e114046395577cd 16.1GB [0:0:4:0] disk EMC SYMMETRIX 6544 /dev/sdd 3600d0230000000000e11404639558cc5 16.1GB
Wrapping Up
In this tutorial, we’ve shown you to identify/check/match LUN presented from SAN with underlying OS disk on Linux.
If you have any questions or feedback, feel free to comment below.
Hi,
change lunmpa to lunmap from following commands
do echo “$lunmap \t–> $(smartctl -a /dev/$lunmpa | grep “Logical Unit id” | awk -F”:” ‘{print $2}’)”
————-
Hi Jalal,
Good catch and typo has been updated. Thank you.