Confugurar discos ATA en Linux con hdparm

¿Que es hdparm? hdparm es un programa que nos permitirá mejorar el rendimiento de nuestro disco duro.

Procedimientos previos

Primero debemos comprobar la configuración de nuestro kernel, debemos asegurarnos de que hemos incluido soporte para nuestra placa. En mi caso:

Código: Kernel
Device Drivers  --->
ATA/ATAPI/MFM/RLL support --->
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support --->
PCI IDE chipset support --->
Generic PCI bus-master DMA support --->
VIA82CXXX chipset support

Si no sabéis cuál es vuestro modelo podéis marcar todos como módulos [M] y él mismo cogerá el que necesite al arrancar.

Ahora instalaremos hdparm y vamos a obtener algo de información sobre nuestro disco duro. Ya que estamos también vamos a medir el rendimiento antes de hacerle unos apaños. Se entiende, que donde /dev/hda debéis poner vuestro disco duro.

Código: Consola
root@Barrikada fran # emerge hdparm
Código: Consola
 root@Barrikada fran # hdparm -I /dev/hda

/dev/hda:

ATA device, with non-removable media
Model Number: SAMSUNG SP8004H
Serial Number: 0415J1FTA46128
Firmware Revision: QW100-60
Standards:
Used: ATA/ATAPI-6 T13 1410D revision 1
Supported: 6 5 4 3
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
--
CHS current addressable sectors: 16514064
LBA user addressable sectors: 156368016
device size with M = 1024*1024: 76351 MBytes
device size with M = 1000*1000: 80060 MBytes (80 GB)
Capabilities:
LBA, IORDY(cannot be disabled)
bytes avail on r/w long: 4 Queue depth: 1
Standby timer values: spec'd by Standard, no device specific minimum
R/W multiple sector transfer: Max = 16 Current = 16
Recommended acoustic management value: 128, current value: 0
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=120ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* READ BUFFER cmd
* WRITE BUFFER cmd
* Host Protected Area feature set
* Look-ahead
* Write cache
* Power Management feature set
Security Mode feature set
SMART feature set
* Mandatory FLUSH CACHE command
Automatic Acoustic Management feature set
SET MAX security extension
* DOWNLOAD MICROCODE cmd
* SMART self-test
* SMART error logging
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
supported: enhanced erase
96min for SECURITY ERASE UNIT. 96min for ENHANCED SECURITY ERASE UNIT.
HW reset results:
CBLID- above Vih
Device num = 0 determined by the jumper
Checksum: correct
Código: Consola
 root@Barrikada fran # hdparm -Tt /dev/hda

/dev/hda:
Timing cached reads: 1036 MB in 2.00 seconds = 517.04 MB/sec
Timing buffered disk reads: 20 MB in 3.05 seconds = 6.56 MB/sec

Configurando nuestro disco

Muy bien, ahora en mi caso tendría que hacer lo siguiente:

Código: Consola
hdparm -d1 -Xudma5 -c3 -m16 -M128 /dev/hda
  • -d1 Sirve para activar el DMA, esto reducirá el uso de la CPU y aumentara notablemente la velocidad de nuestro disco.
  • -Xudma5 Sirve para el modo de transferencia, podemos saber cuál es el adecuado para nuestro sistema mirando la linea "DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5" en la información de nuestro disco (hdparm -I /dev/hda para los despistados). Simplemente debéis poner el último valor, que es el mas alto.
  • -c3 Sirve para activar las transferencias de 32bits con sync, aunque realmente yo no noto ninguna diferencia.
  • -m16 Sirve para establecer las "cuentas de sector", en mi caso el máximo es 16, lo podéis ver en la información de vuestro disco en la línea "R/W multiple sector transfer: Max = 16 Current = 16"
  • -M128 Sirve para ajustar el nivel de ruido del disco, lo podéis consultar en la linea "Recommended acoustic management value: 128, current value: 0"


Explicación: Para los usuarios de portátiles

Para los usuarios de portátiles: La opción -S Sirve para suspender el disco después de cierto tiempo de inactividad y de esta forma ahorrar batería. El valor va en múltiplos de 5 segundos, de este modo si ponéis -S4 se apagará a los 20 segundos de inactividad y si ponéis el valor a 253 obtendrá el tiempo definido por el vendedor aunque este suele ser bastante elevado. Si vais a hacer esto debéis aseguraros de que haya pocas cosas que necesiten escribir en vuestro disco (Ej. Demons, logs, etc) y de que tengáis un sistema de ficheros que os permita especificar cada cuantos MB escribir en el disco, como ext3.

Ahora os toca ajustar los valores para vuestro disco, cualquier duda:

man hdparm

Finalizando

Vamos a hacer una medición a ver que tal :)

Código: Consola
 root@Barrikada root # hdparm -Tt /dev/hda

/dev/hda:
Timing cached reads: 1076 MB in 2.00 seconds = 537.28 MB/sec
Timing buffered disk reads: 120 MB in 3.02 seconds = 39.75 MB/sec

Bueno, mi disco esta algo antiguo pero no esta mal. Si todo ha ido bien debéis poner estos valores en el fichero /etc/conf.d/hdparm y agregarlo al init:

Código: Consola
root@Barrikada root # nano -w /etc/conf.d/hdparm
root@Barrikada root # rc-update add hdparm boot

Ya tenéis vuestro disco listo.



Sacado de Gentoo Wiki.