lsscsi 源代码学习

本文档详细分析了lsscsi工具在显示ZBC(SMR)驱动容量时遇到的问题。通过查看lsscsi源码和相关驱动文件,发现SMR驱动的type值为20导致容量不显示。分析了scsi_device_types定义,确认0x14对应于ZBC设备。问题在于lsscsi工具对于type为20的设备不显示容量信息。
摘要由CSDN通过智能技术生成

ZBC(SMR ) drive 在 下面命令不显示容量问题,

[root@dhcp-10-131-68-59 6:0:0:0]# lsscsi -s

[0:0:0:0]    disk    ATA      HBS3A1924A4M4B1  2100  /dev/sda    240GB

[6:0:0:0]    zbc     ATA      WSH722020ALE6L4  W421  /dev/sdb        -

分析思路

1, 查看lsscsi 源码, man lsscsi  得到lsscsi tool 网站如下

EXAMPLES

       Information about this utility including examples can also be found at: http://sg.danny.cz/scsi/lsscsi.html .

查看当前lsscsi 版本

[root@dhcp-10-131-68-59 6:0:0:0]# lsscsi --version

version: 0.30  2018/06/12 [svn: r154]

2, 下载源码  lsscsi utility for Linux,版本 lsscsi-0.30-1.src,找到 s选项对应代码

      if (op->ssize) {

                uint64_t blk512s;

                char blkdir[LMAX_DEVPATH];

                my_strcopy(blkdir, buff, sizeof(blkdir));

                value[0] = 0;

                if (! ((0 == type) && block_scan(blkdir) &&

                       if_directory_chdir(blkdir, ".") &&

                       get_value(".", "size", value, vlen)) ) {

                        printf("  %6s", "-");

                        goto fini_line;

3, 分析“0 == type”, 确认smr drive type值

[root@dhcp-10-131-68-59 6:0:0:0]# pwd

/sys/bus/scsi/devices/6:0:0:0

[root@dhcp-10-131-68-59 6:0:0:0]# more type

20

可见SMR drive 的type 为20,所以不显示容量。

4, SMR drive 的type 为啥为20?

scsi_device_types ->/drivers/scsi/scsi_common.c->  scsi_device_type-> /include/scsi/scsi_common.h-> /include/scsi/scsi_proto.h

From  lsscsi 源代码 :  lsscsi.c

        if (! get_value(buff, "type", value, sizeof(value))) {

                printf("  Type:   %-33s", "?");

        } else if (1 != sscanf(value, "%d", &type)) {

                printf("  Type:   %-33s", "??");

        } else if ((type < 0) || (type > 31)) {

                printf("  Type:   %-33s", "???");

        } else

                printf("  Type:   %-33s", scsi_device_types[type]);

From  /drivers/scsi/scsi_common.c

const char *scsi_device_type(unsigned type)
{
       if (type == 0x1e)
              return "Well-known LUN   ";
       if (type == 0x1f)
              return "No Device        ";
       if (type >= ARRAY_SIZE(scsi_device_types))
              return "Unknown          ";
       return scsi_device_types[type];

From

/include/scsi/scsi_proto.h

/*
 *  DEVICE TYPES
 *  Please keep them in 0x%02x format for $MODALIAS to work
 */
 
#define TYPE_DISK           0x00
#define TYPE_TAPE           0x01
#define TYPE_PRINTER        0x02
#define TYPE_PROCESSOR      0x03    /* HP scanners use this */
#define TYPE_WORM           0x04    /* Treated as ROM by our system */
#define TYPE_ROM            0x05
#define TYPE_SCANNER        0x06
#define TYPE_MOD            0x07    /* Magneto-optical disk -
                                 * - treated as TYPE_DISK */
#define TYPE_MEDIUM_CHANGER 0x08
#define TYPE_COMM           0x09    /* Communications device */
#define TYPE_RAID           0x0c
#define TYPE_ENCLOSURE      0x0d    /* Enclosure Services Device */
#define TYPE_RBC         0x0e
#define TYPE_OSD            0x11
#define TYPE_ZBC            0x14
#define TYPE_WLUN           0x1e    /* well-known logical unit */
#define TYPE_NO_LUN         0x7f

MHVTL的Web图形用户界面(由马克·哈维markh794@gmail.com基于Linux的虚拟磁带库) 许可: GPL v2的http://www.gnu.org/licenses/gpl-2.0.html 免责声明: 该软件产品是由我提供的“原样”和“所有错误。”我做有关病毒,不准确,拼写错误,或该软件产品的其他有害成分的安全性,适用性,缺少任何陈述或任何形式的担保。有在使用任何软件固有的危险,而你是全权负责确定本软件产品是否与您的设备和安装在设备的其他软件相兼容。您还全权负责为您的设备的数据保护和备份,我不会承担任何损失可能与使用,修改或分发本软件产品的连接受到影响。 MHVTL GUI要求: ======================== 1)您将需要一个支持PHP的Web服务器(必需)    请测试用“的phpinfo();” 2)安装须藤(必填): *让你的Web服务器的用户id在本地以root身份运行命令   例如:运行#回声“阿帕奇ALL=(ALL)NOPASSWD:ALL”>>在/ etc/ sudoers文件 *注释掉在/ etc/ sudoers文件行“默认requiretty” *您可能需要禁用SELinux来运行的httpd sudo的,由crippa.andrea/ MHVTL论坛报 3)安装一些实用OS工具: *使用lsscsi(YUM安装使用lsscsi)(必填) * MTX(YUM安装MTX)(必填) * MT-ST(YUM安装MT-ST)(必填) *混帐更高版本1.7.4.1或百胜安装的git(可选 - 用于Live Update功能) * SYSSTAT(YUM安装SYSSTAT)(可选) * sg3_utils(可选)百胜安装sg3_utils 4)安装MHVTL/最低版本0.18版本15]例如:版本:0.18.15-的git-XXXXXX(必填) *通过公共Git仓库https://github.com/markh794或看到http://sites.google.com/site/linuxvtl2/下载MHVTL 5)互联网连接的Live Update功能(可选) 6)TGT1.17或更高版本的http://stgt.sourceforge.net/(可选)用于iSCSI目标 7)支持的互联网浏览器:Internet Explorer 8中,Firefox和谷歌Chrome浏览器(应用模式)更好的体验 MHVTL Web控制台UI安装: =================================== 1)添加目录别名为MHVTL GUI Web服务器的配置文件: 例如: 别名/ mhvtl“的/ var/ www / html等/ mhvtl” <目录“的/ var/ www / html等/ mhvtl”>    选择无    AllowOverride无    为了允许,拒绝    所有允许 </目录> 2)将所有MHVTL GUI文件到上面指定的别名目录。 3)通过您的互联网浏览器如接入MHVTL GUI HTTP://本地主机/ mhvtl/或http://10.0.0.10/mhvtl/ 4)登录密码为:“mhvtl”
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值