Linux 에서 가장 많이 지원 하 는 SCSI Disk 의 수
원작 자 kook 에 게 밥 한 끼 를 빚 졌 습 니 다. 내일 만 날 때 지 켜 드 리 겠 습 니 다!
본문 링크:http://linux.52zhe.info/read.php/237.htm
이 글 쓴 이: kook (블 로그 에 관련 된 기술 문제 에 대해 교류 할 경우 아래 의 MSN 또는 Gmail 로 연락 하 십시오)
연락처: (MSN: kook \ # live. com) (Google talk: kookliu)
저작권 없 음: GNU, 전재 시 "전재 인" 이 본인 에 게 빚 진 밥 을 내일 만 날 때 현금 으로 바 꿔 주세요! 협조 해 주 셔 서 감사합니다!
제목 에 대하 여:
이 제목 을 생각 하 며 오래 생각 했 습 니 다. 다음 과 같은 몇 가지 제목 을 생각 했 습 니 다.
A: 리 눅 스 가 가장 많이 지원 하 는 SCSI LUN 은 몇 개 입 니까?
B: 리 눅 스 가 가장 많이 지원 하 는 SAN 메모리 디스크 의 개 수 는 얼마 입 니까?
나 는 N 권 을 조사 한 후에 현재 의 이 제목 을 사용 하기 로 결정 했다. 왜 잠시 후에 답 을 주 는 지 에 대해 서 는.
실제 상황:
일 은 원래 간단 했다. 그날 고객 이 전화 로 LVM 을 확대 하 라 고 말 했다. 당시 환경 을 생각해 보 니 그 려 진 디스크 를 저장 하고 HBA 카드 두 개 를 통 해 SuSE 가 자체 적 으로 가지 고 있 는 다 중 경로 소프트웨어 Multipath - tools 로 이 루어 졌 다. 과정 은 HA 의 환경 을 제어 한 다음 에 PV 를 설치 하고 VG 를 추가 한 다음 에 LV 를 확대 하 는 것 이 었 다. 다시 한 번 고객 에 게 확인 해 보 니 고객 은 이번 사용 을 강조 했다.메모리 디스크 두 대 를 가 져 왔 습 니 다. 첫째 에 게 전 화 를 걸 어 두 개의 저장 소 에 영향 이 있 는 지 물 었 습 니 다. 첫째 는 아니 라 고 했 습 니 다. 그래서 고객 에 게 OK 라 고 대 답 했 습 니 다. 금요일 에 가서 세부 사항 을 논 의 했 습 니 다. 그 당시 확 장 된 크기 로 소통 하여 2.5T 로 확 대 했 습 니 다. 현재 400 G 정도 밖 에 되 지 않 았 습 니 다. 저 장 된 한 개의 디스크 는 15G 크기 밖 에 되 지 않 았 습 니 다. 생각 해 보 세 요. 그리고 자금 을 찾 아몇 개의 장 비 를 지원 하 는 지 확인 해 보 세 요. 당시 수학 문 제 를 풀 지 않 았 습 니 다. 몇 개의 판 인지 환산 해 보 세 요. 이것 은 정말 큰 실 패 였 습 니 다. 이것 도 결국 이번 사건 의 출발점 이 되 었 습 니 다. 몇 개의 판 을 지원 하 는 지 는 구체 적 으로 계산 되 지 않 았 지만 시스템 내 에서 그 려 진 SCSI Luns 를 얼마나 지원 하 는 지 확인 해 야 한 다 는 것 을 잘 알 고 있 습 니 다. 그래서 이 문 제 를 가지 고 왔 습 니 다.조회 작업 을 시작 했다.
참조 링크, 이벤트 프로 세 스:
[앞 에 적 힌 KOOK 명언: 링크 가 아무리 공식 적 이 어도 쉽게 믿 지 마 세 요. 실패 의 교훈 입 니 다. 뭘 믿 어야 하 는 지 물 어보 시 면 소스 코드 를 보 세 요!]
리 눅 스 가 몇 개의 저장 장 치 를 지원 하 는 지 확인 하기 위해 서 저 는 구 글 의 역 사 를 시 작 했 습 니 다. 키워드 인 'Liux maximscsi disk luns multiple scsi mod sd mod' 등 키 워드 를 여러 번 비교 해 보 았 습 니 다. 아래 링크 를 순서대로 발견 하 였 습 니 다.
I : ( : linux support maximum luns)
A:http://kbase.redhat.com/faq/docs/DOC-3293
, scsi_mod, max_luns=512, initrd , initrd 。 。 。
B:http://download.qlogic.com/sf/62552/ibm_dd_ds4kfc1_8.01.06_linux2.6_anycpu.txt
, 。
7.1 Enable more than 1 scsi device per adapter
Support for multiple LUNs per device is standard in Linux 2.6 kernels. Currently, the maximum number of LUNs that can be scanned for each device is 256.
C: /usr/src/linux/drivers/scsi/scsi_scan.c
#define MAX_SCSI_LUNS 512
, , 。 ,4 HA , 。 。 lsscsi 330 ,multipath 165 , , 。 devices-mapper 、 10 。 30 。 。 , 。 。 , 。 , 100 , , 。 6 , 8 , 1 , support , Lun , , , ,HA 。 , 。 4 。
10 , , 。 , IO , 。 。 , 。lsscsi 330 sd* , fdisk -l 256 。 multipath , , 。 256。 。 :
A:grub
max_scsi_luns = 512
: ,
B: scsi_mod ,max_luns=512
:
1: /etc/modprobe.conf.local ,
options scsi_mod max_luns=512
2:
/sbin/mk_initrd
3: , , 。
grep scsi_mod linuxrc
echo "Loading kernel/drivers/scsi/scsi_mod.ko $extra_scsi_params max_luns=512"
insmod /lib/modules/2.6.5-7.315-bigsmp/kernel/drivers/scsi/scsi_mod.ko $extra_scsi_params max_luns=512
: ,
, , ,3 , , 256 。 , LV,VG,PV, 。 。 LVM, 。 VG 、 , 。 。 , , 。 , 。 。
사실 일이 아직 끝나 지 않 았 습 니 다. 제 가 밤 11 시 에 다시 자 려 고 할 때 고객 의 전화 가 다시 울 렸 습 니 다. 그 때 는 무 너 진 느낌 이 었 습 니 다. 그 후의 일 은 여기에 쓰 지 않 았 습 니 다. 나중에 일 지 를 한 편 더 쓰 고 뒤의 일 을 쓰 겠 습 니 다.
II : ( : linux scsi_mod sd_mod devices scsi disk maximum)
, , , 。
1: 330
A:lsscsi 330 sd*
B:cat /proc/partition sd* 330
C:cat /proc/scsi/qla2xxx/0、1 165
2 256
A:fdisk -l 256
B:lsmod sd_mod 256
C:multipath -ll , 256。
?
1:lsscsi ?
http://sg.danny.cz/scsi/lsscsi.html
2: lsmod sd_mod 256 。
,SCSI , SCSI ,SCSI SCSI 。 , Linux ? 。 scsi_mod, ? SCSI 。 , ,cciss HP 、st scsi tape ,qla2xxx qlogic hba ,sd_mod scsi disk sd* 。
[root@server /]# lsmod
Module Size Used by
sg 54176 0
st 57500 0
sr_mod 33316 0
cdrom 55196 2 sr_mod,ide_cd
dm_round_robin 19968 1
dm_multipath 37512 2 dm_round_robin
dm_mod 73600 46 dm_multipath
qla2300 141056 0
qla2xxx 365496 169 qla2300
firmware_class 25984 1 qla2xxx
scsi_transport_fc 23296 1 qla2xxx
cciss 73796 7
sd_mod 37888 256
scsi_mod 134852 8 osst,sg,st,sr_mod,qla2xxx,scsi_transport_fc,cciss,sd_mod
# /sbin/modinfo scsi_mod
parm: scsi_logging_level:a bit mask of logging levels (int)
license: GPL
description: SCSI core
parm: inq_timeout:Timeout (in seconds) waiting for devices to answer INQUIRY. Default is 5. Some non-compliant devices need more. (int)
parm: max_report_luns:REPORT LUNS maximum number of LUNS received (should be between 1 and 16384) (int)
parm: max_luns:last scsi LUN (should be between 1 and 2^32-1) (int)
parm: default_dev_flags:scsi default device flag integer value (int)
parm: dev_flags:Given scsi_dev_flags=vendor:model:flags[,v:m:f] add black/white list entries for vendor and model with an integer value of flags to the scsi device info list (string)
depends:
supported: yes
vermagic: 2.6.5-7.246-bigsmp SMP PENTIUMII REGPARM gcc-3.3
# /sbin/modinfo sd_mod
description: SCSI disk (sd) driver
author: Eric Youngdale
license: GPL
depends: scsi_mod
supported: yes
vermagic: 2.6.5-7.246-bigsmp SMP PENTIUMII REGPARM gcc-3.3
위의 설명 을 통 해 몇 가지 실 마 리 를 알 수 있 습 니까? scsi mod 모듈 은 모든 하드웨어 에서 scsi 버스 를 지원 하 는 장 치 를 지원 합 니 다. 맨 밑 에 있 는 구동 입 니 다. 리 눅 스 가 가장 많이 지원 하 는 scsi disk 의 수 를 알 고 싶 습 니 다. sd mod 모듈 은 이 안에 파 라 메 터 를 가지 고 있 지 않 습 니 다. 저 는 믿 습 니 다. 마지막 방법 으로 소스 코드 를 보 겠 습 니 다.
sd mod 이 모듈 의 원본 파일 보기: / usr / src / linux / drivers / scsi / sd. c
/* Device no to disk mapping:
*
* major disc2 disc p1
* |............|.............|....|....| <- dev_t
* 31 20 19 8 7 4 3 0
*
* Inside a major, we have 16k disks, however mapped non-
* contiguously. The first 16 disks are for major0, the next
* ones with major1, ... Disk 256 is for major0 again, disk 272
* for major1, ...
* As we stay compatible with our numbering scheme, we can reuse
* the well-know SCSI majors 8, 65--71, 136--143.
*/
static int sd_major(int major_idx)
{
switch (major_idx) {
case 0:
return SCSI_DISK0_MAJOR;
case 1 ... 7:
return SCSI_DISK1_MAJOR + major_idx - 1;
case 8 ... 15:
return SCSI_DISK8_MAJOR + major_idx - 8;
default:
BUG();
return 0; /* shut up gcc */
}
}
, 256 。 /usr/src/linux/Documentation/devices.txt, major 8,65-71,136-143 , scsi disk 。
()。 /proc/devices bolock 。
Block devices:
8 sd
65 sd
66 sd
67 sd
68 sd
69 sd
70 sd
71 sd
128 sd
129 sd
130 sd
131 sd
132 sd
133 sd
134 sd
135 sd
16 major, ? /usr/src/linux/Documentation/devices.txt 。major 8,65-71,136-143( 16 ), minor 256 。 16 , 15 。
:Linux SCSI Disk ? major * minor / partitions = 16 * 256 / 16 = 256 。 , , HBA , 165 * 2 =330 , 256 。 。 sd_mod , 。 HBA , scsi_mod , LUN, 。
, 。 google 。
SCSI disk limitations on Linux
http://publib.boulder.ibm.com/infocenter/dsichelp/ds8000ic/index.jsp?topic=/com.ibm.storage.ssic.help.doc/f2c_linuxscsilimit_2hsag9.html
Newer kernels are moving to a dynamic configuration method that will use any available major numbers after the first 16 reserved major numbers have been used. The latest SuSE SLES 8 kernel errata includes this change and imposes a limit of no more than 144 major numbers allocated to SCSI disk devices. Thus these kernels can support up to 2304 disk devices.
In general, the following formula provides the maximum number of devices for Linux host systems: Number of devices = (number of major numbers) x (number of minor numbers) ÷ (number of partitions). For example, Number of devices = 8 x 256 ÷ 16 = 128 or Number of devices = 144 x 256 ÷ 16 = 2304.
For the Linux 2.6 kernels the number of major and minor bits has been increased to 12 and 20 bits respectively, thus Linux 2.6 kernels can support thousands of disks. There is still the limitation of only up to 15 partitions per disk.
, , , major 。 , , major 16 , :
,major sd_mod ,minor 16 , 256
8 0 sda
8 16 sdb
8 32 sdc
8 48 sdd
8 64 sde
8 80 sdf
8 96 sdg
8 112 sdh
8 128 sdi
8 144 sdj
8 160 sdk
8 176 sdl
8 192 sdm
8 208 sdn
8 224 sdo
8 240 sdp
sd , :
8 256 sdiw
8 272 sdix
8 288 sdiy
8 304 sdiz
8 320 sdja
8 336 sdjb
8 352 sdjc
8 368 sdjd
8 384 sdje
8 400 sdjf
8 416 sdjg
8 432 sdjh
8 448 sdji
8 464 sdjj
8 480 sdjk
8 496 sdjl
나 는 붕괴 되 었 습 니 다. 문 제 는 아직 끝나 지 않 았 습 니 다. 나의 현재 이해 정도 에 대해 서 는 정말 알 수 없습니다. 이 잘못된 sd * 장치 들 의 major 와 minor 는 어떻게 분배 되 었 습 니까? 문서 에서 설명 한 것 은 sd mod 가 정의 한 16 개 를 초과 하고 커 널 이 보존 할 수 있 는 major 는 어떻게 분배 되 고 사용 되 었 습 니까? 그리고 나 는 어떻게 시스템 에 256 개가 넘 는 SCSI disk 장 치 를 사용 할 수 있 습 니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.