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