作者:张华  发表于: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上每个SCSI设备的最大LUN数目是多少(by quqi99)

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

  2. arm linux 指纹识别,基于ARM—Linux指纹识别系统的设计.pdf

    基于ARM-Linux指纹识别系统的设计.pdf 第 20卷 第 l5期 电子设计工程 2012年 8月 Vo1.20 No.15 ElectronicDesienEn~inee Aug.2012 基 ...

  3. linux不能识别 符号,在linux中文件中^M符号的问题以及中文识别问题

    ^M符号的问题 在Windows系统下编辑的文件,换行符回车的格式为'\r\n',在linux系统下,回车的格式为'\n',在Windows下编辑的文本文件在上传至linux服务器时,回车'\r\n' ...

  4. linux车牌识别,基于嵌入式Linux的电子车牌识别系统设计与实现

    摘要: 本文研究的电子车牌识别系统,是国内近几年非常热门的研究项目之一.电子车牌识别系统在车辆管理方面具有可靠性高,操作简单,成本低廉等优点,对于解决城市车流量监控,道路拥堵,车辆非法营运等问题将会有 ...

  5. linux没办法识别u盘,linux系统下不能识别U盘

    Linux系统对于USB的设备的支持关键在于驱动,没有驱动设备时mount执行是肯定不成的. 解决步骤: 1./sbin/lsmod看是否有usb-storage.如果没有的话:cd /lib/mod ...

  6. linux重新识别逻辑卷,linux – 从已删除的LVM逻辑卷恢复ext4文件系统的任何方法?...

    前几天,当我在Vmware下的 Linux客户端上扩展磁盘时,我有一个适当的大脑放屁时刻.我将Vmware磁盘文件扩展到所需的大小然后我做了我通常在没有LVM的Linux客户端上做的事情:我删除了LV ...

  7. linux 5识别网卡,redhat Linux 5.0 如何识别网卡和安装驱动

    如何查看网卡是否安装 1  ifconfig -a如果没有ethX就很可能是网卡没有安装,至少可以断定网卡没有自动加载. 如果这时输入ifconfig eth0 xxxx.xxxx.xxxx.xxxx ...

  8. linux下识别内存,c – Linux:识别内存中的页面

    我想知道一个巨大的文件的哪个部分被缓存在内存中.我正在使用fincore中的一些代码,它以这种方式工作:文件被mmaped,然后fincore循环遍历地址空间并使用mincore检查页面,但由于文件大 ...

  9. linux可以识别rar,转 linux下支持RAR压缩解压

    下载安装: [root@localhost ~]#wget [root@localhost ~]# tar zxvf rarlinux-3.6.0.tar.gz[root@localhost ~]#  ...

最新文章

  1. 6.3文件传输协议FTP
  2. (三)Amazon Lightsail 部署LAMP应用程序之连接到Lightsail数据库
  3. Zulip 2.0.1 发布,功能强大的群组聊天软件
  4. CMOS图像传感器——噪声模型
  5. php ajax取不到值,PHP没有从Ajax获取值
  6. nssl1298-网站计划【线段树】
  7. python 社区网络转化_python-将numpy打开网格转换为坐标
  8. awk和perl对多文本进行统计(求他们的并集,并且如果前三列相同第四列的数字相加,第五列信息合并)...
  9. c++获取ctrl+v内容_处理文档时,快捷键「Ctrl+E」的 8 大妙用
  10. 哈尔滨矢量地图_哈尔滨地图,哈尔滨电子地图,哈尔滨地图查询,哈尔滨街景地图 - 城市吧街景地图...
  11. 2021最新爬取百度关键词时出现,百度安全验证,解决方法
  12. 仪电电子“结盟”复旦大数据学院
  13. 最简单的Lambda入门教程
  14. 谈谈国产FPGA现状
  15. 使用select2实现多功能下拉框,select2中文api
  16. [附源码]java毕业设计书店网站论文
  17. 上万中不同风格的ppt模板免费下载
  18. GDPR 立法背景、进程及制度要点
  19. Ubuntu 关机和重启命令
  20. 高速信号与高频信号区分与解释

热门文章

  1. 从码云上克隆代码,修改完之后,在提交上去(图解)
  2. 收费邮箱的主要特点,收费邮箱价格及容量对比
  3. 解决Python pip下载安装过慢问题
  4. 架设配置sftp服务器
  5. ### The error may involve defaultParameterMap ### The error occurred while setting parameters
  6. 英语单词:profile
  7. 手机运行搭配青龙模块的QQ机器人
  8. 青龙面板教程(四):线报监控系统开发
  9. 人工智能原理复习 | 课程背景
  10. Friends Mp3