EN JA
CAMCONTROL(8)
CAMCONTROL(8) FreeBSD System Manager's Manual CAMCONTROL(8)

名称

camcontrolCAM 制御プログラム

書式

camcontrol < command>[ device id][ generic args][ command args]

camcontrol devlist [ -v]

camcontrol periphlist [ device id][ -n dev_name][ -u unit_number]

camcontrol tur [ device id][ generic args]

camcontrol inquiry [ device id][ generic args][ -D][ -S][ -R]

camcontrol identify [ device id][ generic args][ -v]

camcontrol reportluns [ device id][ generic args][ -c][ -l][ -r reporttype]

camcontrol readcap [ device id][ generic args][ -b][ -h][ -H][ -N][ -q][ -s]

camcontrol start [ device id][ generic args]

camcontrol stop [ device id][ generic args]

camcontrol load [ device id][ generic args]

camcontrol eject [ device id][ generic args]

camcontrol rescan <all | bus[ :target:lun]>

camcontrol reset <all | bus[ :target:lun]>

camcontrol defects [ device id][ generic args]< -f format>[ -P][ -G]

camcontrol modepage [ device id][ generic args]< -m page | -l>[ -P pgctl][ -b | -e][ -d]

camcontrol cmd [ device id][ generic args]< -a cmd [ args]>< -c cmd [ args]>[ -d][ -f][ -i len fmt][ -o  len  fmt [ args]][ -r  fmt]

camcontrol smpcmd [ device id][ generic args]< -r len fmt [ args]>< -R len fmt [ args]>

camcontrol smprg [ device id][ generic args][ -l]

camcontrol smppc [ device id][ generic args]< -p phy>[ -l][ -o operation][ -d name][ -m rate][ -M rate][ -T pp_timeout][ -a enable|disable][ -A enable|disable][ -s enable|disable][ -S enable|disable]

camcontrol smpphylist [ device id][ generic args][ -l][ -q]

camcontrol smpmaninfo [ device id][ generic args][ -l]

camcontrol debug [ -I][ -P][ -T][ -S][ -X][ -c][ -p]<all|off|bus[ :target[ :lun]]>

camcontrol tags [ device id][ generic args][ -N tags][ -q][ -v]

camcontrol negotiate [ device id][ generic args][ -c][ -D enable|disable][ -M mode][ -O offset][ -q][ -R syncrate][ -T enable|disable][ -U][ -W bus_width][ -v]

camcontrol format [ device id][ generic args][ -q][ -r][ -w][ -y]

camcontrol sanitize [ device id][ generic args]< -a overwrite | block | crypto | exitfailure>[ -c passes][ -I][ -P pattern][ -q][ -U][ -r][ -w][ -y]

camcontrol idle [ device id][ generic args][ -t time]

camcontrol standby [ device id][ generic args][ -t time]

camcontrol sleep [ device id][ generic args]

camcontrol fwdownload [ device id][ generic args]< -f fw_image>[ -y][ -s]

camcontrol security [ device id][ generic args][ -d pwd][ -e pwd][ -f][ -h pwd][ -k pwd][ -l high|maximum][ -q][ -s pwd][ -T timeout][ -U user|master][ -y]

camcontrol hpa [ device id][ generic args][ -f][ -l][ -P][ -p pwd][ -q][ -s max_sectors][ -U pwd][ -y]

camcontrol help

解説

camcontrol ユーティリティは、ユーザが FreeBSD CAM サブシステムにアクセスし制御できるようにする方法を提供するために設計されています。

camcontrol ユーティリティを不適切に使用すると、データの損失や、システムクラッシュにつながる可能性があります。経験豊富なユーザであっても、このコマンドを使用する際には注意を払うことをお勧めします。素人さんは、このユーティリティに近付いてはいけません。

camcontrol ユーティリティは、いくつかの主機能を持っています。その多くは、省略可能なデバイス識別子をサポートします。デバイス識別子は、次の 3 種類の書式のいずれかを取り得ます:

deviceUNIT
デバイス名とデバイス番号の組み合わせを、"da5"や "cd3"のように指定します。
bus:target
バス番号とターゲット id を指定します。バス番号は、“camcontrol devlist”の出力により決定可能です。論理ユニット番号 (lun) は、デフォルトの 0 になります。
bus:target:lun
デバイスのバス (bus) とターゲット (target) と論理ユニット番号 (lun) を、 (例えば 1:2:0 のように) 指定します。

指定されるなら、デバイス識別子は、機能名の直後で、あらゆる一般的または関数特有の引数の前に置かれなければ なりません。以下に記述されている -n-u 引数は、前もって指定されるあらゆるデバイス名またはユニット番号を上書きすることに注意してください。しかしながら、 -n-u 引数は、指定された bus:target または bus:target:lun を上書き しません

camcontrol の主要な機能のほとんどは、次の一般的な引数をサポートします:

-C count
SCSI コマンドのリトライカウント。この機能が動作するためには、エラーリカバリ ( -E) をオンにしておく必要があります。
-E
指定したコマンドのための一般的な SCSI エラーリカバリを遂行するよう、カーネルに指示を出します。リトライカウント機能 ( -C) を有効にするためには、これが必要です。コマンドのリトライの他に、コード中にある一般的なエラーリカバリによって、回っていない HDD を回転させるような試みが通常なされます。コマンドから返されたセンスコードによっては、他の操作が行われることもあります。
-n dev_name
操作を行うデバイスのタイプを指定します。これは、例えば "da", "ca"です。
-t timeout
SCSI コマンドのタイムアウトを秒単位で指定します。指定したコマンドのすべてにおいて、これで指定する値は、デフォルトのタイムアウトより優先されます。
-u unit_number
デバイスユニット番号を指定します。これは、例えば "1", "5"です。
-v
冗長にします、失敗した SCSI コマンドのためのセンス情報を印刷 (表示) します。

主要なコマンド機能は、次の通りです:

