Linux 上掃描/檢測新的 LUN 和 SCSI 磁盤


背景

Linux 服務器中的磁盤可以分為本地磁盤和LUN(logical unit number),本地磁盤即為物理服務器的本地磁盤,或虛擬機的本地虛擬磁盤,而LUN是邏輯單元號,這是一個邏輯對象,所以很多時候被稱為Logical Device。在FC SAN中(還有IP SAN)它是遠端集中式存儲通過光交、光纖和主機端的HBA卡共享給服務器的邏輯磁盤,但看起來和本地磁盤沒有什么區別,訪問速度不輸本地磁盤。在以前解決了很多主機本地磁盤空間不足和需要共享磁盤的問題,如ORACLE RAC集群。

存在這樣的場景,就是存儲側划了新的LUN或擴容了虛擬磁盤,如何在 Linux 上掃描/檢測新的 LUNSCSI 磁盤呢?如果是新主機還沒有業務,那大可重啟系統識別新添加的設備,但大多數情況下主機上運行這業務,我們更希望在線操作,來保持業務的連續性。

這可以通過三種方式進行,掃描每個 scsi 主機設備或運行 rescan-scsi-bus.sh 腳本來檢測新磁盤。

掃描后可以在 /dev/disk/目錄下已不同的標識找到它們。

[root@irora01 ~]# ll /dev/disk/
total 0
drwxr-xr-x 2 root root 2480 Sep  2 03:00 by-id
drwxr-xr-x 2 root root 1980 Sep  2 03:00 by-path
drwxr-xr-x 2 root root  260 Sep  2 03:00 by-uuid

你還可以通過如下的命令發現新增的磁盤

fdisk -l
lsscsi
lsblk

對於LUN通常是有鏈路冗余的,所以同一磁盤(scsci_id相同)在主機上能看到4個或8個,一般需要使用多路徑軟件聚合后使用,多路徑軟件配合存儲可實現主備或負載形式提供存儲訪問。多路徑軟件有很多,不通廠商有各自的多路徑軟件,通用的為 multipath。對於 multipath 我們通常需要自定義聚合后的磁盤別名。使用multipath -ll命令可以查看多路徑。

[root@orarac01 ~]# multipath -ll
mpath06 (363c9d56100e06a30f694115300000092) dm-10 HUAWEI,XSG1
size=100G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 7:0:0:6  sdh  8:112  active ready running
|-+- policy='round-robin 0' prio=1 status=enabled
| `- 7:0:1:6  sdae 65:224 active ready running
|-+- policy='round-robin 0' prio=1 status=enabled
| `- 8:0:0:6  sdbb 67:80  active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
  `- 8:0:1:6  sdby 68:192 active ready running
mpath23 (363c9d56100e06a30f69487c7000000a3) dm-22 HUAWEI,XSG1
size=400G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 7:0:0:23 sdy  65:128 active ready running
|-+- policy='round-robin 0' prio=1 status=enabled
| `- 7:0:1:23 sdav 66:240 active ready running
|-+- policy='round-robin 0' prio=1 status=enabled
| `- 8:0:0:23 sdbs 68:96  active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
  `- 8:0:1:23 sdcp 69:208 active ready running

掃盤

方法 1

方法 1:如何使用 /sys 類文件在 Linux 上掃描新的 LUNSCSI 磁盤
sysfs 文件系統是一個偽文件系統,它為內核數據結構提供了一個接口。

sysfs 下的文件提供了關於設備、內核模塊、文件系統和其他內核組件的信息。

sysfs 文件系統通常被掛載在 /sys。通常,它是由系統自動掛載的。

你可以使用 echo 命令來掃描每個 SCSI 主機設備,如下所示:

# echo "- - -" > /sys/class/scsi_host/host[n]/scan

當你運行上面的重新掃描所有的命令時,三個破折號(- – -)指的是通配符選項。這些值如下:

# echo "c t l" > /sys/class/scsi_host/host[n]/scan

這里:

  • c:HBA 上的通道
  • t:SCSI 目標 ID
  • l:LUN ID
  • n:HBA 編號

運行命令ls -l /sys/class/scsi_host來查找系統中所有的主機總線編號:

