dmesg Saída - Modo Sentido - Bytes Explicação

3

Execute dmesg e grep em [sda] Mode Sense: para retornar uma linha como esta:

[sda] Mode Sense: 00 3a 00 00

O que os 4 bytes de dados representam 00 3a 00 00 ?

É provável que a resposta esteja contida em uma linha subsequente de saída, como:

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

... mas eu gostaria de saber como mapear os dados para as descrições

    
por Justchoose1 17.01.2018 / 20:29

1 resposta

5

Eles são os primeiros quatro bytes no buffer retornados de um comando de modo (veja drivers / scsi / sd.c, sd_mode_sense ()). O significado pode ser obtido olhando para drivers / scsi / scsi_lib.c, scsi_mode_sense ()): esta rotina retorna uma estrutura chamada "data" que, de acordo com um comentário, abstrai os dados do cabeçalho do modo; os dois primeiros bytes no buffer (00 e 3a) são os bytes de ordem alta / ordem baixa do comprimento de "dados" menos 2, o terceiro byte (00) é o medium_type e o quarto byte é específico do dispositivo:

        data->length = buffer[0]*256 + buffer[1] + 2;
        data->medium_type = buffer[2];
        data->device_specific = buffer[3];

Assim, o tamanho dos dados- > é 0 * 256 + 0x3a + 2 = 60, o medium_type é 0 e quem sabe o que o quarto byte significa ... (BTW, o printk que imprime o modo Mode Sense: é rotulado KERN_DEBUG por isso não é realmente destinado ao consumo regular).

Você pode usar sg_modes do pacote sg3_utils para examinar coisas como essa sem precisar ir ao extremo para traduzi-las:

 # sg_modes -a /dev/sg0
    ATA       SAMSUNG MZ7LN512  4L0Q   peripheral_type: disk [0x0]
Mode parameter header from MODE SENSE(10):
  Mode data length=60, medium type=0x00, WP=0, DpoFua=0, longlba=0
  Block descriptor length=8
> Direct access device block descriptors:
   Density code=0x0
 00     00 00 00 00 00 00 02 00

>> Read-Write error recovery, page_control: current
 00     01 0a 80 00 00 00 00 00  00 00 00 00
>> Caching, page_control: current
 00     08 12 04 00 00 00 00 00  00 00 00 00 00 00 00 00
 10     00 00 00 00
>> Control, page_control: current
 00     0a 0a 02 00 00 00 00 00  ff ff 00 1e

A outra linha que você mencionou:

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

é produzido pela rotina sd_read_cache_type em drivers/scsi/sd.c . Ele usa um par de fontes diferentes para essa informação: as informações de cache de gravação e leitura são obtidas observando-se um byte específico da modepage == 8 buffer; a informação DPO / FUA é obtida a partir da estrutura de "dados" acima mencionada (embora não contenha necessariamente os mesmos dados: os modepages usados nas duas chamadas podem ser diferentes).

AFAICT, as informações nesta linha e as informações na linha de depuração acima não estão diretamente relacionadas.

    
por 18.01.2018 / 01:24

Tags