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 を全ての UNIX
系プラットフォームで汎用的にするためには、
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 driver で
scgcheck を使う場合、
scgcheck は scg
ドライバの機能をエミュレートを試みるという対処療法を使う。
不幸なことに、
Linux の
sg
ドライバには以下のような酷いバグがある:
- •
- SCSI
コマンドが全く送られていないかを調べることができない。
- •
- SCSI status
バイトを取得できない。
このため、 scgcheck
は失敗した SCSI
コマンドをある状況下では報告できない。
- •
- 転送時の実際の
DMA
カウントを取得できない。
scgcheck は、DMA
の残余カウントがあるかをユーザーに知らせることができない。
- •
- auto sense
データのうち有効なバイト数を取得できない。
scgcheck
は、認識したデータをデバイスが全く転送していないかを
ユーザーに知らせることができない。
- •
- 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
行目は、そのコマンドについて設定されたタイムアウトと、
実際にコマンドが完了するまでにかかった時間が表示される。
Joerg Schilling
Seestr. 110
D-13353 Berlin
Germany
その他の情報は以下で入手できる。
http://www.fokus.gmd.de/usr/schilling/cdrecord.html
サポートに関する質問は、
[email protected]
または
[email protected]
にメールを送ってください。
明らかなバグを見付けた場合は、
[email protected]
または
[email protected]
にメールを送ってください。
メーリングリストを購読するには、
http://lists.berlios.de/mailman/listinfo/cdrecord-developers
または
http://lists.berlios.de/mailman/listinfo/cdrecord-support
を参照すること。