devlist
CAM サブシステムに接続されたすべての物理デバイス (論理ユニット) のリストを表示します。このリストには、各デバイスに接続された周辺ドライバの一覧も含まれます。引数 -v を指定すると、 SCSI バス番号、アダプタ名、ユニット番号もあわせて表示されます。
periphlist
指定した物理デバイス (論理ユニット) に接続されたすべての周辺ドライバのリストを表示します。
tur
指定したデバイスに SCSI test unit ready (0x00) コマンドを送信します。 camcontrol ユーティリティは、そのデバイスがレディ状態であるかどうかを報告します。
inquiry
デバイスに SCSI inquiry (0x12) コマンドを送信します。デフォルトで、 camcontrol は、標準の inquiry データ、デバイスのシリアル番号と転送レート情報を印刷 (表示) します。ユーザは、印刷 (表示) される特定のタイプの inquiry データだけを指定することができます:
-D
標準の inquiry データを取得します。
-S
シリアル番号を印刷 (表示) します。このフラグのみが指定されるなら、 camcontrol は、ドライブによって返される値の前に "Serial Number"を印刷 (表示) しません。これは、スクリプトを書く援助することです。
-R
転送レートの情報を印刷 (表示) します。
identify
ATA 識別コマンド (0xec) をデバイスに送信します。
reportluns
与えられたデバイスに SCSI REPORT LUNS (0xA0) コマンドを送信します。デフォルトで、 camcontrol は、ターゲットデバイスによってサポートされた論理ユニット (LUN) のリストを印刷 (表示) します。出力を変更するためのいくつかのオプションがあります:
-c
実際の LUN 番号ではなく、LUN の数だけを印刷 (表示) します。
-l
LUN だけを印刷 (表示) し、数は、印刷 (表示) しません。
-r reporttype
ターゲットから要求するレポート (報告) のタイプを指定します:
default
デフォルトのレポート (報告) を返します。これは、 camcontrol のデフォルトです。ほとんどのターゲットは、 REPORT LUNS コマンドをサポートしているなら、このレポートをサポートします。
wellknown
よく知られている LUN だけを返します。
all
すべての利用可能な LUN を返します。

camcontrol は、適当な形式で LUN 番号を印刷 (表示) しようとします。周辺機器、フラット、LUN と拡張 LUN 形式を解釈できます。

readcap
与えられたデバイスに SCSI READ CAPACITY コマンドを送って、結果を表示します。デバイスが 2TB より大きいなら、デバイスのフルサイズを得るために SCSI READ CAPACITY (16) サービスアクションを送ります。デフォルトで、 camcontrol は、デバイスの最後の論理的なブロックとデバイスのブロックサイズをバイト単位で印刷します。出力形式を変更するためには、次のオプションを使用します:
-b
最後のブロックまたはデバイスサイズでなく、ブロックサイズだけを印刷します。これは、 -N または -s と共に使用することはできません。
-h
人間に読み込み可能な (2 を底とし、1K == 1024) 形式でデバイスサイズを印刷します。これは、 -N に意味を含み、 -q または -b と共に使用することはできません。
-H
人間に読み込み可能な (10 を底とし、1K == 1000) 形式でデバイスサイズを印刷します。
-N
最後の論理的なブロックの代わりにデバイスのブロックの数を印刷します。
-q
静かなモードで、数だけを印刷します ( -b または -s が指定されていないなら、コンマで分離されます)。
-s
ブロックサイズを省略し、最後の論理的なブロックまたはデバイスのサイズだけを印刷します。
start
指定したデバイスに、start ビットをセットした SCSI Start/Stop Unit (0x1B) コマンドを送信します。
stop
指定したデバイスに、start ビットをクリアした SCSI Start/Stop Unit (0x1B) コマンドを送信します。
load
指定したデバイスに、start ビットをセットし load/eject ビットをセットした SCSI Start/Stop Unit (0x1B) コマンドを送信します。
eject
指定したデバイスに、start ビットをクリアし load/eject ビットをセットした SCSI Start/Stop Unit (0x1B) コマンドを送信します。
rescan
カーネルに、すべてのバス ( all 引数を指定した場合)、指定したバス (XPT_SCAN_BUS)、もしくは bus:target:lun (XPT_SCAN_LUN) をスキャンさせ、新規のデバイスや外されたデバイスを探させます。ユーザが指定できるのは、バスすべて、バス 1 つ、もしくは論理ユニット番号 1 つだけです。あるターゲットのすべての論理ユニット番号をスキャンすることはサポートされていません。
reset
カーネルに、すべてのバス ( all 引数を指定した場合)、指定したバス (XPT_RESET_BUS) もしくは bus:target:lun (XPT_RESET_DEV) をリセットさせます。前者は、バスに SCSI バスリセットを発行することにより行います。後者は、典型的には、当該デバイスにコネクトした後に、 BUS DEVICE RESET メッセージを発行することにより行います。本コマンドは、システムに破壊的な影響を与えることがあることに注意してください。
defects
指定したデバイスに、SCSI READ DEFECT DATA (10) コマンド (0x37) を送信し、ディフェクト (欠陥) 総数、初期ディフェクトリスト (PLIST)、増分ディフェクトリスト (GLIST) を組み合わせて表示します。
-f format
3 つの書式オプションは、次の通りです: 論理ブロックとしてリストを印刷 (表示) する block、インデックス形式からバイト単位でリストを印刷 (表示) する bfi、と物理セクタ形式でリストを印刷 (表示) する phys です。ほとんどのドライブは、物理セクタ形式をサポートしています。一部のドライブは、論理ブロック形式をサポートしています。指定した書式をサポートしていない場合、多くのドライブは、指定したデータ書式をサポートしていないことを示すセンス情報とともに、別の書式でデータを返します。 camcontrol ユーティリティは、それを検知してドライブが返す書式ならどのようなものでも表示しようとします。ドライブが指定した書式をサポートしていないことを報告する際に、非標準のセンスコードを用いた場合、 camcontrol は、おそらくそのエラーをリクエスト完了に失敗したためのものと見なすでしょう。
-G
増分ディフェクトリストを表示します。これは、工場出荷時以降に再マップされた不良ブロックのリストです。
-P
初期ディフェクトリストを表示します。

