lun是什么意思,linux中lun详细介绍
所有存储以及linux,一般来说,存储分配LUN的数量都不会太多,但出现业务需求量特别大的情况且无法在软件层面进行切分,出现需要大量的LUN。但因系统的原因,导致无法认盘无法使用。
SCSI总线
Linux 操作系统中,各种设备驱动(device driver)通过设备控制器(device controller)来管理各种设备(device),其关系如下图所示:
在物理上说是SCSI总线是计算机内部与外设进行通讯的总线,SCSI设备就是采用SCSI总线标准的设备。SCSI总线上可挂接的设备数量是有限的,一般为6个或15个,使用target ID(也有称为SCSI ID的)来描述这些设备,设备一加入系统,就会有一个target ID。
•受同一个 device driver 管理的设备都有相同的 major number,这个数字可以看作设备的类别号码,被内核用于识别一类设备•受同一个 device driver 管理的同一类设备中的每一个设备都有不同的 minor number,这个数字可以看作设备编号,被设备驱动用来识别每个设备
但设备很多,为了使用和描述更多设备引入了LUN(Logical Unit Number)的概念,故LUN ID不等于某个设备,只是个号码而已。
LUN只是一个虚拟的对象。比如一个阵列柜,Host那边看作是一个target device,那为了某些特殊需要,我们要将磁盘阵列柜的磁盘空间划分成若干个小的l空间来给主机来用,于是就产生LUN的说法,也就是比target device级别更低的逻辑对象,我们习惯于把这些更小的磁盘资源称之为LUN0,LUN1,LUN2……什么的。而操作系统的机制使然,操作系统识别的最小存储对象级别就是LUN Device,这是一个逻辑对象,所以很多时候被称之为Logical Device。
LUN数目小于256?
最开始采用16位,前8位表示主设备号,后8位表示从设备号,这意味着最多只有256个主设备与256个从设备可用。
创建一个major number,其主要编号为254,次要编号为0。次要编号应在0到255的范围内,因为出于历史原因,它们有时存储在单个字节中。有充分的理由来扩展可用的次要数字的范围,但是暂时八位限制仍然有效。
后来改用32位表示,在外部提供了一种兼容模式(在内部仍然采用前20位表示从设备号,后12位表示主设备号,内核提供了dev_t相关的函数进行外部表示法与内部表示法之前的转换),前8位表示从设备号,8~19位共12位表示主设备号(如果主设备数少于256时是兼容的),20~31共12位表示剩下的从设备号。
sda和sdb的major number都是8,sda的minor number是0开始, sdb的minor number是16开始(因为每个磁盘最多256个分区)
mzjof number minor numberbrw-rw---- 1 root disk 8, 0 8月 12 2019 /dev/sdabrw-rw---- 1 root disk 8, 1 8月 12 2019 /dev/sda1brw-rw---- 1 root disk 8, 2 8月 12 2019 /dev/sda2brw-rw---- 1 root disk 8, 3 8月 12 2019 /dev/sda3brw-rw---- 1 root disk 8, 16 9月 17 2019 /dev/sdbbrw-rw---- 1 root disk 8, 17 9月 17 2019 /dev/sdb1
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 sd128 sd129 sd130 sd131 sd132 sd133 sd134 sd135 sd
vi 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 */ }}
附录一,一些相关的常用命令 可以使用的scsi设备:sudo lsscsi 可以使用的块设备:sudo fdisk -l 做多路径用到的块设备:sudo multipath -ll
LUN数量修改
附录二,修改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
光纤卡LUN限制修改
由于光纤卡也存储LUN256数量限制,每个光纤卡最多支持256个LUN,这个也需要修改。
本文地址:百科问答频道 https://www.neebe.cn/wenda/945281.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!