Linux 에서 가장 많이 지원 하 는 SCSI Disk 의 수

11088 단어
본문 과 전재 문장, 본 전재 인 msdnchina
원작 자 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 장 치 를 사용 할 수 있 습 니까?

좋은 웹페이지 즐겨찾기