ATACONTROL(8) BSD System Manager's Manual ATACONTROL(8)NAMEatacontrol — ATA device driver control program
SYNOPSISatacontrol ⟨command⟩ args
atacontrol attach channel
atacontrol detach channel
atacontrol reinit channel
atacontrol create type [interleave] disk0 ... diskN
atacontrol delete raid
atacontrol addspare raid disk
atacontrol rebuild raid
atacontrol status raid
atacontrol mode device [mode]
atacontrol info channel
atacontrol cap device
atacontrol spindown device [seconds]
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 sec‐
tors. 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 con‐
trollers, 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 time‐
out 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.
To get information on devices attached to a channel, use the command
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
current mode = UDMA100
You can set the mode with atacontrol and a string like the above, for
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 compat‐
ible 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 through‐
put 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 pur‐
pose 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 com‐
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
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
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
To deactivate the DOWN disk ad6 to allow for it to be ejected, use the
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 what‐
ever 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 sys‐
tem, 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
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.
The atacontrol utility first appeared in FreeBSD 4.6.
The atacontrol utility was written by Søren Schmidt ⟨sos@FreeBSD.org⟩.
This manual page was written by Søren Schmidt ⟨sos@FreeBSD.org⟩.
BSD February 21, 2009 BSD