作者:张华  发表于:2016-04-28

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

( http://blog.csdn.net/quqi99 )

SCSI、Host、Target、LUN等概念

在物理上说是SCSI总线是计算机内部与外设进行通讯的总线,SCSI设备就是采用SCSI总线标准的设备。

SCSI总线上可挂接的设备数量是有限的,一般为6个或15个,使用target ID(也有称为SCSI ID的)来描述这些设备,设备一加入系统,就会有一个target ID。

但设备很多,为了使用和描述更多设备引入了LUN(Logical Unit Number)的概念,故LUN ID不等于某个设备,只是个号码而已。

LUN只是一个虚拟的对象。比如一个阵列柜,Host那边看作是一个target device,那为了某些特殊需要,我们要将磁盘阵列柜的磁盘空间划分成若干个小的单元给主机来用,于是就产生了一些什么逻辑驱动器的说法,也就是比target device级别更低的逻辑对象,我们习惯于把这些更小的磁盘资源称之为LUN0,LUN1,LUN2……什么的。而操作系统的机制使然,操作系统识别的最小存储对象级别就是LUN Device,这是一个逻辑对象,所以很多时候被称之为Logical Device。

为什么每个scsi设备的最大LUN数目是256

最开始采用16位,前8位表示主设备号,后8位表示从设备号,这意味着最多只有256个主设备与256个从设备可用。

后来改用32位表示,在外部提供了一种兼容模式(在内部仍然采用前20位表示从设备号,后12位表示主设备号,内核提供了dev_t相关的函数进行外部表示法与内部表示法之前的转换),前8位表示从设备号,8~19位共12位表示主设备号(如果主设备数少于256时是兼容的),20~31共12位表示剩下的从设备号。

但能不能利用超过255个的LUN呢?理论上可以,实际上困难重重。不过随着技术的发展,采取多SCSI卡,而不是多LUN的方式占了上风。而且多LUN的情况不在SCSI协议标准里,因此导致早期非常多的设备在支持多LUN上非常糟糕,包括像IBM,HP,HITACHI,NEC等国际知名品牌。出现的故障一般是两种:一来是导致SCSI卡被锁定,从而系统处于停滞状态,无法继续后面的操作;第二种是会导致SCSI总线重置(reset),这就会使得inquiry命令重复使用。

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.

sda和sdb的major number都是8,sda的minor number是0开始, sdb的minor number是16开始(因为每个磁盘最多16个分区)

hua@node1:~$ ls -l /dev/sd*

brw-rw---- 1 root disk 8,  0 Apr 28 15:43 /dev/sda

brw-rw---- 1 root disk 8,  1 Apr 26 16:02 /dev/sda1

brw-rw---- 1 root disk 8, 10 Apr 26 16:02 /dev/sda10

brw-rw---- 1 root disk 8,  2 Apr 26 16:02 /dev/sda2

brw-rw---- 1 root disk 8,  5 Apr 26 16:02 /dev/sda5

brw-rw---- 1 root disk 8,  6 Apr 26 16:02 /dev/sda6

brw-rw---- 1 root disk 8,  7 Apr 26 16:02 /dev/sda7

brw-rw---- 1 root disk 8,  8 Apr 26 16:02 /dev/sda8

brw-rw---- 1 root disk 8,  9 Apr 26 16:02 /dev/sda9

brw-rw---- 1 root disk 8, 16 Apr 28 15:43 /dev/sdb

SCSI的major号是8, 65--71, 136--143。所以Linux系统内可以用的SCSI Disk可以是多少个:(1+(71-65)+(143-136))*16=16*16=256

hua@node1:~$ cat /proc/devices |grep sd

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

vi linux/drivers/scsi/sd.c

/*

* Device no to disk mapping:

*

*       major         disc2     disc  p1

*   |............|.............|....|....|

*    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

* thewell-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 */

}

}

附录一,一些相关的常用命令

可以使用的scsi设备: sudo lsscsi

可以使用的块设备:sudo fdisk -l

做多路径用到的块设备:sudo multipath -ll

附录二,修改LUN数目

1, Check the current settings for scsi_mod.max_luns with the following command:

cat /sys/module/scsi_mod/parameters/max_luns

2, Create /etc/modprobe.d/lun.conf, please add the folloing line.

NOTE: a plain 'max_lun' is incorrect for any LUN value higher than 255.

options scsi_mod max_luns=1024

3, Build the initail ramdisk to implement the change.

sudo update-initramfs -k all -t -u

4, Reboot the system, and check the settings for scsi_mod.max_luns with the following command:

cat /sys/module/scsi_mod/parameters/max_luns

附录三,OpenStack中如何使用virtio-scsi

IMG=$(nova image-list|grep trusty | awk '{print $2}')

glance image-update --property hw_scsi_model=virtio-scsi --property hw_disk_bus=scsi

nova keypair-add --pub-key ~/.ssh/id_rsa.pub defaultkey

nova boot --key_name defaultkey --image $IMG --flavor 2 newvm

nova volume-create --display-name testvol 10

nova volume-attach $VM $VOLID /dev/hdb

VOLID=$(nova volume-list |grep testvol | awk '{print $2}')

VM=$(nova list |grep newvm| awk '{print $2}')

参考

[1] http://blog.csdn.net/quqi99/article/details/40889023

[2] http://www.it165.net/os/html/201406/8656.html

[3] http://www.cnblogs.com/feisky/archive/2011/12/12/2285333.html

[4] https://bugs.launchpad.net/nova/+bug/1231874

linux最大lun空间,Linux上每个SCSI设备的最大LUN数目是多少(by quqi99)相关推荐

  1. linux可以识别多少lun,Linux上每个SCSI设备的最大LUN数目是多少(by quqi99)

    作者:张华  发表于:2016-04-28 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) SC ...

  2. Linux上每个SCSI设备的最大LUN数目是多少(by quqi99)

    作者:张华  发表于:2016-04-28 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) SC ...

  3. linux磁盘扩空间,Linux磁盘空间扩容(LVM)

    Linux磁盘空间扩容(lvm) 随着系统的运行时间增长,业务数据的增长,原有磁盘的空间会存在空间不足情况,导致系统不能正常运行,或者系统管理员磁盘没有完全划完,根据使用者的需求自行划分.那么怎么才能 ...

  4. linux+oracle磁盘空间,Linux下Oracle软件、数据文件等所在的磁盘分区空间不足的解决思路...

    虚拟机中的Oracle运行的久了,归档.数据文件不断增长,原来安装ORACLE的分区空间不足. 此时可以重新向虚拟机增加一块硬盘,将ORACLE的数据文件或归档的目录挂载到新增加的磁盘分区上. --我 ...

  5. linux增加 inode空间,linux 增加inode 的方法

    创建文件系统时,可以指定块的大小.如果将来在你的文件系统中是一些比较大的文件的话,使用较大的块大小将得到较好的性能.将ext2文件系统的块大小调整为4096byte而不是缺省的1024byte,可以减 ...

  6. linux系统交换空间,Linux中如何使用和管理交换空间

    给计算机配置交换空间可以充分利用系统,在物理内存被充满时使用,那么Linux下要如何使用Linux交换空间呢?Linux交换空间又要如何管理呢?下面小编就给大家介绍下Linux下使用交换空间的方法,一 ...

  7. linux系统盘需要空间,Linux操作系统要怎么查看磁盘剩余空间

    在linux要怎么查看硬盘剩余空间呢?接下来是小编为大家收集的Linux操作系统要怎么查看磁盘剩余空间,希望能帮到大家. Linux操作系统要怎么查看磁盘剩余空间 这里我们用Df命令查看,Df命令是以 ...

  8. Linux虚拟内存交换空间,Linux 添加 Swp 虚拟内存交换空间

    当 Linux 服务器的内存不够使用时,可以文件或者分区来当作虚拟内存,比如在测试机或者自己学习用的机器上,跑的服务比较多,又没有必要搞那么好(贵)的机子,添加swp交换空间也是一个不错的选择. 首先 ...

  9. linux无损扩空间,linux无损扩容的方法

    云平台客户的 步骤 1.备份 就算是无损的扩容,但难免会出什么意外,备份是必不可少的,一般云平台都有备份功能,可直接对磁盘做一次全量备份. 2.用fdisk重新分区 默认的分区如下 root@i-ab ...

  10. linux合并挂载空间,linux 挂载硬盘 合并到系统盘

    我们平时买vps或者服务器后,连上ssh发现硬盘的容量和商家所介绍的不一样,这种一般情况都是没挂载硬盘,不一般的情况就是真的和商家所介绍的不一样,这种情况你需要联系商家询问.下面说说怎么挂载硬盘,并合 ...

最新文章

  1. flash写保护原理_STM32系统中的2种数据掉电保护方法!
  2. python 装饰器 参数-[Python]写个带参数的装饰器
  3. php word组件使用方法,快速解决PHP调用Word组件DCOM权限的问题讲解
  4. Crfe php,新版中国菜刀(20141213)一句话不支持php assert分析
  5. Springboot2.0访问Redis集群
  6. 堪称最详细的支付系统设计
  7. 【搜素算法02】—回溯法
  8. 自制StartUp宏病毒专杀小工具
  9. fiddler电脑抓包和HttpCanary(小黄鸟)手机抓包教程
  10. java 文件上传乱码_java上传txt文件,出现中文乱码
  11. 喷管烧蚀仿真过程中的常见问题
  12. 【产品设计】用户画像模板
  13. Codeforces Round #439 (Div. 2) Problem C (Codeforces 869C) - 组合数学
  14. js中的设计模式之中介者模式
  15. 市场监管新规下Android接入的友盟Umeng移动统计/推送/分享SDK过程问题总结
  16. C++ 调用 Python 代码 - Clion QT混合编程 ,各取长处。
  17. android 验证码之短信验证(云之讯短信平台)
  18. OSChina 周三乱弹 —— 我胖我吃你家饭了吗
  19. 洛谷P1088.火星人【模拟/搜索/康托展开】
  20. Qt开发经验(转载)

热门文章

  1. 计算机网络自顶向下方法 【第一章 计算机网络及因特网】
  2. 星环一站式大数据平台-4.6
  3. php时间格式转换成时间戳,php怎么把时间格式转换为时间戳?
  4. 基于遥感解译与GIS技术环境影响评价图件制作(最新导则)
  5. 高通SDX12:USB主模式调试及RTL8153驱动移植
  6. 【思维导图】幕布大纲至Xmind思维导图
  7. TIA博途中如何设置不需要初始化DB块也可以下载?
  8. 博途v14电脑要求_Win10运行不了博途V14怎么办?
  9. .net Remoting
  10. ryujinx模拟器linux安装教学,怪物猎人崛起 - ryujinx模拟器使用教程搬运,无机党的春天,MHR尝尝鲜 - 踩蘑菇社区...