hdparm is a command line utility for the Linux and Windows operating systems to set and view ATA hard disk hardware parameters. It can set parameters such as drive caches, sleep mode, power management, acoustic management, and DMA settings.

cdl_capture_2011-06-02-59_ 000

Changing hardware parameters from suboptimal conservative defaults to their optimal settings can improve performance greatly. For example, turning on DMA can in some instances double or triple data throughput. Unfortunately at present there’s no reliable method for determining the optimal settings for a given controller/drive combination, except careful trial and error; nor is there yet any central database that collects and shares the combined experience of hdparm users.

hdparm has a more serious drawback: it can crash a computer and make data on its disk inaccessible if certain parameters are misused. Out of approximately sixty-seven parameters, several are dangerous and could result in "massive filesystem corruption" when used indiscriminately.

Before using hdparm it is important to read its man page, and (if testing any of its dangerous parameters) to have a full backup of everything on the drive.

hdparm is free software under the BSD license.

hdparm is available in the Cygwin environment for Windows.

Usage examples

Important: hdparm has to be run with root privileges, otherwise it will either not be found or the requested actions won’t be executed properly.

Display information of the hard drive

hdparm -I /dev/sda

Turn on DMA for the first hard drive:

hdparm -d1 /dev/sda

Test cache read performance of the first hard drive:

hdparm -T /dev/sda

Enable energy saving spindown after inactivity (24*5=120 seconds):

hdparm -S 24 /dev/sda

To retain hdparm settings after a software reset, run:

hdparm -K 1 /dev/sda

Enable read-ahead:

hdparm -A 1 /dev/sda

If the disk is constantly too noisy, you can change its acoustic management at the cost of read/write performance:

hdparm -M 128 /dev/sda

If the disk synchronisation intervals are too short, then even small amounts of data will be written to disk which can have severe consequences on its lifespan. The better way would be to collect small data to bigger chunks and write until the chunk is big enough to be written to disk.

Current web browsers like Chrome write regularly small chunks when browsing in order not to lose any important data when the application crashes. However, this lets the disk spin very often as the drive repeatedly needs to unleash and then park its heads. The generated noises can be thus regarded as distracting by the user. To circumvent this issue, you can turn on the disk’s power management

hdparm -B254 /dev/sda

(An alternative would be to change the value of /proc/sys/vm/dirty_expire_centisecs which sets the flush interval)

Note that all these commands are only effective on the long-run, if you make the changes persistent. However, the settings you can set via hdparm are reverted each time you reboot. Therefore, it might be recommendable to restore the personal settigns upon boot. An appropriate place that’s existent in most Linux distributions is the /etc/rc.local script.

External links

Free software portal

Leave a comment