轉載請在文首保留原文出處:EMC中文支持論壇https://community.emc.com/go/chinese
介紹
本系列文章系統、全面地介紹了Linux 的SCSI設備管理機制和整套操作命令。包括以下六大主題:
Linux SCSI子系統概述
Linux主機LUN識別
動態SAN網絡重配
LUN發現步驟
Linux設備命名
SCSI磁盤限制
附:SCSI磁盤問題識別與解決方法
作爲系列之二,本文主要介紹LUN發現步驟和Linux設備命名兩大主題,解答用戶常見問題乳:Linux驅動除了LUN 0以外,沒有自動配置其他LUN怎麼辦?Linux磁盤的命名規則是什麼?
更多信息
LUN發現步驟:
如果用戶的Linux驅動除了LUN 0以外,沒有自動配置其他LUN,用戶可以根據SCSI中間層驅動使用的參數和設置來手動配置。以下示例顯示了Linux主機/proc/scsi/scsi文件中,各適配器端口僅配置了第一個LUN,即LUN 0的情況。
# cat proc/scsi/scsi
...
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: EMC Model: SYMMETRIX Rev: 5773
Type: Direct-Access ANSI SCSI revision: 04
Host: scsi0 Channel: 00 Id: 15 Lun: 00
Vendor: EMC Model: SYMMETRIX Rev: 5773
Type: Direct-Access ANSI SCSI revision: 04
Host: scsi2 Channel: 00 Id: 00 Lun: 00
Vendor: EMC Model: SYMMETRIX Rev: 5773
Type: Direct-Access ANSI SCSI revision: 04
Host: scsi3 Channel: 00 Id: 00 Lun: 00
Vendor: EMC Model: SYMMETRIX Rev: 5773
Type: Direct-Access ANSI SCSI revision: 04
Host: scsi3 Channel: 00 Id: 01 Lun: 00
Vendor: EMC Model: SYMMETRIX Rev: 5773
Type: Direct-Access ANSI SCSI revision: 04
解決這一問題有兩種方式:
創建腳本在/proc/scsi/scsi文件中手動添加磁盤設備
通過修改initrd設置系統啓動時自動發現LUN
創建腳本echo /proc文件系統
使用scsi add-single-device命令連續配置分配給主機的所有LUN。寫一個腳本爲各主機適配器重複scsi add-single-device命令,從而給每一個LUN配置ID。該腳本必須掃描所有主機適配器端口並識別分配給各端口的所有LUN。
腳本運行結束之後,用戶可以在/proc/scsi/scsi文件中查看分配的所有LUN。
以下示例列出腳本配置所有LUN之後的/proc/scsi/scsi文件。
# cat proc/scsi/scsi
...
Host: scsi3 Channel: 00 Id: 01 Lun: 00
Vendor: EMC Model: SYMMETRIX Rev: 5773
Type: Direct-Access ANSI SCSI revision: 04
Host: scsi3 Channel: 00 Id: 00 Lun: 01
Vendor: EMC Model: SYMMETRIX Rev: 5773
Type: Direct-Access ANSI SCSI revision: 04
Host: scsi3 Channel: 00 Id: 00 Lun: 02
Vendor: EMC Model: SYMMETRIX Rev: 5773
Type: Direct-Access ANSI SCSI revision: 04
Host: scsi3 Channel: 00 Id: 00 Lun: 03
Vendor: EMC Model: SYMMETRIX Rev: 5773
Type: Direct-Access ANSI SCSI revision: 04
Host: scsi3 Channel: 00 Id: 00 Lun: 04
Vendor: EMC Model: SYMMETRIX Rev: 5773
Type: Direct-Access ANSI SCSI revision: 04
...
在系統啓動時自動發現LUN
第二種方法是通過設置SCSI中間層驅動的參數來完成,此參數控制在SCSI總線掃描過程中掃描LUN的數量。以下步驟同時適用於2.4和2.6內核版本,但假定SCSI中間層驅動編譯爲scsi_mod模塊,並在系統啓動時自動加載。對於Linux 2.4內核版本,爲了發現所有卷,通常在系統中設置爲磁盤設備的最大數量,用戶需要設置SCSI中間層驅動的max_scsi_luns參數。例如,如果max_scsi_luns設置爲1則SCSI總線只掃描到LUN 0。此參數應當設置爲內核能夠支持的最大磁盤數量,例如,128或256。在Linux 2.6內核中,可使用同樣的步驟,除了參數名從max_scsi_lun更改爲max_lun。
編輯/etc/modules.conf文件
添加以下內容:
options scsi_mod max_scsi_luns=<n>(n表示探測的LUN總數)
保存文件
運行mkinitrd命令重新編譯當前內核相應的ram-disk。以下命令示例中,<kernel>爲當前運行內核版本,可參見”uname -r”命令的輸出,例如:2.4.21-292-smp。
SUSE中命令如下:
cd /boot
mkinitrd –k vmlinuz-<kernel> -i initrd-<kernel>
Red Hat中命令如下:
cd /boot
mkinitrd –v initrd-<kernel>.img <kernel>
重啓主機
驗證/boot/grub/menu.lst文件中,已正確配置了新創建的initrd鏡像。
Linux設備命名:
內核驅動可使用特定的設備文件來控制磁盤設備。映射到同一物理磁盤設備的設備文件可能不止一個。例如,在多路徑環境下某一設備配置四條路徑,則會有四個不同的設備文件映射到同一設備。
設備文件位於/dev目錄下,通過major和minor編號訪問。光纖通道連接的設備通過sd驅動作爲SCSI磁盤設備管理。因此,每一個LUN在/dev目錄下有一個對應的設備文件。
SCSI磁盤設備有一個以“sd”爲前綴的特定設備文件,具有如下命名格式:
/dev/sd[a-z][1-15]
名稱中不帶數字表示整個磁盤,而名稱中有數字則表示磁盤的一個分區。依據慣例,一個SCSI磁盤設備最多可以有16個minor編號。因此,對於一整塊磁盤,每塊磁盤最多有15個分區,使用一個minor編號來標示整塊磁盤(例如/dev/sda),其他15個minor編號用來標示該磁盤的分區(例如/dev/sda1,/dev/sda2,等等)。以下示例顯示整塊磁盤/dev/sda的設備文件,該設備major編號爲8,minor編號爲0,有15個分區。
# ls -l /dev/sda*
brw-rw---- 1 root disk 8, 0 May 24 08:09 /dev/sda
brw-rw---- 1 root disk 8, 1 May 24 08:09 /dev/sda1
brw-rw---- 1 root disk 8, 10 May 24 08:09 /dev/sda10
brw-rw---- 1 root disk 8, 11 May 24 08:09 /dev/sda11
brw-rw---- 1 root disk 8, 12 May 24 08:09 /dev/sda12
brw-rw---- 1 root disk 8, 13 May 24 08:09 /dev/sda13
brw-rw---- 1 root disk 8, 14 May 24 08:09 /dev/sda14
brw-rw---- 1 root disk 8, 15 May 24 08:09 /dev/sda15
brw-rw---- 1 root disk 8, 2 May 24 08:09 /dev/sda2
brw-rw---- 1 root disk 8, 3 May 24 08:09 /dev/sda3
brw-rw---- 1 root disk 8, 4 May 24 08:09 /dev/sda4
brw-rw---- 1 root disk 8, 5 May 24 08:09 /dev/sda5
brw-rw---- 1 root disk 8, 6 May 24 08:09 /dev/sda6
brw-rw---- 1 root disk 8, 7 May 24 08:09 /dev/sda7
brw-rw---- 1 root disk 8, 8 May 24 08:09 /dev/sda8
brw-rw---- 1 root disk 8, 9 May 24 08:09 /dev/sda9
對於Red Hat版本,內核實際上爲128個設備創建了設備文件。對於SUSE,只有前16塊磁盤有設備文件。用戶必須使用mknod命令爲其他磁盤創建設備文件。在2.6內核版本中,只有在內核發現並識別出設備時才能創建設備文件。/proc/partitions文件列出所有SCSI磁盤驅動識別出的“sd”設備,包括sd名,major編號,minor編號,以及各磁盤設備的大小。
以下示例列出/proc/partitions文件的內容:
# cat /proc/partitions
major minor #blocks name
8 0 17774160 sda
8 1 1052226 sda1
8 2 208845 sda2
8 3 10490445 sda3
8 16 976576 sdb
8 32 976576 sdc
8 48 976576 sdd
8 64 976576 sde
8 80 976576 sdf
8 96 976576 sdg
8 112 976576 sdh
8 128 976576 sdi
8 144 976576 sdj
8 160 976576 sdk
8 176 976576 sdl
8 192 976576 sdm
8 208 976576 sdn
8 224 976576 sdo
8 240 976576 sdp
65 0 976576 sdq
65 16 1048576 sdr
65 32 1048576 sds
65 48 1048576 sdt
65 64 1048576 sdu
65 80 1048576 sdv
65 96 1048576 sdw
65 112 1048576 sdx
65 128 1048576 sdy
65 144 1048576 sdz
65 160 1048576 sdaa
65 176 1048576 sdab
65 192 1048576 sdac
65 208 1048576 sdad
65 224 1048576 sdae
65 240 1048576 sdaf
66 0 1048576 sdag
66 16 1048576 sdah
66 32 1048576 sdai
66 48 1048576 sdaj
66 64 1048576 sdak
66 80 1048576 sdal
66 96 1048576 sdam
66 112 1048576 sdan
66 128 1048576 sdao
66 144 1048576 sdap
66 160 1048576 sdaq
66 176 1048576 sdar
66 192 1048576 sdas
66 208 1048576 sdat
66 224 1048576 sdau
66 240 1048576 sdav