doc/ja/man/man8/camcontrol.8
Jun Kuriyama 7401d9bca9 Catching up to 3.0.0-19990106-SNAP of section 1, 5 and 6.
Reviewed by:	Japanese Online Manual Project <man-jp@jp.FreeBSD.ORG>
Submitted by:	Kazuo Horikawa <k-horik@yk.rim.or.jp>
1999-01-30 15:44:18 +00:00

475 lines
14 KiB
Groff

.\"
.\" Copyright (c) 1998 Kenneth D. Merry.
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. The name of the author may not be used to endorse or promote products
.\" derived from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" %Id: camcontrol.8,v 1.9 1998/12/20 18:51:56 mjacob Exp %
.\" jpman %Id: camcontrol.8,v 1.4 1998/12/22 02:35:45 oku Stab %
.\"
.\" WORD: defect list ディフェクトリスト[camcontrol.8]
.\"
.Dd September 14, 1998
.Dt CAMCONTROL 8
.Os FreeBSD 3.0
.Sh 名称
.Nm camcontrol
.Nd CAM コントロールプログラム
.Sh 書式
.Nm camcontrol
.Aq command
.Op generic args
.Op command args
.Nm camcontrol
devlist
.Op Fl v
.Nm camcontrol
periphlist
.Op Fl n Ar dev_name
.Op Fl u Ar unit_number
.Nm camcontrol
tur
.Op generic args
.Nm camcontrol
inquiry
.Op generic args
.Op Fl D
.Op Fl S
.Op Fl R
.Nm camcontrol
start
.Op generic args
.Nm camcontrol
stop
.Op generic args
.Nm camcontrol
eject
.Op generic args
.Nm camcontrol
rescan
.Aq bus Ns Op :target:lun
.Nm camcontrol
reset
.Aq bus Ns Op :target:lun
.Nm camcontrol
defects
.Op generic args
.Aq Fl f Ar format
.Op Fl P
.Op Fl G
.Nm camcontrol
modepage
.Op generic args
.Aq Fl m Ar page
.Op Fl P Ar pgctl
.Op Fl e
.Op Fl d
.Nm camcontrol
cmd
.Op generic args
.Aq Fl c Ar cmd Op args
.Op Fl i Ar len Ar fmt
.Bk -words
.Op Fl o Ar len Ar fmt Op args
.Ek
.Nm camcontrol
debug
.Op Fl I
.Op Fl T
.Op Fl S
.Op Fl c
.Aq all|off|bus Ns Op :target Ns Op :lun
.Sh 解説
.Nm camcontrol
は、ユーザが
.Tn FreeBSD
CAM サブシステムにアクセスし制御できるようにする方法を提供する
ために設計されたユーティリティです。
.Pp
.Nm camcontrol
を不適切に使用すると、
データの損失や、システムクラッシュにつながる可能性があります。経験
豊富なユーザであっても、このコマンドを使用する際には注意を払うことを
お勧めします。素人さんはこのユーティリティに近付いてはいけません。
.Pp
.Nm camcontrol
はいくつかの主機能を持っています。その多くは下に示す
共通の引数(generic argument)のいくつかを取ります。
.Bl -tag -width 01234567890123
.It Fl C Ar count
SCSI コマンドのリトライカウント。この機能が動作するためには、エラーリカバリ
.Po
.Fl E
.Pc
をオンにしておく必要があります。
.It Fl E
指定したコマンドのための汎用の SCSI エラーリカバリを遂行
するよう、カーネルに指示を出します。リトライカウント機能
.Po
.Fl C
.Pc
を有効にするためにはこれが必要です。
コマンドのリトライの他に、コード中にある汎用のエラーリカバリによって、
回っていない HDD を回転させるような試みが通常なされます。コマンドから
返されたセンスコードによっては、他の操作が行なわれることもあります。
.It Fl n Ar dev_name
操作を行なうデバイスのタイプを指定します。デフォルトは
.Em da
です。
.It Fl t Ar timeout
SCSI コマンドのタイムアウトを秒単位で指定します。指定したコマンドのすべてに
おいて、これで指定する値はデフォルトのタイムアウトより優先されます。
.It Fl u Ar unit_number
デバイスユニット番号を指定します。デフォルトは 0 です。
.It Fl v
冗舌になります。SCSI コマンドに失敗するとセンス情報を表示します。
.El
.Pp
主コマンド機能は次のとおりです。
.Bl -tag -width periphlist
.It devlist
CAM サブシステムに接続されたすべての物理デバイス (論理ユニット) の
リストを表示します。このリストには各デバイスに接続された周辺ドライバの
一覧も含まれます。
引数
.Fl v
を指定すると、SCSI バス番号、アダプタ名、ユニット番号もあわせて
表示されます。
.It periphlist
指定した物理デバイス (論理ユニット) に接続されたすべての周辺ドライバの
リストを表示します。
.It tur
指定したデバイスに SCSI test unit ready (0x00) コマンドを送信します。
.Nm camcontrol
は、そのデバイスがレディ状態であるかどうかを報告します。
.It inquiry
デバイスに SCSI inquiry (0x12) コマンドを送信します。デフォルトでは、
.Nm camcontrol
標準の inquiry データ、デバイスのシリアル番号、転送レート情報を表示します。
特定のタイプの inquiry データだけを表示するように指定することもできます。
.Bl -tag -width 1234
.It Fl D
標準 inquiry データを得ます。
.It Fl S
シリアル番号を表示します。このフラグだけが指定された場合、
.Nm camcontrol
は、ドライブが返す値の前に "Serial Number" を表示しません。これは
スクリプトを書く際に役立ちます。
.It Fl R
転送レートの情報を表示します。
.El
.It start
指定したデバイスに、start ビットをセットした SCSI Start/Stop Unit
(0x1B) コマンドを送信します。
.It stop
指定したデバイスに、start ビットをクリアした SCSI Start/Stop Unit
(0x1B) コマンドを送信します。
.It eject
指定したデバイスに、start ビットをクリアし eject ビットをセットした
SCSI Start/Stop Unit (0x1B) コマンドを送信します。
.It rescan
カーネルに指定したバス (XPT_SCAN_BUS)、もしくは bus:target:lun
(XPT_SCAN_LUN) をスキャンさせ、新規のデバイスや外されたデバイスを
探させます。ユーザが指定できるのは、スキャンするバスもしくは
論理ユニット番号だけです。あるターゲットのすべての論理ユニット番号を
スキャンすることはサポートされていません。
.It reset
指定したバス (XPT_RESET_BUS) または指定した bus:target:lun (XPT_RESET_DEV) を、
カーネルにリセットさせます。
前者は、バスに SCSI バスリセットを発行することにより行います。
後者は、典型的には当該デバイスにコネクトした後に、
BUS DEVICE RESET メッセージを発行することにより行います。
本コマンドはシステムに破壊的な影響を与えることがあることに注意してください。
.It defects
指定したデバイスに、SCSI READ DEFECT DATA (10) コマンド (0x37) を送信し、
ディフェクト総数、初期ディフェクトリスト (PLIST)、増分ディフェクトリスト
(GLIST) を組み合わせて表示します。
.Bl -tag -width 01234567890
.It Fl f Ar format
書式オプションは以下の 3 つです。
.Em block ,
リストを論理ブロック形式で表示します。
.Em bfi ,
リストをインデックスからのバイト数の形式で表示します。
.Em phys ,
リストを物理セクタ形式で表示します。書式引数は必須です。ほとんどのドライブ
は、物理セクタ形式をサポートしています。一部のドライブは論理ブロック形式を
サポートしています。指定した書式をサポートしていない場合、多くのドライブは、
指定したデータ書式をサポートしていないことを示すセンス情報とともに、
別の書式でデータを返します。
.Nm camcontrol
は、それを検知して
ドライブが返す書式ならどのようなものでも表示しようとします。ドライブが
指定した書式をサポートしていないことを報告する際に、非標準のセンスコードを
用いた場合、
.Nm camcontrol
は、おそらくそのエラーをリクエスト完了に失敗したためのものと見なすでしょう。
.It Fl G
増分ディフェクトリストを表示します。これは、工場出荷時以降に再マップ
された不良ブロックのリストです。
.It Fl P
初期ディフェクトリストを表示します。
.El
.Pp
.Fl P
.Fl G
もどちらも指定していない場合、
.Nm camcontrol
は、ドライブから返された READ DEFECT DATA ヘッダから得られるディフェクト数を
表示します。
.It modepage
SCSI モードページを表示します。もしくは、オプション指定により
ユーザがモードページを編集できるようにします。モードページの書式は
.Pa /usr/share/misc/scsi_modes
にあります。
環境変数
.Ev SCSI_MODES
に別のファイルが指定されている場合はそちらが優先されます。
modepage コマンドは以下のようないくつかの引数を取ります。
.Bl -tag -width 012345678901
.It Fl B
モードセンスのためのブロック記述子を禁止します。
.It Fl e
このフラグを指定することで、ユーザはモードページ中の値を編集することが
できます。
.It Fl m Ar mode_page
ユーザが表示/編集したいモードページ番号を指定します。この引数は必須です。
.It Fl P Ar pgctl
このフラグを指定することで、ユーザはページ制御フィールドを指定することが
できます。指定可能な値は次の通りです。
.Bl -tag -width xxx -compact
.It 0
現在の値
.It 1
変更可能な値
.It 2
デフォルトの値
.It 3
保存された値
.El
.El
.It cmd
任意のデバイスに任意の SCSI CDB を送信するために用いることができます。
cmd 機能は、CDB を指定するための
.Fl c
引数が必要です。他の引数はオプションで、コマンドの型に依存します。コマンドと
データを指定する文法は、
.Xr cam 3
に記述されています。
注釈: 指定した CDB によって、対象の SCSI デバイスとのデータ送受信が
発生する場合、
.Fl i
または
.Fl o
を指定する必要があります。
.Bl -tag -width 01234567890123456
.It Fl c Ar cmd Op args
これは SCSI CDB を指定します。CDB は 6, 10, 12, 16 バイトのいずれか
が可能です。
.It Fl i Ar len Ar fmt
これは、読み込むデータの量と、どのように表示するかとを指定します。書式が
.Sq -
である場合、
.Ar len
バイトのデータがデバイスから読み込まれ、標準出力に書き出されます。
.It Fl o Ar len Ar fmt Op args
これは、デバイスに書き出すデータの量と、書き出されるデータとを指定します。
書式が
.Sq -
である場合、
.Ar len
バイトのデータが標準入力から読み込まれデバイスに書き出されます。
.El
.It debug
カーネルの CAM デバッグ用 printf をオンにします。カーネルの設定
ファイル中に CAMDEBUG オプションが指定されている必要があります。
注意: 現在のところ、デバッグ
用 printf を使えるようにすると、極めて多数のカーネル printf が生じる
ことになります。
一度デバッグ用 printf をスタートさせてしまうと、停止させるのは難しい
でしょう。というのは、カーネルはメッセージを表示するのに忙しくなるので、
他のリクエストをすぐにサービスすることができなくなるからです。
デバッグ機能はいくつかの引数を取ります。
.Bl -tag -width 012345678901234567
.It Fl I
CAM_DEBUG_INFO printf を有効にします。
.It Fl T
CAM_DEBUG_TRACE printf を有効にします。
.It Fl S
CAM_DEBUG_SUBTRACE printf を有効にします。
.It Fl c
CAM_DEBUG_CDB printf を有効にします。これにより、カーネルが、指定した
デバイスに送信した SCSI CDB を表示することになります。
.It all
すべてのデバイスについてデバッグ出力を有効にします。
.It off
すべてのデバイスについてデバッグ出力を無効にします。
.It bus Ns Op :target Ns Op :lun
指定したバス、ターゲット、論理ユニット番号(lun)についてデバッグ出力を
有効にします。論理ユニット番号、もしくはターゲットと論理ユニット番号が
指定されない場合は、ワイルドカード指定されたものとして扱います。(すなわち、
バスだけを指定すると、そのバスのすべてのデバイスについてデバッグ用
printf が有効になります。)
.El
.El
.Sh 環境変数
変数
.Ev SCSI_MODES
によって、別のモードページの書式ファイルを指定することができます。
.Pp
変数
.Ev EDITOR
によって、
.Nm camcontrol
は、モードページの編集を行なう際に
どのテキストエディタを起動するかを決定します。
.Sh 関連ファイル
.Bl -tag -width /usr/share/misc/scsi_modes -compact
.It Pa /usr/share/misc/scsi_modes
SCSI モード書式データベース。
.It Pa /dev/xpt0
トランスポート層デバイス。
.It Pa /dev/pass*
CAM アプリケーションパススルーデバイス。
.El
.Sh 使用例
.Dl camcontrol eject -n cd -u 1 -v
.Pp
cd1 から CD をイジェクトし、コマンド実行に失敗した場合は SCSI センス情報を
出力します。
.Pp
.Dl camcontrol tur
.Pp
SCSI test unit ready コマンドを da0 に送信します。
.Nm camcontrol
はそのディスクがレディ状態であるかどうかを報告しますが、
.Fl v
スイッチが指定されていないため、コマンド実行に失敗してもセンス情報を
表示しません。
.Pp
.Bd -literal -offset foobar
camcontrol tur -n da -u 1 -E -C 4 -t 50 -v
.Ed
.Pp
SCSI test unit ready コマンドを da1 に送信します。カーネルエラーリカバリ
を有効にします。リトライカウントを 4 に、タイムアウトを 50 秒に
設定します。コマンド実行に失敗した場合(
.Fl v
フラグがあるので)センス情報が出力されます。エラーリカバリが設定されて
いるので、ディスクが回転していない場合は回転させられます。
.Nm camcontrol
はディスクがレディ状態かどうかを報告します。
.Bd -literal -offset foobar
camcontrol cmd -n cd -u 1 -v -c "3C 00 00 00 00 00 00 00 0e 00" \e
-i 0xe "s1 i3 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1"
.Ed
.Pp
READ BUFFER コマンド (0x3C) を cd1 に対して発行します。cd1 のバッファサイズと
cd1 のキャッシュの最初の 10 バイトを表示します。コマンド実行に失敗した場合
SCSI センス情報を表示します。
.Pp
.Bd -literal -offset foobar
camcontrol cmd -n cd -u u -v -c "3B 00 00 00 00 00 00 00 0e 00" \e
-o 14 "00 00 00 00 1 2 3 4 5 6 v v v v" 7 8 9 8
.Ed
.Pp
WRITE BUFFER コマンド (0x3B) を cd1 に対して発行します。(予約済の) 4 バイト
ヘッダを含まないデータ 10 バイトを書き出します。コマンド実行に失敗した場合
センス情報を表示します。このコマンドには細心の注意を払って下さい。不適切に
使用した場合、データが破壊されるかもしれません。
.Pp
.Bd -literal -offset foobar
camcontrol modepage -n da -u 3 -m 1 -e -P 3
.Ed
.Pp
da3 のモードページ 1 (Read-Write Error Recover ページ)を編集し、編集結果を
そのドライブにセーブします。モードページ 1 には、
ディスクドライブの読み出し、書き込みの自動再配置の設定などが含まれます。
.Pp
.Dl camcontrol rescan 0
.Pp
SCSI バス 0 を再スキャンし、追加、削除、変更されたデバイスを探します。
.Pp
.Dl camcontrol rescan 0:1:0
.Pp
SCSI バス 0, ターゲット 1, 論理ユニット番号 0 を再スキャンし、そのデバイスが
追加、削除、変更されたかどうかを調べます。
.Sh 関連項目
.Xr cam 3 ,
.Xr pass 4 ,
.Xr cam 9 ,
.Xr xpt 9
.Sh 歴史
.Nm camcontrol
コマンドは、
.Fx 3.0
で最初に現れました。
.Pp
モードページ編集のコードと任意の SCSI コマンドのコードは、
Julian Ellischer と Peter Dufault が書いた、かつての
.Xr scsi 8
ユーティリティと
.Xr scsi 3
ライブラリのものに基づいています。
.Xr scsi 8
プログラムが最初に出現したのは 386BSD 0.1.2.4 で、
.Tn FreeBSD
で最初に出現したのは、
.Fx 2.0.5
です。
.Sh 作者
.An Kenneth Merry Aq ken@FreeBSD.ORG
.Sh バグ
マニュアルページのクロスリファレンスのほとんどはまだ存在していません。
これは近いうちに修正されます。
.Pp
コマンド行引数を解釈するコードは、どのサブコマンドが複数の引数を取るかを
知りません。ですから、たとえば、
.Bd -literal -offset foobar
camcontrol -n da -u 1 -c "00 00 00 00 00 v" 0x00 -v
.Ed
.Pp
のようなことを試みた場合、test unit ready コマンドで得られるセンス情報は
出力されません。というのは、
.Fl c
の 2 番目の引数
.Po
0x00
.Pc
を見た時点で、
.Nm camcontrol
の最初の
.Xr getopt 3
呼び出しが
終ってしまうためです。
この動作を修正するには、ある程度の規模のコードを書き加えるか、
.Xr getopt 3
インタフェースを変更するかのどちらかが必要でしょう。
この問題を回避するもっとも良い方法は、常に
.Nm camcontrol
共通の引数をコマンド固有の引数の前に指定していることを確認することです。
.Pp
bus/target/lun か、デバイス名 (たとえば "da1" などの)でデバイスを
指定できるようにするほうがよいかもしれません。