-P または -G のいずれも指定されないなら、 camcontrol は、ドライブから返された READ DEFECT DATA ヘッダで与えられたディフェクトの数を印刷 (表示) します。いくつかのドライバは、プライマリまたは成長したディフェクトリストのいずれも要求されないなら、0 のディフェクトを報告します。

modepage
SCSI モードページを表示します。もしくは、オプション指定によりユーザがモードページを編集できるようにします。モードページの書式は、 /usr/share/misc/scsi_modes にあります。環境変数 SCSI_MODES に別のファイルが指定されている場合は、そちらが優先されます。 modepage コマンドは、以下のようないくつかの引数を取ります:
-d
モードセンスのためのブロック記述子を禁止します。
-b
モードページデータをバイナリフォーマットで表示します。
-e
このフラグを指定することで、ユーザは、モードページ中の値を編集することができます。モードページの値を EDITOR 環境変数が示すエディタで編集することも可能ですし、 camcontrol がモードページ値を表示に使用するのと同じ書式にてモードページ値を標準入力から提供することも可能です。標準入力が端末であると camcontrol が検出するとエディタが起動されます。
-l
使用可能な全モードページを列挙します。
-m mode_page
ユーザが表示/編集したいモードページ番号を指定します。 -l が指定されていなければ、この引数は、必須です。
-P pgctl
このフラグを指定することで、ユーザは、ページ制御フィールドを指定することができます。指定可能な値は、次の通りです。
0
現在の値
1
変更可能な値
2
デフォルトの値
3
保存された値
cmd
ユーザは、任意のデバイスに任意の ATA または SCSI CDB を送信することができます。 cmd 機能は、CDB を指定するために -c 引数を、または ATA Command Block レジスタ値を指定するために -a 引数を必要とします。他の引数は、オプションで、コマンドの型に依存します。コマンドとデータを指定する文法は、 cam_cdbparse(3) に記述されています。注: 指定した CDB によって、対象の SCSI デバイスとのデータ送受信が発生する場合、 -i または -o を指定する必要があります。
-a cmd [ args]
これは、12 の ATA Command Block レジスタ (command, features, lba_low, lba_mid, lba_high, device, lba_low_exp, lba_mid_exp, lba_high_exp, features_exp, sector_count, sector_count_exp) の内容を指定します。
-c cmd [ args]
これは、SCSI CDB を指定します。 SCSI CDB は、6, 10, 12 または 16 バイトです。
-d
ATA コマンドのために使用される DMA プロトコルを指定します。
-f
ATA コマンドのために使用される FPDMA (NCQ) プロトコルを指定します。
-i len fmt
これは、読み込むデータの量と、どのように表示するかとを指定します。書式が‘-’である場合、 len バイトのデータがデバイスから読み込まれ、標準出力に書き込まれます。
-o len fmt [ args]
これは、デバイスに書き込むデータの量と、書き込まれるデータとを指定します。書式が‘-’である場合、 len バイトのデータが標準入力から読み込まれデバイスに書き込まれます。
-r fmt
これは、ATA Command Block レジスタを表示するべきである 11 の結果 (status, error, lba_low, lba_mid, lba_high, device, lba_low_exp, lba_mid_exp, lba_high_exp, sector_count, sector_count_exp) とその方法を指定します。形式が‘-’であるなら、 11 の結果レジスタは、16 進数で標準出力に書き込まれます。
smpcmd
ユーザは、任意の Serial Management Protocol (SMP) コマンドをデバイスに送ることができます。 smpcmd 関数は、送られるための SMP 要求を指定する -r 引数と SMP 応答の形式を指定する -R 引数を必要とします。 SMP 要求と応答引数のための構文は、 cam_cdbparse(3) に文書化されています。

SMP パススルー (少なくとも現在知られているアダプタ) をサポートする SAS アダプタは、要求でユーザから CRC バイトを受け付けないで、応答でユーザへ CRC バイトを渡さないことに注意してください。したがって、ユーザは、要求の長さに CRC バイトを含めないで、応答で CRC バイトが返されると予想するべきではありません。

-r len fmt [ args]
これは、CRC バイトなしで SMP 要求のサイズを指定し、SMP は、形式を要求します。形式が‘-’であるなら、SMP が要求するように、 len バイトのデータが、標準入力から読み込まれて、書き込まれます。
-R len fmt [ args]
これは、SMP 応答と SMP 応答形式のために割り付けられたバッファのサイズを指定します。形式が‘-’であるなら、 len バイトのデータが、応答のために割り付けられ、応答は、標準出力に書き込まれます。
smprg
ユーザは、Serial Management Protocol (SMP) Report General コマンドをデバイスへ送ることができます。 camcontrol は、Report General コマンドによって返されたデータを表示します。 SMP ターゲットがが、長い応答形式をサポートするなら、追加データは、自動的に要求され、表示されます。
-l
長い応答形式だけを要求します。すべての SMP ターゲットが、長い応答形式をサポートするというわけではありません。このオプションによって、 camcontrol は、長いビット設定なしで初期の報告一般要求の送信をスキップし、長いビットセットで報告一般要求のみを発行します。
smppc
ユーザは、Serial Management Protocol (SMP) PHY Control コマンドをデバイスに発行することができます。この関数は、アクセスできないデバイスを提出でき、同様に潜在的データの汚染を引き起こすこともあり得るような、何らかの警告と共に使用されるべきです。 -p 引数は、動作する PHY を指定するために要求されます。
-p phy
動作する PHY を指定します。次の引数が要求されます。
-l
長い要求/応答形式を要求します。すべての SMP ターゲットが、長い応答形式をサポートするというわけではありません。 PHY Control コマンドに対して、これは、現在、要求の長さが 0 以外の値に設定されるかどうかに影響するだけです。
-o operation
PHY 制御操作を指定します。 1 つの -o 操作だけが指定されます。操作は、数値 (10 進、16 進または 8 進) で指定されるか、または次のの操作名の 1 つが指定されます:
nop
ノーオペレーション。この引数を指定する必要はありません。
linkreset
LINK RESET コマンドを phy に送ります。
hardreset
HARD RESET コマンドを phy に送ります。
disable
DISABLE コマンドを phy に送ります。 LINK RESET または HARD RESET コマンドは、phy を再有効にするべきであることに注意してください。
clearerrlog
CLEAR ERROR LOG コマンドを送ります。これは、指定された phy のためのエラーログカウンタをクリアします。
clearaffiliation
CLEAR AFFILIATION コマンドを送ります。これは、クリア操作を要求する SMP イニシエータ (initiator) のように SAS アドレスで STP イニシエータポートから提携 (affiliation) をクリアします。
sataportsel
TRANSMIT SATA PORT SELECTION SIGNAL コマンドを phy に送ります。これは、SATA ポートセレクタがアクティブな phy として与えられた phy を使用し、他の phy をインアクティブとします。
clearitnl
CLEAR STP I_T NEXUS LOSS コマンドを PHY に送ります。
setdevname
SET ATTACHED DEVICE NAME コマンドを PHY に送ります。これは、デバイス名を指定するために -d 引数を必要とします。
-d name
アタッチされたデバイス名を指定します。このオプションは、 -o setdevname phy 操作で必要とされます。名前は、64 ビットの数値であり、10 進、16 進または 8 進形式で指定できます。
-m rate
phy のための最小の物理的なリンクレートを設定します。これは、数値引数です。現在知られているリンクレートは、次の通りです:
0x0
現在の値を変更しません。
0x8
1.5 Gbps
0x9
3 Gbps
0xa
6 Gbps

