scgcheck

libscg の ABI のチェックと確認をおこなう

scgcheck - libscg の ABI のチェックと確認をおこなう
scgcheck [ options ]
scgcheck は libscg の Application Binary Interface のチェックと照合をおこなう。
device はドライブの scsibus / target / lun を指す。 SunOS での通信は汎用 SCSI ドライバ scg を用いて行われる。 他の OS では、このドライバをシミュレートするライブラリを使う。 使用可能な書式は、 dev= scsibus , target , lun または dev= target , lun である。 後者の場合、ドライブはマシンのデフォルトの SCSI バスに 接続されていなければならない。 scsibus , target , lun は整数である。 OS や SCSI 転送の実装のなかには、これに加えてデバイスファイル名を 指定しなければならないものもある。 この場合の正しい書式は、 dev= devicename : scsibus , target , lun または dev= devicename : target , lun である。 このようなシステムでは、指定されたデバイスノード名が 1 つの SCSI デバイスのみを参照している場合、 dev= devicename : scsibus , target , lun の代わりに、省略形の dev= devicename : @ または dev= devicename : @ , lun を使うことができる。
リモートの SCSI デバイスにアクセスするためには、 リモートのデバイスであることを示すインジケータを SCSI デバイス名の前に付ける必要がある。 リモートデバイスのインジケータは REMOTE: user@host: または REMOTE: host: という形式である。 指定可能なリモート SCSI デバイス名は、 REMOTE: user@host: または REMOTE: user@host:1,0,0 という形式である。 1 つ目の形式では、リモートで SCSI デバイスのスキャンを行わせる。 2 つ目の形式では、 host の SCSI bus # 1,target 0 lun 0 に接続されている SCSI デバイスにアクセスする。
readcd を全ての \s-2UNIX\s0 系プラットフォームで汎用的にするためには、 dev= devicename : scsibus , target , lun という書式が好ましい。 これによりデバイスについての各 OS 特有の知識を ユーザーに対して隠蔽することができる。 またこれにより、実際のデバイスファイル名や scsibus , target , lun を指定する方法を、特定の OS 上でサポートする必要がなくなる。
scsibus 0 はマシンのデフォルトの SCSI バスである。 マシンの SCSI 設定についてのより詳細な情報は、 ブート時のメッセージや /var/adm/messages を参照すること。 scsibus , target , lun にどのような値を指定してよいか分らない場合は、 cdrecord-scanbus オプションを使ってみること。
-version
バージョン情報を表示して、終了する。
dev= target
SCSI バスのスキャンテストで使われる SCSI target のデフォルト値を設定する。 上記の注意事項を参照すること。 例えば、バスのスキャンのときに Solaris USCSI や リモートの SCSI を指定することができる。
バスのスキャンを行わない場合の典型的なデバイス指定は dev= 6,0 である。 数値での target 指定の他に、 ファイル名も指定しなければならない場合、 そのファイル名は実装依存である。 この場合の正確なファイル名は、 対象とする OS の独自のマニュアルに書かれているだろう。 CAM をサポートしてない FreeBSD システムでは、 ( /dev/rcd0.ctl などの) 制御デバイスを使う必要がある。 この場合の正確なデバイス指定は、 dev= /dev/rcd0.ctl:@ である。
Linux では、パラレルポートアダプタに接続されたデバイスは、 仮想 SCSI bus に対応付けされる。 別のパラレルポートアダプタは、 この仮想 SCSI bus の別の target に対応付けされる。
dev オプションが指定されていない場合、 cdrecord は環境変数 CDR_DEVICE からデバイスを取得しようとする。
dev= オプションの引き数に文字 ',', '/', '@', ':' がない場合、 ファイル /etc/default/cdrecord に書かれたラベル名として扱われる (「ファイル」セクションを参照すること)。
timeout= #
SCSI コマンドのデフォルトのタイムアウトを # 秒にする。 SCSI コマンドのデフォルトのタイムアウトは、 SCSI コマンドを送る際の最短タイムアウトとして使われる。 SCSI コマンドがタイムアウトにより失敗した場合、 タイムアウトの値を失敗したコマンドの デフォルトのタイムアウトより長くすることができる。 タイムアウトを長くしてコマンドが正常に動作した場合は、 成功したときのタイムアウト時間とそのコマンドを、 このプログラムの著者に知らせて下さい。 timeout オプションが指定されない場合、 デフォルトのタイムアウト 40 秒が使われる。
debug= #, -d
(debug=# を使って) その他のデバッグレベルを # に設定する。 または (-d を使って) デバッグレベルを 1 つ上げる。 -dd を指定した場合、 debug= 2 と等しくなる。 libscg でドライバをオープンする際の問題や、 セクタサイズとセクタタイプの問題を発見するのに役立つ。 -debug を使うと、処理が遅くなりバッファアンダーランの原因になるかもしれない。
kdebug= #, kd= #
scg ドライバに対して、SCSI コマンドを動作させているときの カーネルデバッグレベルを変更させる。
-silent , -s
SCSI コマンドが失敗したときの状況報告を表示させない。
-v
一般的な表示の詳細度を 1 つ上げる。 例えば、書き込み処理の進捗状況を表示するために使われる。
-V
SCSI コマンド転送に関する表示の詳細度を 1 つ上げる。 CD レコーダにおける書き込み処理での問題をデバックするのに役立つ。 簡単なエラーメッセージしか表示されない場合は、 このフラグを使って詳細な表示を行わせることができる。 -VV を指定すると、データバッファの内容も表示される。 -V-VV を使うと、処理が遅くなる。
f= file
check.log の代わり使うログファイルを指定する。

cdrecord (1), readcd (1), mkisofs (1), scg (7).
壊れた Linux SCSI generic driverscgcheck を使う場合、 scgcheck は scg ドライバの機能をエミュレートを試みるという対処療法を使う。 不幸なことに、 Linux の sg ドライバには以下のような酷いバグがある:
bu
SCSI コマンドが全く送られていないかを調べることができない。
bu
SCSI status バイトを取得できない。 このため、 scgcheck は失敗した SCSI コマンドをある状況下では報告できない。
bu
転送時の実際の DMA カウントを取得できない。 scgcheck は、DMA の残余カウントがあるかをユーザーに知らせることができない。
bu
auto sense データのうち有効なバイト数を取得できない。 scgcheck は、認識したデータをデバイスが全く転送していないかを ユーザーに知らせることができない。
bu
auto request sense では非常に少ないデータしか取得できない (CCS/SCSI-2/SCSI-3 では 18 以上でなければならない)。
SCSI コマンドの典型的なエラーメッセージは以下のようなものである:
readcd: I/O error. test unit ready: scsi sendcmd: no error
CDB: 00 20 00 00 00 00
status: 0x2 (CHECK CONDITION)
Sense Bytes: 70 00 05 00 00 00 00 0A 00 00 00 00 25 00 00 00 00 00
Sense Key: 0x5 Illegal Request, Segment 0
Sense Code: 0x25 Qual 0x00 (logical unit not supported) Fru 0x0
Sense flags: Blk 0 (not valid)
cmd finished after 0.002s timeout 40s

1 行目はコマンドの転送についての情報である。 最初のコロンのあとの文字列は、 カーネルの視点からみたシステムコールのエラーである。 他の問題が起こらないときに、一般的なのは I/O error である。 次の文字列は失敗した SCSI コマンドの簡単な説明である。 残りの部分は SCSI バス越しにコマンドを転送する際に 問題が発生したことを示す。 fatal error はコマンドを転送できなかったことを示す (つまり、要求された SCSI アドレスにデバイスが存在しなかった)。 2 行目には失敗したコマンドの SCSI コマンドの ディスクリプターブロックが表示される。 3 行目には、コマンドの転送が成功した場合に、 コマンドによって返される SCSI status コードについての情報が表示される。 これは SCSI デバイスからのエラー情報である。 4 行目はコマンドの auto request sense 情報の 16 進ダンプである。 5 行目は (もし存在すれば) sense key のエラー文字列である。 コマンドが copy の場合にのみ、セグメント番号が続く。 エラーメッセージが現在のコマンドに直接関係していない場合、 deferred error という文字列が表示される。 6 行目は sense code のエラー文字列である。 存在する場合には sense qualifier も表示される。 デバイスのタイプが既知の場合、 sense data は scsierrs.c にあるテーブルを用いてデコードされる。 その文字列の後には field replaceable unit についてのエラー値が続く。 7 行目には、失敗したコマンドに関連したブロック番号と エラーフラグ文字列が表示される。 ブロック番号は有効ではないかも知れない。 8 行目は、そのコマンドについて設定されたタイムアウトと、 実際にコマンドが完了するまでにかかった時間が表示される。



J\*org Schilling
Seestr. 110
D-13353 Berlin
Germany
その他の情報は以下で入手できる。 http://www.fokus.gmd.de/usr/schilling/cdrecord.html サポートに関する質問は、 cdrecord-support@berlios.de または other-cdwrite@lists.debian.org にメールを送ってください。 明らかなバグを見付けた場合は、 cdrecord-developers@berlios.de または schilling@fokus.gmd.de にメールを送ってください。 メーリングリストを購読するには、 http://lists.berlios.de/mailman/listinfo/cdrecord-developers または http://lists.berlios.de/mailman/listinfo/cdrecord-support を参照すること。