dmesg 出力 - モード認識 - バイト解析

dmesg 出力 - モード認識 - バイト解析

実行dmesgとgrepは[sda] Mode Sense:次の行を返します。

[sda] Mode Sense: 00 3a 00 00

この4バイトのデータは何を表していますか00 3a 00 00

答えは、次のような後続の出力行に含めることができます。

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

...しかし、データを説明にマッピングする方法を知りたいです。

ベストアンサー1

これは、モード検出コマンド(drivers/scsi/sd.c、sd_mode_sense()を参照)によって返されるバッファの最初の4バイトです。 drivers/scsi/scsi_lib.c, scsi_mode_sense()) を見ると、これが何を意味するのかがわかります。このルーチンは、説明によれば、バッファの最初の2つのモードヘッダデータを抽象化する「data」という構造を返す。最初のバイト(00と3a)は「データ」の長さから2を引いた上位/下位バイト、3番目のバイト(00)はmedia_type、4番目のバイトはデバイス固有のバイトです。

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

したがって、data->lengthは0 * 256 + 0x3a + 2 = 60、media_typeは0です。 4番目のバイトが何を意味するのかを知っている人は...(BTW、printkMode Sense:を印刷する行が表示されているので、KERN_DEBUG一般用途には適していません。消費)。

翻訳に多大な努力をかけることなく、パッケージsg_modesに含まれている内容を使用してこのような内容を確認できます。sg3_utils

 # 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

あなたが言及した他の行は次のとおりです。

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

sd_read_cache_typeのルーチンで生成されますdrivers/scsi/sd.c。この情報を取得するには、いくつかの異なるソースを使用します。書き込みおよび読み出しキャッシュ情報は、modepage == 8バッファの特定のバイトを確認することによって取得されます。 DPO / FUA情報は上記の「データ」構造から取得されます。必ずしも同じデータを含める必要はありません。両方の呼び出しで使用されるスキーマページは異なる場合があります。

AFAICT、この行の情報と上記のデバッグ行の情報は次のとおりです。いいえディ。

おすすめ記事