SCSI インターフェイスのエラーは、SenseKey + ASC + ASCQ の 3 つの数字の連結によって認識されます。asc/ascq ペアの説明は、asc/ascq 値に基づくすべてのエラーの意味を説明します。しかし、すべての asc/ascq ペアがすべてのセンス キーで意味を持つわけではありません。各 asc/ascq ペアで返されるセンス キーを知るにはどうすればよいですか?
1 に答える
ASC/ASCQ はセンス キーに関連付けられていません。
Sense key は、メインのエラー コードです。ASC および ASCQ は、追加のセンス コードおよび修飾子です。あなたの I_T_L_Q ネクサスのどこが悪いのか答えるためのちょっとしたヒントです。
したがって、あなたの質問に答えるために -一般に、各 ASC/ASCQ ペアでどのセンス キーが返されるかを知る方法はありません。
ただし、よく知られている「センス キー」 + ASC + ASCQ の組み合わせがいくつかあります。これは、ほとんどのオペレーティング システムがエラーの小さなサブセットに対してのみエラー処理を実装しているためです。残念ながら、そのサブセットを見つけるには、ソース コードを調べるしかありません。
たとえば、Mac OS X Darwin カーネルではADDITIONAL_SENSE_CODE
、IOSCSIArchitectureModelFamilyを探すことができます。IOSCSIBlockCommands/IOSCSIBlockCommandsDevicePM.cpp
の659 行目の例を次に示します。
// Check the sense key to see if it is an error group we know how to handle
if ( ( ( senseBuffer.SENSE_KEY & kSENSE_KEY_Mask ) == kSENSE_KEY_NOT_READY ) ||
( ( senseBuffer.SENSE_KEY & kSENSE_KEY_Mask ) == kSENSE_KEY_MEDIUM_ERROR ) )
{
// The SenseKey is an 02 ( Not Ready ) or 03 ( Medium Error ). Check to see
// if we can do something about this
if ( ( senseBuffer.ADDITIONAL_SENSE_CODE == 0x04 ) &&
( senseBuffer.ADDITIONAL_SENSE_CODE_QUALIFIER == 0x02 ) )
{
// Device requires a start command before we can tell if media is there
if ( START_STOP_UNIT ( request, 0x00, 0x00, 0x00, 0x01, 0x00 ) == true )
{
STATUS_LOG ( ( "Sending START_STOP_UNIT.\n" ) );
serviceResponse = SendCommand ( request, 0 );
}
STATUS_LOG ( ( "%s::drive NOT READY\n", getName ( ) ) );
IOSleep ( 200 );
continue;
}
else if ( ( senseBuffer.ADDITIONAL_SENSE_CODE == 0x3A ) &&
( senseBuffer.ADDITIONAL_SENSE_CODE_QUALIFIER == 0x00 ) )
{
STATUS_LOG ( ( "No Media.\n" ) );
// No media is present, return false
driveReady = true;
mediaPresent = false;
}
else
{
STATUS_LOG ( ( "%s::drive NOT READY\n", getName ( ) ) );
IOSleep ( 200 );
continue;
}
}
使用された SK+ASC+ASCQ チューブ:
0x02/0x03, 0x04, 0x02
- NOT READY/MEDIUM ERROR、論理ユニットの準備ができていません。初期化コマンドが必要です。0x02/0x03, 0x3A, 0x00
- NOT READY/MEDIUM エラー、MEDIUM が存在しません。
ここでわかるように、ASC/ASCQ ペアは 0x02 または 0x03 センス キーで使用され、実行するアクションは ASC/ASCQ ペアで決定されるため、ASC/ASCQ ペアがセンス キー間でどのように分割されているかは問題ではありません。