NAME¶
atacontrol —
ATA device driver control
program
This utility was deprecated in FreeBSD
9.0. See NOTES.
SYNOPSIS¶
atacontrol |
⟨command⟩
args |
atacontrol |
attach channel |
atacontrol |
detach channel |
atacontrol |
reinit channel |
atacontrol |
create type
[interleave]
disk0 ... diskN |
atacontrol |
addspare raid disk |
atacontrol |
mode device
[mode] |
atacontrol |
spindown device
[seconds] |
DESCRIPTION¶
The
atacontrol utility is a control program that provides the
user access and control to the
FreeBSD
ata(4) subsystem.
The
atacontrol utility can cause severe system crashes and
loss of data if used improperly. Please exercise caution when using this
command!
The
channel argument is the ATA channel device (e.g.,
ata0) on which to operate. The following commands are supported:
- attach
- Attach an ATA channel. Devices on the
channel are probed and attached as is done on boot.
- detach
- Detach an ATA channel. Devices on the
channel are removed from the kernel, and all outstanding transfers etc.
are returned back to the system marked as failed.
- reinit
- Reinitialize an ATA channel. Both
devices on the channel are reset and initialized to the parameters the ATA
driver has stored internally. Devices that have gone bad and no longer
respond to the probe, or devices that have physically been removed, are
removed from the kernel. Likewise are devices that show up during a reset,
probed and attached.
- create
- Create a type ATA RAID. The type can
be RAID0 (stripe), RAID1 (mirror),
RAID0+1, SPAN or
JBOD. In case the RAID has a RAID0
component, the interleave must be specified in
number of sectors. The RAID will be created of the individual disks named
disk0 ... diskN.
Although the ATA driver allows for creating an ATA RAID on disks with any
controller, there are restrictions. It is only possible to boot on an
array if it is either located on a “real” ATA RAID controller
like the Promise or Highpoint controllers, or if the RAID declared is of
RAID1 or SPAN type; in case of a
SPAN, the partition to boot must reside on the first
disk in the SPAN.
- delete
- Delete a RAID array on a RAID capable ATA controller.
- addspare
- Add a spare disk to an existing RAID.
- rebuild
- Rebuild a RAID1 array on a RAID capable ATA
controller.
- status
- Get the status of an ATA RAID.
- mode
- Without the mode argument, the
current transfer mode of the device are printed. If the
mode argument is given, the ATA driver is asked to
change the transfer mode to the one given. The ATA driver will reject
modes that are not supported by the hardware. Modes are given like
“
PIO3
”,
“udma2
”,
“udma100
”, case does not matter.
Currently supported modes are: BIOSPIO,
PIO0, PIO1, PIO2,
PIO3, PIO4, WDMA2,
UDMA2 (alias UDMA33),
UDMA4 (alias UDMA66),
UDMA5 (alias UDMA100),
UDMA6 (alias UDMA133),
SATA150, SATA300,
USB, USB1, USB2 and
BIOSDMA.
- cap
- Show detailed info about the device on
device.
- spindown
- Set or report timeout after which the
device will be spun down. To arm the timeout the
device needs at least one more request after setting the timeout. To
disable spindown, set the timeout to zero. No further actions are needed
in this case.
- info
- Show info about the attached devices on the
channel. The device name and manufacture/version
strings are shown.
- list
- Show info about all attached devices on all active
controllers.
EXAMPLES¶
To get information on devices attached to a channel, use the command line:
atacontrol info ata0
To see the devices' current access modes, use the command line:
atacontrol mode ad0
which results in the modes of the devices being displayed as a string like this:
current mode = UDMA100
You can set the mode with
atacontrol and a string like the
above, for example:
atacontrol mode ad0 PIO4
The new modes are set as soon as the
atacontrol command
returns.
The atacontrol command can also be used to create purely software RAID arrays in
systems that do NOT have a "real" hardware RAID card such as a
Highpoint or Promise card. A common scenario is a 1U server such as the HP
DL320 G4 or G5. These servers contain a SATA controller that has 2 channels
that can contain 2 disks per channel, but the servers are wired to only place
a single SATA drive on each channel. These servers do have a
"pseudo" RAID BIOS but it uses a proprietary format that is not
compatible with the ata driver, and thus their RAID bios must be switched off.
Another common scenario would be a Promise UDMA100 controller card that did
not contain the Fasttrack RAID BIOS, but did contain 2 UDMA channels. 1 disk
would be attached to one channel and the other disk would be attached to the
other channel. It is NOT recommended to create such arrays on a
primary/secondary pair on a SINGLE channel since the throughput of the mirror
would be severely compromised, the ability to rebuild the array in the event
of a disk failure would be greatly complicated, and if a disk controller
electronics failed it could wedge the channel and take both disks in the
mirror offline. (which would defeat the purpose of having a mirror in the
first place)
A quick and dirty way to create such a mirrored array on a new system is to boot
off the FreeBSD install CD, do a minimal scratch install, abort out of the
post install questions, and at the command line issue the command:
atacontrol create RAID1 ad4 ad6
then immediately issue a reboot and boot from the installation CD again, and
during the installation, you will now see "ar0" listed as a disk to
install on, and install on that instead of ad4, ad6, etc.
To get information about the status of a RAID array in the system use the
command line:
atacontrol status ar0
A typical output showing good health on a RAID array might be as follows:
ar0: ATA RAID1 subdisks: ad4 ad6 status:
READY
If a disk drive in a RAID1 array dies the system will mark the disk in a DOWN
state and change the array status to DEGRADED. This can ALSO happen in rare
instances due to a power fluctuation or other event causing the system to not
shutdown properly. In that case the output will look like the following:
ar0: ATA RAID1 subdisks: ad4 DOWN status:
DEGRADED
For a mirrored RAID1 system the server WILL ALLOW you to remove a dead SATA disk
drive (if the drive is in a hot-swap tray) without freezing up the system, so
you can remove the disk and while you are obtaining a replacement the server
can run from the active disk. The only caveat is that if the active disk is
ad6, the system most likely will NOT be able to be rebooted since most systems
only support booting from the first disk drive.
To deactivate the DOWN disk ad6 to allow for it to be ejected, use the
following:
atacontrol detach ata3
then eject or remove the disk. Note that this only works if the 2 disks in the
mirror are on separate channels (which is the standard setup for 1-U servers
like the HP DL320). When the new disk drive is obtained, make sure it is
blank, then shut the system down. At this point, if the system has a RAID
array card like a Highpoint or Promise controller, you may then boot it into
the BIOS of the card and use the manufacturers RAID array rebuild utilities to
rebuild the array.
If the system has a pure software array and is not using a "real" ATA
RAID controller, then shut the system down, make sure that the disk that was
still working is moved to the bootable position (channel 0 or whatever the
BIOS allows the system to boot from) and the blank disk is placed in the
secondary position, then boot the system into single-user mode and issue the
command:
atacontrol addspare ar0 ad6
atacontrol rebuild ar0
If the disk drive did NOT fail and the RAID array became unmirrored due to a
software glitch or improper shutdown, then a slightly different process must
be followed. Begin by issuing the detach command (this shows the detach for
disk ad6, the primary master on channel 3):
atacontrol detach ata3
then reboot the system into single-user mode. (don't just init the system,
reboot it so that both disks get probed) You will probably see TWO mirrored
RAID arrays appear during the boot messages, ar0 and ar1. Issue the command:
atacontrol delete ar1
atacontrol addspare ar0 ad6
Now a status command will show the array rebuilding.
To spin down a disk after 30 minutes run
atacontrol spindown ad6 1800
dd if=/dev/ad6 of=/dev/null
count=1
While any IO on the disk will arm the timer, using
dd(1) on
the raw device will work in all cases, as when the disk is not opened at all.
You can check the current setting with
atacontrol spindown ad6
You should not set a spindown timeout on a disk with
/ or
syslog logging on it as the disk will be worn out spinning down and up all the
time.
SEE ALSO¶
ata(4) cam(4)
camcontrol(8)
HISTORY¶
The
atacontrol utility first appeared in
FreeBSD 4.6.
atacontrol was deprecated in
FreeBSD
9.0.
AUTHORS¶
The
atacontrol utility was written by
Søren Schmidt ⟨sos@FreeBSD.org⟩.
This manual page was written by
Søren Schmidt
⟨sos@FreeBSD.org⟩.
NOTES¶
The
atacontrol utility was deprecated in
FreeBSD 9.0. When
options
ATA_CAM
is compiled into the kernel, then
camcontrol(8) must be used
instead.