磁盘的信息解析

来源:互联网 发布:俞莲舟 精华 知乎 编辑:程序博客网 时间:2024/06/05 06:55

磁盘的信息解析

对于SD磁盘,它的生成过程会有相当信息打印,了解相关信息可以对该磁盘有简单的认识。一般会有如下打印信息:

[  135.532868] scsi 1:0:0:0: Direct-Access     ATA      HGST HUS724040AL A8B0 PQ: 0 ANSI: 5[  135.541219] sd 1:0:0:0: [sda] 7814037168 512-byte logical blocks: (4.00 TB/3.64 TiB)[  135.541446] scsi 1:0:1:0: Direct-Access     ATA      HGST HUS724040AL A8B0 PQ: 0 ANSI: 5[  135.557030] sd 1:0:0:0: [sda] Write Protect is off[  135.557220] sd 1:0:1:0: [sdb] 7814037168 512-byte logical blocks: (4.00 TB/3.64 TiB)[  135.557238] sd 1:0:1:0: [sdb] Write Protect is off[  135.557240] sd 1:0:1:0: [sdb] Mode Sense: 00 3a 00 00[  135.557272] sd 1:0:1:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA

1. 盘符sdx的生成

对于SD磁盘,盘符的命名类似于sdx,但具体如何命名其实遵循一定的规则,它分两步进行, 首先向系统申请唯一的ID,然后通过ID映射生成文件名。代码实现在文件drivers/scsi/sd.c中的sd_probe函数中。

获取IDA号

在SD系统中定义IDA(static DEFINE_IDA(sd_index_ida)),通过IDA生成规则生成系统中唯一的ID号index:

ida_pre_get(&sd_index_ida, GFP_KERNEL);ida_get_new(&sd_index_ida, &index)

通过ID号生成盘符

通过上面的IDA获取唯一的ID号后,就可以通过这个ID号index生成盘符,ID号生成盘符的函数如下:

sd_format_disk_name("sd", index, gd->disk_name, DISK_NAME_LEN);

生成盘符规则:第一个盘从sda开始,第二个盘为sdb,依次类推… 当第27个盘时为sdaa, 第28个为sdab,依次类推…可以将其看作二十六进制数,当超过二十六时,就增加一位来表示:sda … sdz sdaa … sdzz sdaaa …。

2. scsi m: n: x: y/sd m: n: x: y

scsi m: n: x: y/sd m: n: x: y唯一表示一个SD磁盘在系统拓扑位置

[  135.557030] sd 1:0:0:0: [sda] [  135.557220] sd 1:0:1:0: [sdb]

上面表示盘sda和sdb都在控制器1下(D05只引出SAS控制器1), 相同通道下设备ID分别为0和1。

3. 磁盘容量

在扫盘过程中控制器会向磁盘发送SCSI命令获取容量,实现函数为sd_read_capactiy

7814037168 512-byte logical blocks: (4.00 TB/3.64 TiB)

上面表示该盘的块大小为512个字节,有7814037168个块。至少后面4.00 TB/3.64 TiB分别为厂家标称容量和操作系统认为容量。比如厂家标示容量4TB=4000GB=4000,000MB=4000,000,000KB=4000,000,000,000B,而对操作系统来说,按1024来计算的,所以厂家标称容量换成操作系统认为容量为4000,000,000,000/1024/1024/1024/1024=3.64。

4. 其它特性

在扫盘过程中还会读取磁盘其它特性,比如写保护,读写CACHE使能,DPO和FUA是否支持。

Write Protect is off

表示磁盘的写保护关闭

Write cache: enabled, read cache: enabled, doesn't support DPO or FUA

表示写CACHE使能,读CACHE关闭,不支持DPO和FUA。

Direct-Access     ATA      HGST HUS724040AL A8B0 PQ: 0 ANSI: 5

表示SATA磁盘,以及厂家相关信息。