栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

lsscsi 源代码学习

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

lsscsi 源代码学习

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

 
 
#define TYPE_DISK           0x00
#define TYPE_TAPE           0x01
#define TYPE_PRINTER        0x02
#define TYPE_PROCESSOR      0x03    
#define TYPE_WORM           0x04    
#define TYPE_ROM            0x05
#define TYPE_SCANNER        0x06
#define TYPE_MOD            0x07    
#define TYPE_MEDIUM_CHANGER 0x08
#define TYPE_COMM           0x09    
#define TYPE_RAID           0x0c
#define TYPE_ENCLOSURE      0x0d    
#define TYPE_RBC         0x0e
#define TYPE_OSD            0x11
#define TYPE_ZBC            0x14
#define TYPE_WLUN           0x1e    
#define TYPE_NO_LUN         0x7f

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/467565.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号