他の値は、より新しい物理的なリンクレートのために指定されるかもしれません。

-M rate
phy のための最大の物理的なリンクレートを設定します。これは、数値引数です。知られているリンクレート引数のための -m 引数の説明を参照してください。
-T pp_timeout
マイクロ秒単位で、部分的なパスウェイ (pathway) タイムアウト値を設定します。このフィールドの詳しい情報については、 ANSI SAS Protocol Layer (SPL) の仕様を参照してください。
-a enable|disable
SATA 停止 (slumber) phy 電力状態を有効または無効にします。
-A enable|disable
SATA パーシャル (partial) 電力状態を有効または無効にします。
-s enable|disable
SAS 停止 (slumber) phy 電力状態を有効または無効にします。
-S enable|disable
SAS パーシャル (partial) 電力状態を有効または無効にします。
smpphylist
SAS エキスパンダにアタッチされた phy、phy にアタッチされた末端のデバイスのアドレスとそのデバイスにアタッチされたデバイスと周辺機器のデバイスのための問い合せデータをリストします。利用可能であるなら、問い合せデータと周辺機器デバイスを表示します。
-l
このコマンドのために使用される基本的な SMP コマンドのための長い応答形式をオンにします。
-q
CAM EDT (Existing Device Table, 既存のデバイステーブル) のデバイスにアタッチされた phy のみを印刷 (表示) します。
smpmaninfo
SMP Report Manufacturer Information コマンドをデバイスに送って、応答を表示します。
-l
このコマンドのために使用される基本的な SMP コマンドのための長い応答形式をオンにします。
debug
カーネルの CAM デバッグ用 printf をオンにします。カーネルの設定ファイル中に CAMDEBUG オプションが指定されている必要があります。注意: 現在のところ、デバッグ用 printf を使えるようにすると、極めて多数のカーネル printf が生じることになります。一度デバッグ用 printf をスタートさせてしまうと、停止させるのは難しいでしょう。というのは、カーネルは、メッセージを表示するのに忙しくなるので、他のリクエストをすぐにサービスすることができなくなるからです。 debug 機能は、いくつかの引数を取ります:
-I
CAM_DEBUG_INFO printf を有効にします。
-P
CAM_DEBUG_PERIPH printf を有効にします。
-T
CAM_DEBUG_TRACE printf を有効にします。
-S
CAM_DEBUG_SUBTRACE printf を有効にします。
-X
CAM_DEBUG_XPT printf を有効にします。
-c
CAM_DEBUG_CDB printf を有効にします。これにより、カーネルが、指定したデバイスに送信した SCSI CDB を表示することになります。
-p
CAM_DEBUG_PROBE printf を有効にします。
all
すべてのデバイスについてデバッグ出力を有効にします。
off
すべてのデバイスについてデバッグ出力を無効にします。
bus[ :target[ :lun]]
指定したバス、ターゲット、論理ユニット番号 (lun) についてデバッグ出力を有効にします。論理ユニット番号、もしくはターゲットと論理ユニット番号が指定されない場合は、ワイルドカード指定されたものとして扱います (すなわち、バスだけを指定すると、そのバスのすべてのデバイスについてデバッグ用 printf が有効になります)。
tags
"tagged openings"の数を、表示または設定します。この値は、特定のデバイスに対して同時にキューイング可能なトランザクション数です。デフォルトでは、コマンド固有の引数が無いと (一般的な引数のみを指定すると)、 tags コマンドは、対象のデバイスにキューイング可能なトランザクション数の "soft"最大値を表示します。さらに詳細な情報を得るには、次に説明する -v 引数を指定してください。
-N tags
指定したデバイスのタグ数を設定します。この値は、カーネル中の癖の表 (quirk table) にある最小値と最大値の間にある必要があります。タグ付きキューイングをサポートするほとんどのデバイスのデフォルトは、最小値が 2 で最大値が 255 です。指定したデバイスの最大値と最小値を調べるには、 -v スイッチを使用します。この camcontrol サブコマンドに対する -v スイッチの意味は、後述します。
-q
静かになり、タグ数を報告しません。一般的には、タグ数を設定するときに使用します。
-v
冗長フラグは、 tags 引数に対しては特殊な機能があります。このフラグを指定すると camcontrol は、XPT_GDEV_TYPE CCB のタグ付きキューイング関連フィールドを表示します:
dev_openings
指定されたデバイスに対してキューイング可能なトランザクションの総数です。
dev_active
指定されたデバイスに対して現在キューイングされているトランザクション数です。
devq_openings
トランザクション用のカーネルキュー空間です。通常この数は、dev_openings を反映します。エラーリカバリ時は、例外であり、対象デバイスのキューは、凍結されるか (デバイスは、コマンド受信を許されません)、 dev_openings の数が減じられるか、トランザクションの再実行が行われます。
devq_queued
カーネルキュー内でデバイスが空くのを待っているトランザクション数です。エラーリカバリ中でなければ、通常この数は、0 です。
held
held 数は、周辺装置ドライバが保持する CCB 数です。このような CCB は、丁度完了したものであるか、デバイスによってサービスを受けるために転送層に渡されようとしているものです。保持されている CCB は、対象のデバイスに空きを予約します。
mintags
同時にデバイスにキューイング可能なトランザクション数の、現在の "hard"最小値です。既出の dev_openings 値は、この数より小さくはなり得ません。 mintags のデフォルト値は、2 ですが、デバイスによっては、より大きくまたはより小さく設定され得ます。
maxtags
同時にデバイスにキューイング可能なトランザクション数の、現在の "hard"最大値です。既出の dev_openings は、この値より大きくはなり得ません。 maxtags のデフォルト値は、255 ですが、デバイスによっては、より大きくまたはより小さく設定され得ます。
negotiate
様々な通信パラメータを、表示またはネゴシエートします。コントローラによっては、特定の値の設定や変更をサポートしません。例えば Adaptec 174x コントローラは、デバイスの同期レートやオフセットの変更をサポートしません。あるパラメータの設定をサポートしないとコントローラが示す場合、 camcontrol ユーティリティは、そのパラメータの設定を試みません。コントローラがサポートするものを調べるには、 -v フラグを使用します。 negotiate コマンドでの -v フラグの意味は、後述します。また、コントローラドライバによっては、下位のコントローラがあるネゴシエーションパラメータの変更をサポートしているにもかかわらず、そのネゴシエーションパラメータの設定をサポートしません。 Advansys ワイドコントローラのように、コントローラの同期ネゴシエーションの有効と無効をサポートしているにもかかわらず、同期ネゴシエーションレートの設定をサポートしないコントローラがあります。
-a
ネゴシエーション設定がすぐに効果を持つようにするため、対象デバイスに Test Unit Ready コマンドを送ります。
-c
現在のネゴシエーション設定を、表示または設定します。これがデフォルトです。
-D enable|disable
切断 (disconnection) を、有効または無効にします。
-M mode
ATA モードを設定します。
-O offset
コマンド遅延オフセットを設定します。
-q
静かになり、なにも表示しません。一般的には、パラメータを設定したいが状態情報は、不要であるときに有用です。
-R syncrate
デバイスの同期レートを変更します。同期レートは、MHz で指定される浮動小数点値です。例えば‘20’としては、‘20.000’が正しい値です。
-T enable|disable
デバイスのタグ付きキューイングを、有効または無効にします。
-U
ユーザのネゴシエーション設定を、表示または設定します。デフォルトでは、現在のネゴシエーション設定を表示または設定します。
-v
冗長フラグは、 negotiate サブコマンドに対しては、特殊な意味があります。このフラグを指定すると camcontrol は、コントローラデバイスに送った Path Inquiry (XPT_PATH_INQ) CCB の内容を表示します。
-W bus_width
デバイスとネゴシエートするバス幅を指定します。バス幅は、ビット数で指定します。指定可能な値は、8, 16, 32 のいずれかのビット数です。設定が効果を持つためには、そのバス幅をコントローラがサポートする必要があります。

一般的には、あるデバイスの同期レートとオフセット設定が効果をあらわすのは、そのデバイスに対してコマンドが送られてからです。前述の -a スイッチは、ネゴシエーションパラメータが効果をあらわすようにするため、自動的に Test Unit Ready をデバイスに送ります。

format
SCSI FORMAT UNIT コマンドを指定したデバイスに送ります。

警告! 警告! 警告!

ディスクをローレベルフォーマットすると、ディスク上の「すべて」のデータを破壊します。このコマンドを発行するときには、非常に注意してください。本当は、ローレベルフォーマットが不要なディスクに対し、多くのユーザがローレベルフォーマットを行っています。ローレベルフォーマットが必要となる状況は、比較的少ないです。ローレベルフォーマットが必要となる理由のひとつは、ディスクの物理セクタの大きさを変えた後でディスクを初期化するためです。ローレベルフォーマットが必要となる別の理由は、ディスクへの読み込みまたは書き込みの要求に対して "medium format corrupted" (メディアフォーマットが壊れている) エラーとなる場合に、そのディスクを復活させるためです。

ディスクによっては、他のディスクよりもフォーマットに時間がかかります。フォーマットが完了するために十分なタイムアウト値を、ユーザが指定する必要があります。デフォルトのフォーマットタイムアウトは、3 時間です。ハードディスクによっては、非常に短い期間 (5 分以下の単位) でフォーマット操作が完了します。このような場合のほとんどは、 FORMAT UNIT コマンドをドライブが実際にはサポートをしていないため、すなわちコマンドを受け付けて数分待ってから戻るだけであるためです。

‘format’サブコマンドは、いくつかの引数を取り、デフォルトの動作を変えます。 -q-y の引数は、スクリプトにおいて有用です。

-q
静かになり、状態メッセージを表示しません。しかしながら、本オプションは、質問は、無効化しません。質問を無効化するには、後述の -y 引数を使用してください。
-r
“報告のみ”モードで動作します。これは、ドライブに対して進行中のフォーマットの状態を報告します。
-w
非即時のフォーマットコマンドを発行します。デフォルトでは、 camcontrol は、FORMAT UNIT コマンドを即時ビット (immediate bit) をセットして発行します。これは、フォーマットが実際に完了する前に、即時にフォーマットコマンドを返すよう、デバイスに指示します。そして camcontrol が SCSI センス情報を毎秒デバイスから収集し、フォーマット処理の進捗を判断します。 -w 引数が指定されると、 camcontrol は、非即時のフォーマットコマンドを発行します。この場合、ディスクの何パーセントがフォーマットされたのかをユーザへ知らせるための表示は、行われません。
-y
質問をしません。デフォルトでは、 camcontrol は、ユーザに対し、対象のディスクを本当にフォーマットしたいのか、そしてフォーマットコマンドのデフォルトタイムアウトで良いかを質問します。タイムアウトをコマンドラインで指定した場合、タイムアウトは、質問されません。
sanitize
指定されたデバイスに SCSI SANITIZE コマンドを発行します。

警告! 警告! 警告!

キャッシュ中とディスクのすべてのデータは、破壊されるか、またはアクセスできなくなります。データの復旧は、できません。このコマンドを発行するとき、極度の注意を払ってください。

‘sanitize’サブコマンドは、そのデフォルト振る舞いを修正するいくつかの引数を取ります。 -q-y 引数は、スクリプトに役に立ちます。

-a operation
実行する sanitize 操作を指定します。
overwrite
ユーザに供給されたデータパターンをデバイスに 1 回以上書き込むことによって、上書き (overwrite) 操作を実行します。パターンは、 -P 引数によって与えられます。回数は、 -c 引数によって与えられます。
block
ブロックの削除操作を実行します。すべてのデバイスのブロックは、ベンダ定義の値、一般的に、0 に設定されます。
crypto
暗号削除操作を実行します。暗号鍵は、データの解読を防ぐために変更されます。
exitfailure
以前の失敗された sanitize 操作を終了します。失敗された sanitize 操作は、 -U 引数によって提供されるように、制限のない完了モードで実行されたなら、単に終了されます。
-c passes
‘上書き’ (overwrite) 操作を実行するときのパスの数。有効な値は、1 と 31 の間です。デフォルトは、1 です。
-I
‘上書き’ (overwrite) 操作を実行するとき、パターンは、連続するパス間で反転されます。
-P pattern
‘上書き’ (overwrite) 操作を実行するとき、使用するパターンを含んでいるファイルのパス。パターンは、各ブロックを満たすために必要なように繰り返されます。
-q
静かにします、あらゆる状態メッセージも印刷 (表示) しません。しかしながら、このオプションは、質問を無効にしません。質問を無効にするためには、下記の -y 引数を使用します。
-U
制限のない完了モードで sanitize を実行します。操作が失敗するなら、それは、後で‘exitfailure’操作で終了します。
-r
“報告書のみ” (report only) モードで実行します。これは、ドライブで既に実行している sanitize で状態を報告します。
-w
即時でない sanitize コマンドを発行します。デフォルトで、 camcontrol は、即時のビット設定がある SANITIZE コマンドを発行します。これは、sanitize が実際に完了する前に、直ちに sanitize コマンドを返ることをデバイスに伝えます。次に、 camcontrol は、sanitize プロセスで、それがどれくらい進んでいるか決定するために、秒毎にデバイスから SCSI センス情報を集めます。 -w 引数が指定されるなら、 camcontrol は、即時でない sanitize コマンドを発行し、ディスクの何パーセンテージが sanitize されたかをユーザが知るための、少しも情報を印刷することができません。
-y
どんな質問もおこないません。デフォルトで、 camcontrol は、ユーザが実際に問題のディスクを sanitize にしたいなら、そしてまた、デフォルトの sanitize コマンドのタイムアウトが受け付け可能であるなら、ユーザに問い合わせます。ユーザは、タイムアウトがコマンド行で指定されるなら、タイムアウトに関して問い合わせしません。
idle
ATA デバイスを IDLE 状態にします。オプションのパラメータ ( -t) は、自動的に秒単位でアイドルのタイマ値を指定します。値 0 は、タイマを無効にします。
standby
ATA デバイスを STANDBY 状態にします。オプションのパラメータ ( -t) は、自動的に秒単位でスタンドバイのタイマ値を指定します。値 0 は、タイマを無効にします。
sleep
ATA デバイスを SLEEP 状態にします。この状態のデバイスから脱出する唯一の方法は、リセットされることに注意してください。
security
ATA 識別コマンド (0xec) を使用して、セキュリティの設定を更新するか、または報告します。デフォルトで、 camcontrol は、デバイスのセキュリティのサポートと関連する設定を印刷 (表示) します。 security コマンドは、いくつかの引数を取ります:
-d pwd

デバイスの設定されたセキュリティレベルにしたがって選択されたユーザのための与えられたパスワードを使用してデバイスのセキュリティを無効にします。

-e pwd

選択されたユーザのための与えられたパスワードを使用してデバイスを消去します。

警告! 警告! 警告!

安全な消去を発行することは、デバイスのユーザデータを すべて消去します、そして、完了するために数時間かかります。

このコマンドが SSD ドライブ対して使用されるとき、そのすべてのセルは、製造所のデフォルトの書き込み性能に戻して、空としてマークされます。 SSD について、この動作は、通常ほんの数秒かかります。

-f

指定されたデバイスのセキュリティ設定をフリーズ (固定) します。

コマンドの完了の後に、デバイスのロックモードを更新する他のコマンドは、コマンドを異常終了するものとします。フリーズモードは、電源オフまたはハードウェアのリセットによって無効にされます。

-h pwd

選択されたユーザのために与えられたパスワードを使用してデバイスを強化された削除します。

警告! 警告! 警告!

強化された安全な消去を発行することは、デバイスのユーザデータを すべて消去します、そして、完了するために数時間かかります。

強化された削除は、すべての利用者データ領域への前もって定義したデータのパターンを書き込みます、以前に書かれたすべての利用者データは、再割り付けのためにもはや使用されていないセクタを含めて、上書きされるものとします。

-k pwd

デバイスの設定されたセキュリティレベルにしたがって、選択されたユーザのために与えられたパスワードを使用してデバイスをアンロックします。

-l high|maximum

-s pwd コマンドを発行するとき、どのセキュリティレベルを設定するかを指定します。マスタパスワードがデバイスをアンロックするために使用されるとき、セキュリティレベルは、デバイスの振る舞いを決定します。セキュリティレベルが高く設定されるとき、デバイスは、 unlock コマンドとアンロックするマスタパスワードを要求します。セキュリティレベルが最大に設定されるとき、デバイスは、アンロックするマスタパスワードで安全消去を要求します。

このオプションは、セキュリティアクションコマンドの 1 つと共に使用されなければなりません。

デフォルトは、 high です。

-q

静かにします、あらゆる状態メッセージを印刷 (表示) しません。しかしながら、このオプションは、質問を無効にしません。質問を無効にするためには、下記の -y 引数を使用します。

-s pwd

選択されたたユーザのために与えられたパスワードを使用するデバイス (セキュリティを有効にする) のパスワード。 -e pwd のような他のオプションと、このオプションを組み合わせることができます。

マスタパスワードは、ユーザのパスワードに追加して設定されます。マスタパスワードの目的は、ユーザに秘密にされるパスワードを確立することを管理者に可能とし、ユーザパスワードが失われるなら、デバイスをアンロックするために使用されます。

注: マスタパスワードを設定することは、デバイスのセキュリティを有効にしません。

マスタパスワードが設定され、ドライブがマスタリビジョンコード (Master Revision Code) 機能をサポートしているなら、マスタパスワードリビジョンコードは、減少されます。

-T timeout

-e-h の両方で使用される、指定された秒単位で、デフォルトのタイムアウトを上書きします、これは、システムに長いタイムアウトを正確に処理する問題があるなら、役に立ちます。

通常、タイムアウトは、存在するなら、ドライブに格納された情報から計算され、そうでなければ、それは、デフォルトで 2 時間になります。

-U user|master

アクションコマンドを実行するために、どのユーザが設定/使用するかを指定し、有効な値は、user または master で、設定されていなければ、デフォルトは、 master です。

このオプションは、セキュリティアクションコマンドの 1 つと共に使用されなければなりません。

デフォルトは、 master です。

-y

確認のためのプロンプトを出さずに、 -e のような危険なオプションを yes とします。

あらゆるアクションコマンドのために指定されたパスワードが指定されたユーザのために設定されたパスワードと一致しないなら、コマンドは、失敗します。

すべてのパスワードは、32 文字に制限され、より長いパスワードは、失敗します。

hpa
ホスト防護領域 (Host Protected Area) の詳細を更新するか、または報告します。デフォルトで、 camcontrol は、デバイスの HPA サポートと関連する設定を印刷 (表示) します。 hpa コマンドは、いくつかのオプションの引数を取ります:
-f

指定されたデバイスの HPA 設定をフリーズします。

コマンドが完了した後に、HPA 設定を更新する他のコマンドは、異常終了したコマンドと見なします。フリーズモードは、電源オフまたはハードウェアにリセットによって無効にされます。

-l

アンロックする呼び出しが成功するか、または次の電源オンのリセットが生じるまで、デバイスの HPA 設定をロックします。

-P

電源オンのリセットまたはハードウェアのリセットにわたって HPA の最大のセクタを存続させます。これは、 -s max_sectors と組み合わせて使用されなければなりません。

-p pwd

アンロックの呼び出しのために要求される HPA 設定のパスワードを設定します。

-q

静かにします、あらゆる状態メッセージを印刷 (表示) しません。このオプションは、問い合わせを無効にしません。問い合わせを無効にするためには、下記の -y 引数を使用します。

-s max_sectors

デバイスの最大のユーザにアクセス可能なセクタを設定します。これは、デバイスが報告するセクタの数を変更します。

警告! 警告! 警告!

このオプションを使用してデバイスの最大セクタを変更することは、指定されたアクセス不可能な値を越えてデバイスでデータを作成します。

デバイスの電源のオンのリセットまたはハードウェアのリセットなしに、成功した -s max_sectors 呼び出しだけを行うことができます。

-U pwd

与えられたパスワードを使用して指定されたデバイスの HPA 設定をアンロックします。指定されたパスワードが -p pwd によって設定されたパスワードと一致しないなら、コマンドは、失敗します。

パスワード不一致のために、5 回の失敗したアンロック呼び出しの後に、デバイスは、電源オンのリセットの後まで、付加的なアンロック呼び出しを拒絶します。

-y

確認のためのプロンプトを出さずに、 -e のような危険なオプションに yes を承認します。

すべての HPA コマンドのためのパスワードは、32 文字に制限されていて、より長いパスワードは、失敗します。

fwdownload
提供されたイメージファイルを使用する指定された SCSI デバイスのプログラムのファームウェア。

サポートされるベンダの現在のリストは、次の通りです:

  • HITACHI
  • HP
  • IBM
  • PLEXTOR
  • QUANTUM
  • SAMSUNG
  • SEAGATE

警告! 警告! 警告!

各ベンダとは異なったデバイスモデルが fwdownload コマンドで正確に動作することを確認するためのテストは、ほとんど行われていません。サポートされたリストに現れるベンダ名は、そのベンダからの少なくとも 1 つのデバイスタイプのファームウェアが fwdownload コマンドで成功してプログラムされたことのみ意味します。リストされたベンダからのデバイスを壊さないという保証がないので、このコマンドを使用するとき、特別の注意をはらうべきです。ファームウェアの更新を行なう前に、デバイスのデータの最近のバックアップを取っていることを確認してください。

-f fw_image
指定されたデバイスにダウンロードされるファームウェアイメージファイルへのパス。
-y
確認を求めません。
-s
シミュレーションモードで実行します。送られるパケットサイズは、表示されますが、実際のパケットは、デバイスに送られません。シミュレーションモードでは、確認は、求められません。
-v
失敗の場合のセンス情報を示すことに加えて、冗長なオプションによって、 camcontrol は、fwdownload コマンドによってデバイスに送られるすべてのファームウェアセグメントのためのラインを出力させます -- シミュレーションモードで示されるものと同様に。
help
冗長な使用法の情報を印刷 (表示) します。

環境変数

SCSI_MODES 変数によって、ユーザは、代わりのモードページ書式ファイルを指定することができます。

EDITOR 変数は、モードページを編集するとき、 camcontrol が開始するテキストエディタを決定します。

関連ファイル

/usr/share/misc/scsi_modes
これは、SCSI モードの書式データベースです。
/dev/xpt0
これは、トランスポート層のデバイスです。
/dev/pass*
これは、CAM アプリケーションのパススルーデバイスです。

使用例

camcontrol eject -n cd -u 1 -v

cd1 から CD をイジェクトし、コマンド実行に失敗した場合は、SCSI センス情報を出力します。

camcontrol tur da0

SCSI test unit ready コマンドを da0 に送信します。 camcontrol ユーティリティは、そのディスクがレディ状態であるかどうかを報告しますが、 -v スイッチが指定されていないため、コマンド実行に失敗してもセンス情報を表示しません。

camcontrol tur da1 -E -C 4 -t 50 -v

SCSI test unit ready コマンドを da1 に送信します。カーネルエラーリカバリを有効にします。リトライカウントを 4 に、タイムアウトを 50 秒に設定します。コマンド実行に失敗した場合 ( -v フラグがあるので) センス情報が出力されます。エラーリカバリが設定されているので、ディスクが回転していない場合は、回転させられます。 camcontrol ユーティリティは、ディスクがレディ状態かどうかを報告します。

camcontrol cmd -n cd -u 1 -v -c "3C 00 00 00 00 00 00 00 0e 00"\ 
 -i 0xe "s1 i3 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1"

READ BUFFER コマンド (0x3C) を cd1 に対して発行します。 cd1 のバッファサイズと cd1 のキャッシュの最初の 10 バイトを表示します。コマンド実行に失敗した場合 SCSI センス情報を表示します。

camcontrol cmd -n cd -u 1 -v -c "3B 00 00 00 00 00 00 00 0e 00"\ 
 -o 14 "00 00 00 00 1 2 3 4 5 6 v v v v" 7 8 9 8

WRITE BUFFER コマンド (0x3B) を cd1 に対して発行します。 (予約済の) 4 バイトヘッダを含まないデータ 10 バイトを書き込みます。コマンド実行に失敗した場合センス情報を表示します。このコマンドには、細心の注意を払って下さい。不適切に使用した場合、データが破壊されるかもしれません。

camcontrol modepage da3 -m 1 -e -P 3

da3 のモードページ 1 (Read-Write Error Recover ページ) を編集し、編集結果をそのドライブにセーブします。モードページ 1 には、ディスクドライブの読み出し、書き込みの自動再配置の設定などが含まれます。

camcontrol rescan all

システム中のすべての SCSI バスに対し、追加/削除/変更されたデバイスを再スキャンします。

camcontrol rescan 0

SCSI バス 0 を再スキャンし、追加、削除、変更されたデバイスを探します。

camcontrol rescan 0:1:0

SCSI バス 0, ターゲット 1, 論理ユニット番号 0 を再スキャンし、そのデバイスが追加、削除、変更されたかどうかを調べます。

camcontrol tags da5 -N 24

da5 の同時トランザクション数を 24 に設定します。

camcontrol negotiate -n da -u 4 -T disable

da4 のタグ付きキューイングを無効にします。

camcontrol negotiate -n da -u 3 -R 20.000 -O 15 -a

同期レート 20MHz とオフセット 15 を、da3 とネゴシエートします。その後 Test Unit Ready コマンドを送り、設定が効果をあらわすようにします。

camcontrol smpcmd ses0 -v -r 4 "40 0 00 0" -R 1020 "s9 i1"

SMP REPORT GENERAL コマンドを ses0 に送り、それが含む PHY の数を表示します。コマンドが失敗するなら、SMP エラーを表示します。

camcontrol security ada0

ada0 のためのセキュリティサポートと設定を報告します。

camcontrol security ada0 -u user -s MyPass

パスワード MyPass でデバイス ada0 でセキュリティを有効にします。

camcontrol security ada0 -u user -e MyPass

ユーザパスワード MyPass で有効にされたセキュリティがある安全が削除された ada0。

警告! 警告! 警告!

これは、デバイスからデータを すべて削除する ので、使用する前にデータをバックアップしてください!

製造所のデフォルトの書き込み性能に戻すために SSD ドライブ対して、このコマンドを使用することができます。

camcontrol hpa ada0

(また、識別のよって報告された) ada0 のための HPA サポートと設定を報告します。

camcontrol hpa ada0 -s 10240

最大の報告されたセクタを 10240 に設定する ada0 の HPA を有効にします。

警告! 警告! 警告!

これは、電源オンまたはハードウェアのリセットの後のみに、行うことができる、 HPA が、HPA をデバイスの在来の最大セクタに設定することによって無効にされるまで、この制限を追えてデバイスですべてのデータへの アクセスを抑制します

アクティブなファイルシステムがあるデバイスで、これを使用 しないでください!

歴史

camcontrol ユーティリティは、 FreeBSD 3.0 ではじめて登場しました。

モードページ編集のコードと任意の SCSI コマンドのコードは、 Julian Elischer と Peter Dufault が書いた、かつての scsi(8) ユーティリティと scsi(3) ライブラリのものに基づいています。 scsi(8) プログラムは、 386BSD-0.1.2.4 ではじめて登場し、 FreeBSD 2.0.5FreeBSD ではじめて登場しました。

作者

Kenneth Merry <ken@FreeBSD.org>

バグ

コマンド行引数を解釈するコードは、どのサブコマンドが複数の引数を取るかを知りません。ですから、たとえば、

camcontrol cmd -n da -u 1 -c "00 00 00 00 00 v" 0x00 -v

のようなことを試みた場合、test unit ready コマンドで得られるセンス情報は、出力されません。というのは、 -c の 2 番目の引数 (0x00) を見た時点で、 camcontrol の最初の getopt(3) 呼び出しが終ってしまうためです。この動作を修正するには、ある程度の規模のコードを書き加えるか、 getopt(3) インタフェースを変更するかのどちらかが必要でしょう。この問題を回避するもっとも良い方法は、常に camcontrol 共通引数をコマンド固有の引数の前に指定していることを確認することです。

September 6, 2013 FreeBSD