[root@orarac01 ~]# ls -l /sys/class/scsi_host
total 0
lrwxrwxrwx 1 root root 0 Sep  2 03:00 host0 -> ../../devices/pci0000:00/0000:00:03.2/0000:03:00.0/host0/scsi_host/host0
lrwxrwxrwx 1 root root 0 Sep  2 03:00 host1 -> ../../devices/pci0000:00/0000:00:1f.2/host1/scsi_host/host1
lrwxrwxrwx 1 root root 0 Sep  2 03:00 host2 -> ../../devices/pci0000:00/0000:00:1f.2/host2/scsi_host/host2
lrwxrwxrwx 1 root root 0 Sep  2 03:00 host3 -> ../../devices/pci0000:00/0000:00:1f.2/host3/scsi_host/host3
lrwxrwxrwx 1 root root 0 Sep  2 03:00 host4 -> ../../devices/pci0000:00/0000:00:1f.2/host4/scsi_host/host4
lrwxrwxrwx 1 root root 0 Sep  2 03:00 host5 -> ../../devices/pci0000:00/0000:00:1f.2/host5/scsi_host/host5
lrwxrwxrwx 1 root root 0 Sep  2 03:00 host6 -> ../../devices/pci0000:00/0000:00:1f.2/host6/scsi_host/host6
lrwxrwxrwx 1 root root 0 Sep  2 03:00 host7 -> ../../devices/pci0000:40/0000:40:03.2/0000:45:00.0/host7/scsi_host/host7
lrwxrwxrwx 1 root root 0 Sep  2 03:00 host8 -> ../../devices/pci0000:40/0000:40:03.2/0000:45:00.1/host8/scsi_host/host8

查看FC通道

[root@orarac01 ~]# ls -l /sys/class/fc_host/
total 0
lrwxrwxrwx 1 root root 0 Sep  2 03:00 host7 -> ../../devices/pci0000:40/0000:40:03.2/0000:45:00.0/host7/fc_host/host7
lrwxrwxrwx 1 root root 0 Sep  2 03:00 host8 -> ../../devices/pci0000:40/0000:40:03.2/0000:45:00.1/host8/fc_host/host8

得到主機總線編號后,運行以下命令來發現新的磁盤:

# echo "- - -" > /sys/class/scsi_host/host0/scan
# echo "- - -" > /sys/class/scsi_host/host1/scan
# echo "- - -" > /sys/class/scsi_host/host2/scan

如果只是掃描LUN,從上面可以看出只需掃描host7、host8即可,當然不同主機上可能不一樣,要根據實際情況操作。

另外,還可以用 for 循環用一條命令全部進行掃描,不會有太大的問題。

# for host in ls /sys/class/scsi_host/;do echo "- - -" >/sys/class/scsi_host/${host}/scan; done

方法 2

方法 2:如何使用 rescan-scsi-bus.sh 腳本在 Linux 上掃描新的 LUNSCSI 磁盤
確保你已經安裝了 sg3_utils 包來使用這個腳本。否則,運行以下命令來安裝它。

對於 RHEL/CentOS 6/7 系統,使用 yum 命令安裝 sg3_utils。

# yum install -y sg3_utils

對於 RHEL/CentOS 8 和 Fedora 系統,使用 dnf 命令安裝 sg3_utils。

# dnf install -y sg3_utils

現在你可以使用 rescan-scsi-bus.sh 腳本重新掃描 LUN。

# ./rescan-scsi-bus.sh

方法 3

此操作執行循環初始化協議( LIP ),然后掃描互連並使 SCSI 層更新以反映當前總線上的設備。LIP 本質上是總線復位,會導致設備添加和移除。要在光纖通道互連上配置新的 SCSI 目標,必須執行此過程。請記住,這issue_lip是一個異步操作。該命令可能會在整個掃描完成之前完成。您必須監視/var/log/messages以確定何時完成。lpfcqla2xxx驅動程序支持issue_lip。有關 Red Hat Enterprise Linux 中每個驅動程序支持的 API 功能的更多信息,請參閱表 1.1,“光纖通道 API 功能”

echo "1" > /sys/class/fc_host/host[n]/issue_lip

以上命令本質上是初始化了HAB卡端口,必要時使用此類掃描,這種類型的掃描可能具有破壞性。本人就曾遇到過使用這種方式掃盤導致鏈路Down引發主機重啟的情況。
操作時可在messages中看到 FC Link Down/Up 相關信息。

Dec 28 00:13:15 orarac01 kernel: lpfc 0000:45:00.0: 0:1305 Link Down Event x4 received Data: x4 x20 x110 x0 x0
Dec 28 00:13:15 orarac01 kernel: lpfc 0000:45:00.0: 0:1303 Link Up Event x5 received Data: x5 x0 x20 x0 x0 x0 0
Dec 28 00:13:46 orarac01 kernel: rport-7:0-13: blocked FC remote port time out: removing rport
Dec 28 00:15:14 orarac01 kernel: lpfc 0000:45:00.1: 1:1305 Link Down Event x4 received Data: x4 x20 x110 x0 x0
Dec 28 00:15:14 orarac01 kernel: lpfc 0000:45:00.1: 1:1303 Link Up Event x5 received Data: x5 x0 x20 x0 x0 x0 0
Dec 28 00:15:46 orarac01 kernel: rport-8:0-13: blocked FC remote port time out: removing rport

有關技術預覽的更多信息,請參閱https://access.redhat.com/support/offerings/techpreview/。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM