NAME¶
camcontrol —
CAM control program
SYNOPSIS¶
camcontrol |
⟨command⟩ [device
id] [generic args]
[command args] |
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]
⟨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 |
idle [device id]
[generic args]
[-t
time] |
camcontrol |
standby [device id]
[generic args]
[-t
time] |
camcontrol |
sleep [device id]
[generic args] |
DESCRIPTION¶
The
camcontrol utility is designed to provide a way for users
to access and control the
FreeBSD CAM subsystem.
The
camcontrol utility can cause a loss of data and/or system
crashes if used improperly. Even expert users are encouraged to exercise
caution when using this command. Novice users should stay away from this
utility.
The
camcontrol utility has a number of primary functions, many
of which support an optional device identifier. A device identifier can take
one of three forms:
- deviceUNIT
- Specify a device name and unit number combination, like
"da5" or "cd3".
- bus:target
- Specify a bus number and target id. The bus number can be
determined from the output of “camcontrol devlist”. The lun
defaults to 0.
- bus:target:lun
- Specify the bus, target and lun for a device. (e.g.
1:2:0)
The device identifier, if it is specified,
must come
immediately after the function name, and before any generic or
function-specific arguments. Note that the
-n and
-u arguments described below will override any device name
or unit number specified beforehand. The
-n and
-u arguments will
not override a specified
bus:target or bus:target:lun, however.
Most of the
camcontrol primary functions support these generic
arguments:
- -C
count
- SCSI command retry count. In order for this to work, error
recovery (-E) must be turned on.
- -E
- Instruct the kernel to perform generic SCSI error recovery
for the given command. This is needed in order for the retry count
(-C) to be honored. Other than retrying commands, the
generic error recovery in the code will generally attempt to spin up
drives that are not spinning. It may take some other actions, depending
upon the sense code returned from the command.
- -n
dev_name
- Specify the device type to operate on, e.g. "da",
"cd".
- -t
timeout
- SCSI command timeout in seconds. This overrides the default
timeout for any given command.
- -u
unit_number
- Specify the device unit number, e.g. "1",
"5".
- -v
- Be verbose, print out sense information for failed SCSI
commands.
Primary command functions:
- devlist
- List all physical devices (logical units) attached to the
CAM subsystem. This also includes a list of peripheral drivers attached to
each device. With the -v argument, SCSI bus number,
adapter name and unit numbers are printed as well.
- periphlist
- List all peripheral drivers attached to a given physical
device (logical unit).
- tur
- Send the SCSI test unit ready (0x00) command to the given
device. The camcontrol utility will report whether the
device is ready or not.
- inquiry
- Send a SCSI inquiry command (0x12) to a device. By default,
camcontrol will print out the standard inquiry data,
device serial number, and transfer rate information. The user can specify
that only certain types of inquiry data be printed:
- -D
- Get the standard inquiry data.
- -S
- Print out the serial number. If this flag is the only
one specified, camcontrol will not print out
"Serial Number" before the value returned by the drive. This
is to aid in script writing.
- -R
- Print out transfer rate information.
- identify
- Send a ATA identify command (0xec) to a device.
- reportluns
- Send the SCSI REPORT LUNS (0xA0) command to the given
device. By default, camcontrol will print out the list
of logical units (LUNs) supported by the target device. There are a couple
of options to modify the output:
- -c
- Just print out a count of LUNs, not the actual LUN
numbers.
- -l
- Just print out the LUNs, and don't print out the
count.
- -r
reporttype
- Specify the type of report to request from the target:
- default
- Return the default report. This is the
camcontrol default. Most targets will support
this report if they support the REPORT LUNS command.
- wellknown
- Return only well known LUNs.
- all
- Return all available LUNs.
camcontrol will try to print out LUN numbers in a
reasonable format. It can understand the peripheral, flat, LUN and
extended LUN formats.
- readcap
- Send the SCSI READ CAPACITY command to the given device and
display the results. If the device is larger than 2TB, the SCSI READ
CAPACITY (16) service action will be sent to obtain the full size of the
device. By default, camcontrol will print out the last
logical block of the device, and the blocksize of the device in bytes. To
modify the output format, use the following options:
- -b
- Just print out the blocksize, not the last block or
device size. This cannot be used with -N or
-s.
- -h
- Print out the device size in human readable (base 2, 1K
== 1024) format. This implies -N and cannot be used
with -q or -b.
- -H
- Print out the device size in human readable (base 10,
1K == 1000) format.
- -N
- Print out the number of blocks in the device instead of
the last logical block.
- -q
- Quiet, print out the numbers only (separated by a comma
if -b or -s are not
specified).
- -s
- Print out the last logical block or the size of the
device only, and omit the blocksize.
- start
- Send the SCSI Start/Stop Unit (0x1B) command to the given
device with the start bit set.
- stop
- Send the SCSI Start/Stop Unit (0x1B) command to the given
device with the start bit cleared.
- load
- Send the SCSI Start/Stop Unit (0x1B) command to the given
device with the start bit set and the load/eject bit set.
- eject
- Send the SCSI Start/Stop Unit (0x1B) command to the given
device with the start bit cleared and the load/eject bit set.
- rescan
- Tell the kernel to scan all busses in the system (with the
all argument), the given bus (XPT_SCAN_BUS), or
bus:target:lun (XPT_SCAN_LUN) for new devices or devices that have gone
away. The user may specify a scan of all busses, a single bus, or a lun.
Scanning all luns on a target is not supported.
- reset
- Tell the kernel to reset all busses in the system (with the
all argument) or the given bus (XPT_RESET_BUS) by
issuing a SCSI bus reset for that bus, or to reset the given
bus:target:lun (XPT_RESET_DEV), typically by issuing a BUS DEVICE RESET
message after connecting to that device. Note that this can have a
destructive impact on the system.
- defects
- Send the SCSI READ DEFECT DATA (10) command (0x37) to the
given device, and print out any combination of: the total number of
defects, the primary defect list (PLIST), and the grown defect list
(GLIST).
- -f
format
- The three format options are: block,
to print out the list as logical blocks, bfi, to
print out the list in bytes from index format, and
phys, to print out the list in physical sector
format. The format argument is required. Most drives support the
physical sector format. Some drives support the logical block format.
Many drives, if they do not support the requested format, return the
data in an alternate format, along with sense information indicating
that the requested data format is not supported. The
camcontrol utility attempts to detect this, and
print out whatever format the drive returns. If the drive uses a
non-standard sense code to report that it does not support the
requested format, camcontrol will probably see the
error as a failure to complete the request.
- -G
- Print out the grown defect list. This is a list of bad
blocks that have been remapped since the disk left the factory.
- -P
- Print out the primary defect list.
If neither -P nor -G is specified,
camcontrol will print out the number of defects given in
the READ DEFECT DATA header returned from the drive.
- modepage
- Allows the user to display and optionally edit a SCSI mode
page. The mode page formats are located in
/usr/share/misc/scsi_modes. This can be overridden by
specifying a different file in the
SCSI_MODES
environment variable. The modepage command takes several
arguments:
- -d
- Disable block descriptors for mode sense.
- -b
- Displays mode page data in binary format.
- -e
- This flag allows the user to edit values in the mode
page. The user may either edit mode page values with the text editor
pointed to by his
EDITOR
environment variable,
or supply mode page values via standard input, using the same format
that camcontrol uses to display mode page values.
The editor will be invoked if camcontrol detects
that standard input is terminal.
- -l
- Lists all available mode pages.
- -m
mode_page
- This specifies the number of the mode page the user
would like to view and/or edit. This argument is mandatory unless
-l is specified.
- -P
pgctl
- This allows the user to specify the page control field.
Possible values are:
- 0
- Current values
- 1
- Changeable values
- 2
- Default values
- 3
- Saved values
- cmd
- Allows the user to send an arbitrary ATA or SCSI CDB to any
device. The cmd function requires the
-c argument to specify SCSI CDB or the
-a argument to specify ATA Command Block registers
values. Other arguments are optional, depending on the command type. The
command and data specification syntax is documented in
cam_cdbparse(3). NOTE: If the CDB specified causes data
to be transferred to or from the SCSI device in question, you MUST specify
either -i or -o.
- -a
cmd [args]
- This specifies the content of 12 ATA Command Block
registers (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]
- This specifies the SCSI CDB. SCSI CDBs may be 6, 10, 12
or 16 bytes.
- -d
- Specifies DMA protocol to be used for ATA command.
- -f
- Specifies FPDMA (NCQ) protocol to be used for ATA
command.
- -i
len fmt
- This specifies the amount of data to read, and how it
should be displayed. If the format is ‘-’,
len bytes of data will be read from the device
and written to standard output.
- -o
len fmt
[args]
- This specifies the amount of data to be written to a
device, and the data that is to be written. If the format is
‘-’, len bytes of data will be read
from standard input and written to the device.
- -r
fmt
- This specifies that 11 result ATA Command Block
registers should be displayed (status, error, lba_low, lba_mid,
lba_high, device, lba_low_exp, lba_mid_exp, lba_high_exp,
sector_count, sector_count_exp), and how. If the format is
‘-’, 11 result registers will be written to standard
output in hex.
- smpcmd
- Allows the user to send an arbitrary Serial Management
Protocol (SMP) command to a device. The smpcmd function
requires the -r argument to specify the SMP request to
be sent, and the -R argument to specify the format of
the SMP response. The syntax for the SMP request and response arguments is
documented in cam_cdbparse(3).
Note that SAS adapters that support SMP passthrough (at least the currently
known adapters) do not accept CRC bytes from the user in the request and
do not pass CRC bytes back to the user in the response. Therefore users
should not include the CRC bytes in the length of the request and not
expect CRC bytes to be returned in the response.
- -r
len fmt
[args]
- This specifies the size of the SMP request, without the
CRC bytes, and the SMP request format. If the format is
‘-’, len bytes of data will be read
from standard input and written as the SMP request.
- -R
len fmt
[args]
- This specifies the size of the buffer allocated for the
SMP response, and the SMP response format. If the format is
‘-’, len bytes of data will be
allocated for the response and the response will be written to
standard output.
- smprg
- Allows the user to send the Serial Management Protocol
(SMP) Report General command to a device. camcontrol
will display the data returned by the Report General command. If the SMP
target supports the long response format, the additional data will be
requested and displayed automatically.
- -l
- Request the long response format only. Not all SMP
targets support the long response format. This option causes
camcontrol to skip sending the initial report
general request without the long bit set and only issue a report
general request with the long bit set.
- smppc
- Allows the user to issue the Serial Management Protocol
(SMP) PHY Control command to a device. This function should be used with
some caution, as it can render devices inaccessible, and could potentially
cause data corruption as well. The -p argument is
required to specify the PHY to operate on.
- -p
phy
- Specify the PHY to operate on. This argument is
required.
- -l
- Request the long request/response format. Not all SMP
targets support the long response format. For the PHY Control command,
this currently only affects whether the request length is set to a
value other than 0.
- -o
operation
- Specify a PHY control operation. Only one
-o operation may be specified. The operation may be
specified numerically (in decimal, hexadecimal, or octal) or one of
the following operation names may be specified:
- nop
- No operation. It is not necessary to specify this
argument.
- linkreset
- Send the LINK RESET command to the phy.
- hardreset
- Send the HARD RESET command to the phy.
- disable
- Send the DISABLE command to the phy. Note that the
LINK RESET or HARD RESET commands should re-enable the phy.
- clearerrlog
- Send the CLEAR ERROR LOG command. This clears the
error log counters for the specified phy.
- clearaffiliation
- Send the CLEAR AFFILIATION command. This clears the
affiliation from the STP initiator port with the same SAS address
as the SMP initiator that requests the clear operation.
- sataportsel
- Send the TRANSMIT SATA PORT SELECTION SIGNAL
command to the phy. This will cause a SATA port selector to use
the given phy as its active phy and make the other phy
inactive.
- clearitnl
- Send the CLEAR STP I_T NEXUS LOSS command to the
PHY.
- setdevname
- Send the SET ATTACHED DEVICE NAME command to the
PHY. This requires the -d argument to specify
the device name.
- -d
name
- Specify the attached device name. This option is needed
with the -o setdevname phy
operation. The name is a 64-bit number, and can be specified in
decimal, hexadecimal or octal format.
- -m
rate
- Set the minimum physical link rate for the phy. This is
a numeric argument. Currently known link rates are:
- 0x0
- Do not change current value.
- 0x8
- 1.5 Gbps
- 0x9
- 3 Gbps
- 0xa
- 6 Gbps
Other values may be specified for newer physical link rates.
- -M
rate
- Set the maximum physical link rate for the phy. This is
a numeric argument. See the -m argument description
for known link rate arguments.
- -T
pp_timeout
- Set the partial pathway timeout value, in microseconds.
See the ANSI SAS Protcol Layer (SPL) specification for more
information on this field.
- -a
enable|disable
- Enable or disable SATA slumber phy power
conditions.
- -A
enable|disable
- Enable or disable SATA partial power conditions.
- -s
enable|disable
- Enable or disable SAS slumber phy power
conditions.
- -S
enable|disable
- Enable or disable SAS partial phy power
conditions.
- smpphylist
- List phys attached to a SAS expander, the address of the
end device attached to the phy, and the inquiry data for that device and
peripheral devices attached to that device. The inquiry data and
peripheral devices are displayed if available.
- -l
- Turn on the long response format for the underlying SMP
commands used for this command.
- -q
- Only print out phys that are attached to a device in
the CAM EDT (Existing Device Table).
- smpmaninfo
- Send the SMP Report Manufacturer Information command to the
device and display the response.
- -l
- Turn on the long response format for the underlying SMP
commands used for this command.
- debug
- Turn on CAM debugging printfs in the kernel. This requires
options CAMDEBUG in your kernel config file. WARNING: enabling debugging
printfs currently causes an EXTREME number of kernel printfs. You may have
difficulty turning off the debugging printfs once they start, since the
kernel will be busy printing messages and unable to service other requests
quickly. The debug function takes a number of arguments:
- -I
- Enable CAM_DEBUG_INFO printfs.
- -P
- Enable CAM_DEBUG_PERIPH printfs.
- -T
- Enable CAM_DEBUG_TRACE printfs.
- -S
- Enable CAM_DEBUG_SUBTRACE printfs.
- -X
- Enable CAM_DEBUG_XPT printfs.
- -c
- Enable CAM_DEBUG_CDB printfs. This will cause the
kernel to print out the SCSI CDBs sent to the specified
device(s).
- all
- Enable debugging for all devices.
- off
- Turn off debugging for all devices
- bus[:target[:lun]]
- Turn on debugging for the given bus, target or lun. If
the lun or target and lun are not specified, they are wildcarded.
(i.e., just specifying a bus turns on debugging printfs for all
devices on that bus.)
- tags
- Show or set the number of "tagged openings" or
simultaneous transactions we attempt to queue to a particular device. By
default, the tags command, with no command-specific
arguments (i.e., only generic arguments) prints out the "soft"
maximum number of transactions that can be queued to the device in
question. For more detailed information, use the -v
argument described below.
- -N
tags
- Set the number of tags for the given device. This must
be between the minimum and maximum number set in the kernel quirk
table. The default for most devices that support tagged queueing is a
minimum of 2 and a maximum of 255. The minimum and maximum values for
a given device may be determined by using the -v
switch. The meaning of the -v switch for this
camcontrol subcommand is described below.
- -q
- Be quiet, and do not report the number of tags. This is
generally used when setting the number of tags.
- -v
- The verbose flag has special functionality for the
tags argument. It causes
camcontrol to print out the tagged queueing related
fields of the XPT_GDEV_TYPE CCB:
- dev_openings
- This is the amount of capacity for transactions
queued to a given device.
- dev_active
- This is the number of transactions currently queued
to a device.
- devq_openings
- This is the kernel queue space for transactions.
This count usually mirrors dev_openings except during error
recovery operations when the device queue is frozen (device is not
allowed to receive commands), the number of dev_openings is
reduced, or transaction replay is occurring.
- devq_queued
- This is the number of transactions waiting in the
kernel queue for capacity on the device. This number is usually
zero unless error recovery is in progress.
- held
- The held count is the number of CCBs held by
peripheral drivers that have either just been completed or are
about to be released to the transport layer for service by a
device. Held CCBs reserve capacity on a given device.
- mintags
- This is the current "hard" minimum number
of transactions that can be queued to a device at once. The
dev_openings value above cannot go below
this number. The default value for mintags
is 2, although it may be set higher or lower for various
devices.
- maxtags
- This is the "hard" maximum number of
transactions that can be queued to a device at one time. The
dev_openings value cannot go above this
number. The default value for maxtags is
255, although it may be set higher or lower for various
devices.
- negotiate
- Show or negotiate various communication parameters. Some
controllers may not support setting or changing some of these values. For
instance, the Adaptec 174x controllers do not support changing a device's
sync rate or offset. The camcontrol utility will not
attempt to set the parameter if the controller indicates that it does not
support setting the parameter. To find out what the controller supports,
use the -v flag. The meaning of the -v
flag for the negotiate command is described below. Also,
some controller drivers do not support setting negotiation parameters,
even if the underlying controller supports negotiation changes. Some
controllers, such as the Advansys wide controllers, support enabling and
disabling synchronous negotiation for a device, but do not support setting
the synchronous negotiation rate.
- -a
- Attempt to make the negotiation settings take effect
immediately by sending a Test Unit Ready command to the device.
- -c
- Show or set current negotiation settings. This is the
default.
- -D
enable|disable
- Enable or disable disconnection.
- -M
mode
- Set ATA mode.
- -O
offset
- Set the command delay offset.
- -q
- Be quiet, do not print anything. This is generally
useful when you want to set a parameter, but do not want any status
information.
- -R
syncrate
- Change the synchronization rate for a device. The sync
rate is a floating point value specified in MHz. So, for instance,
‘20.000’ is a legal value, as is ‘20’.
- -T
enable|disable
- Enable or disable tagged queueing for a device.
- -U
- Show or set user negotiation settings. The default is
to show or set current negotiation settings.
- -v
- The verbose switch has special meaning for the
negotiate subcommand. It causes
camcontrol to print out the contents of a Path
Inquiry (XPT_PATH_INQ) CCB sent to the controller driver.
- -W
bus_width
- Specify the bus width to negotiate with a device. The
bus width is specified in bits. The only useful values to specify are
8, 16, and 32 bits. The controller must support the bus width in
question in order for the setting to take effect.
In general, sync rate and offset settings will not take effect for a device
until a command has been sent to the device. The -a
switch above will automatically send a Test Unit Ready to the device so
negotiation parameters will take effect.
- format
- Issue the SCSI FORMAT UNIT command to the named device.
WARNING! WARNING! WARNING!
Low level formatting a disk will destroy ALL data on the disk. Use extreme
caution when issuing this command. Many users low-level format disks that
do not really need to be low-level formatted. There are relatively few
scenarios that call for low-level formatting a disk. One reason for
low-level formatting a disk is to initialize the disk after changing its
physical sector size. Another reason for low-level formatting a disk is to
revive the disk if you are getting "medium format corrupted"
errors from the disk in response to read and write requests.
Some disks take longer than others to format. Users should specify a timeout
long enough to allow the format to complete. The default format timeout is
3 hours, which should be long enough for most disks. Some hard disks will
complete a format operation in a very short period of time (on the order
of 5 minutes or less). This is often because the drive does not really
support the FORMAT UNIT command -- it just accepts the command, waits a
few minutes and then returns it.
The ‘format’ subcommand takes several arguments that modify its
default behavior. The -q and -y
arguments can be useful for scripts.
- -q
- Be quiet, do not print any status messages. This option
will not disable the questions, however. To disable questions, use the
-y argument, below.
- -r
- Run in “report only” mode. This will report
status on a format that is already running on the drive.
- -w
- Issue a non-immediate format command. By default,
camcontrol issues the FORMAT UNIT command with the
immediate bit set. This tells the device to immediately return the
format command, before the format has actually completed. Then,
camcontrol gathers SCSI sense information from the
device every second to determine how far along in the format process
it is. If the -w argument is specified,
camcontrol will issue a non-immediate format
command, and will be unable to print any information to let the user
know what percentage of the disk has been formatted.
- -y
- Do not ask any questions. By default,
camcontrol will ask the user if he/she really wants
to format the disk in question, and also if the default format command
timeout is acceptable. The user will not be asked about the timeout if
a timeout is specified on the command line.
- idle
- Put ATA device into IDLE state. Optional parameter
(-t) specifies automatic standby timer value in seconds.
Value 0 disables timer.
- standby
- Put ATA device into STANDBY state. Optional parameter
(-t) specifies automatic standby timer value in seconds.
Value 0 disables timer.
- sleep
- Put ATA device into SLEEP state. Note that the only way get
device out of this state may be reset.
- help
- Print out verbose usage information.
ENVIRONMENT¶
The
SCSI_MODES
variable allows the user to specify an
alternate mode page format file.
The
EDITOR
variable determines which text editor
camcontrol starts when editing mode pages.
FILES¶
- /usr/share/misc/scsi_modes
- is the SCSI mode format database.
- /dev/xpt0
- is the transport layer device.
- /dev/pass*
- are the CAM application passthrough devices.
EXAMPLES¶
camcontrol eject -n cd -u 1 -v
Eject the CD from cd1, and print SCSI sense information if the command fails.
camcontrol tur da0
Send the SCSI test unit ready command to da0. The
camcontrol
utility will report whether the disk is ready, but will not display sense
information if the command fails since the
-v switch was not
specified.
camcontrol tur da1 -E -C 4 -t 50 -v
Send a test unit ready command to da1. Enable kernel error recovery. Specify a
retry count of 4, and a timeout of 50 seconds. Enable sense printing (with the
-v flag) if the command fails. Since error recovery is
turned on, the disk will be spun up if it is not currently spinning. The
camcontrol utility will report whether the disk is ready.
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"
Issue a READ BUFFER command (0x3C) to cd1. Display the buffer size of cd1, and
display the first 10 bytes from the cache on cd1. Display SCSI sense
information if the command fails.
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
Issue a WRITE BUFFER (0x3B) command to cd1. Write out 10 bytes of data, not
including the (reserved) 4 byte header. Print out sense information if the
command fails. Be very careful with this command, improper use may cause data
corruption.
camcontrol modepage da3 -m 1 -e -P 3
Edit mode page 1 (the Read-Write Error Recover page) for da3, and save the
settings on the drive. Mode page 1 contains a disk drive's auto read and write
reallocation settings, among other things.
camcontrol rescan all
Rescan all SCSI busses in the system for devices that have been added, removed
or changed.
camcontrol rescan 0
Rescan SCSI bus 0 for devices that have been added, removed or changed.
camcontrol rescan 0:1:0
Rescan SCSI bus 0, target 1, lun 0 to see if it has been added, removed, or
changed.
camcontrol tags da5 -N 24
Set the number of concurrent transactions for da5 to 24.
camcontrol negotiate -n da -u 4 -T disable
Disable tagged queueing for da4.
camcontrol negotiate -n da -u 3 -R 20.000 -O 15 -a
Negotiate a sync rate of 20MHz and an offset of 15 with da3. Then send a Test
Unit Ready command to make the settings take effect.
camcontrol smpcmd ses0 -v -r 4 "40 0 00 0" -R 1020 "s9 i1"
Send the SMP REPORT GENERAL command to ses0, and display the number of PHYs it
contains. Display SMP errors if the command fails.
SEE ALSO¶
cam(3),
cam_cdbparse(3),
cam(4),
pass(4),
xpt(4)
HISTORY¶
The
camcontrol utility first appeared in
FreeBSD 3.0.
The mode page editing code and arbitrary SCSI command code are based upon code
in the old
scsi(8) utility and
scsi(3)
library, written by Julian Elischer and Peter Dufault. The
scsi(8) program first appeared in
386BSD-0.1.2.4, and first appeared in
FreeBSD in
FreeBSD 2.0.5.
AUTHORS¶
Kenneth Merry ⟨ken@FreeBSD.org⟩
BUGS¶
The code that parses the generic command line arguments does not know that some
of the subcommands take multiple arguments. So if, for instance, you tried
something like this:
camcontrol cmd -n da -u 1 -c "00 00 00 00 00 v" 0x00 -v
The sense information from the test unit ready command would not get printed
out, since the first
getopt(3) call in
camcontrol bails out when it sees the second argument to
-c (0x00), above. Fixing this behavior would take some gross
code, or changes to the
getopt(3) interface. The best way to
circumvent this problem is to always make sure to specify generic
camcontrol arguments before any command-specific
arguments.