PDA

Ver la Versión Completa : Acelerando los discos duros en GNU/Linux



DiabloRojo
31-oct-2006, 21:42
MANUAL EN CONSTRUCCION, TEMA CERRADO

Este tema permanecerá cerrado mientras este en Construcción, como es normal no admitiré consultas privadas con aspectos relacionados con este tema y ningún otro tema que sea publicable en el foro. Solo admitiré mensajes privados que me indiquen erratas, sugerencias en la construcción de este manual y los nombres de los ficheros de arranque de las distribuciones de GNU/Linux.

Acelerando disco duro de Compaq Presario R3420EA

El propósito de este manual es que sea valido para cualquier distribución de GNU/Linux, para conseguirlo utilizare el comando asociado al manejo de los discos duros hdparm y la edición del fichero del arranque de la distribución de GNU/Linux que utilicemos para hacer permanentes los cambios, he preferido evitar la edición de los ficheros de configuración existentes en /etc/sysconfig o en otro sitio como /lib/udev debido a que cada distribución es un mundo y el propósito de este manual es muy limitado.

NOTA
Todo lo indicado en este manual requiere un nivel de conocimientos intermedios sobre GNU/Linux para su compresión y entendimiento, por dicho motivo desaconsejo esclarecidamente su utilización a los principiantes y/o novatos.
Este manual NO es aplicable a todos los discos duros y ordenadores o computadoras existentes en el mercado sino a la marca y modelo de disco duro de la marca y modelo de mi portátil. Cada marca y modelo de disco duro y computadora es un mundo, lo que es aplicable a uno de ellos puede no ser aplicable a otro y todo ello debido a la configuración de la BIOS y al cable de conexión.

Más adelante publicare más manuales sobre otros discos duros de otras computadoras.

Querido amigo, aplica con precaución y tiento las enseñanzas de este manual y no me pidas responsabilidad alguna si por una mala interpretación de ellas te cause inestabilidad o problemas con tu distribución GNU/Linux. Así que quedas advertido. No obstante, me alegrare por ti si este manual te es útil para acelerar los discos duros en tu distribución GNU/Linux.

PRELIMINARES
Este manual no explica sobre la nomenclatura de los discos duros, ni sus conexiones con los canales IDE, SATA y SCSI, simplemente requiere saber que discos duros tienes y como se llama, información que te lo proporcionara la salida del comando:

# fdisk -l | grep -i disk
Disk /dev/hda: 60.0 GB, 60011642880 bytes
En este caso, vemos que solo hay un disco duro llamado /dev/hda.


Es muy aconsejable leer la ayuda de hdparm, que se puede hacer de varias formas:
1.- Abre un Terminal para teclear “man hdparm”, utilizaremos las teclas de avance y retroceso de pagina para leerlo incluido las flechas arriba y abajo.
2.- Abre un Terminal para teclear “xman”, utilizar el ratón para seleccionar “Manual Page”->Options->Search->hdparm y pulsar Enter, tendras el manual para leerlo.
3.- Si tienes instalado el escritorio KDE, abre el navegador de ficheros Konqueror para introducir en la casilla de “Dirección:” lo siguiente: “man:/hdparm” y utiliza el ratón para leerlo.

La ejecución del comando hdparm y la edición del fichero de arranque de nuestra distribución GNU/Linux debe hacerse como súper usuario root, para ello se debe abrir un “Terminal del root” o, en su defecto, abrir un Terminal para ejecutar “su –“ e introducir la contraseña de root.
Nota: Para aquellos que tenga instalado una distribución GNU/Linux basada en Debian como Ubuntu, Knoppix, etc… y no utilice un Terminal de súper usuario root deberá anteponer delante de los comandos indicados en el manual el comando “sudo” como este ejemplo: “sudo hdparm –i /dev/hda”.

Otro sitio para obtener información es buscar el comando hdparm por Internet (http://www.google.com/search?q=hdparm&hl=es&hs=vxc&client=opera&rls=es-es&lr=lang_es&sa=X&oi=lrtip&ct=restrict&cad=7), donde encontraremos abundante información como este excelente manual: HOWTO Hdparm (http://es.gentoo-wiki.com/HOWTO_Hdparm)

COMENZADO
Tener presente que los cuadros de ejecución de los comandos que están marcados en negrita y, además:

Notas:
> indica usuario normal
# indica superusuario root; para los Debianitas indica anteponer el comando "sudo"
"su" el comando se ejecuta sin comilla
Utilizaremos OpenSuse 10.0 con la siguiente versión del kernel y hdparm, cosa importante, ya que cada nueva versión de hdparm incluye nuevas funcionalidades que no aplicaremos.

> uname -r
2.6.13-15.12-default
> rpm -qa | grep hdparm
hdparm-6.1-2
Ahora vamos a obtener la mas completa información del disco duro, es la opción -I:

# hdparm -I /dev/hda

/dev/hda:

ATA device, with non-removable media
Model Number: IC25N060ATMR04-0
Serial Number: MRG31YKCHVN0PH
Firmware Revision: MO3OAD5A
Standards:
Used: ATA/ATAPI-6 T13 1410D revision 3a
Supported: 6 5 4 3
Configuration:
Logical max current
cylinders 16383 65535
heads 16 1
sectors/track 63 63
--
CHS current addressable sectors: 4128705
LBA user addressable sectors: 117210240
LBA48 user addressable sectors: 117210240
device size with M = 1024*1024: 57231 MBytes
device size with M = 1000*1000: 60011 MBytes (60 GB)
Capabilities:
LBA, IORDY(can be disabled)
bytes avail on r/w long: 4 Queue depth: 1
Standby timer values: spec'd by Vendor, no device specific minimum
R/W multiple sector transfer: Max = 16 Current = 16
Advanced power management level: 128 (0x80)
Recommended acoustic management value: 128, current value: 254
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=240ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* NOP cmd
* 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
* FLUSH CACHE EXT command
* Mandatory FLUSH CACHE command
* Device Configuration Overlay feature set
* 48-bit Address feature set
* Automatic Acoustic Management feature set
* SET MAX security extension
Address Offset Reserved Area Boot
* SET FEATURES subcommand required to spinup after power up
Power-Up In Standby feature set
* Advanced Power Management feature set
* General Purpose Logging feature set
* SMART self-test
* SMART error logging
Security:
Master password revision code = 65534
supported
not enabled
not locked
frozen
not expired: security count
not supported: enhanced erase
50min for SECURITY ERASE UNIT.
HW reset results:
CBLID- above Vih
Device num = 0 determined by CSEL
Checksum: correct
El apartado “Capabilities:” , mas conocido como Capacidades del disco duro, marco en negrita lo mas importante de mi disco duro que me indica el valor obtenido y el existente; el que pone "Recommended acoustic..." me recomienda pasar de 254 a 128; el que comienza por "R/W multiple..." el valor indicado es el mismo que tengo configurado y, por ultimo, el DMA mi valor es el máximo existente ya que esta marcado en asterisco.

En apartado “Commands/features:” y “Enabled Supported:” que significa "Comandos, características y soporte habilitado" lo marcado en asterisco es lo que esta habilitado en mi disco duro.

En “Security” o Seguridad, no hablaremos de ello, ya que mi versión de hdparm no es capaz de configurarlo.

Y por ultimo, el modelo de mi disco duro lo busco en Internet y doy con las características de el: http://www.hitachigst.com/hdd/support/80gn/80gn.htm


Vamos hacerle un test de velocidad al disco duro antes de empezar los cambios, ejecutaremos tres veces el comando “hdparm -tT /dev/hda” y escogeremos el valor intermedio de los tres valores de Timing cached... y Timing buffered... debido a las diferencias de valores existentes en la ejecución de los 3 comandos en tan breve tiempo; pero antes hay que cerrar todas las aplicaciones en activo y utilizar solo el Terminal

# hdparm -tT /dev/hda

/dev/hda:
Timing cached reads: 1940 MB in 2.00 seconds = 969.94 MB/sec
Timing buffered disk reads: 86 MB in 3.19 seconds = 26.97 MB/sec
Ya hemos visto la información completa de la opción -I, pero no la utilizaremos de momento, vamos a utilizar esta otra mas resumida, la opción -i:

# hdparm -i /dev/hda

/dev/hda:

Model=IC25N060ATMR04-0, FwRev=MO3OAD5A, SerialNo=MRG31YKCHVN0PH
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=DualPortCache, BuffSize=7884kB, MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=117210240
IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5
AdvancedPM=yes: mode=0x80 (128) WriteCache=enabled
Drive conforms to: ATA/ATAPI-6 T13 1410D revision 3a:

* signifies the current active mode
Los valores marcados en negrita son los mas interesantes; el MaxMultSect y el udma5, fijaros en el asterisco delante indicándome que es el valor actual activo. Y me informa que esta habilitada la cache de escritura.


Vamos a obtener los datos de la configuración del disco duro para cambiarlo a los datos obtenidos del disco duro, opciones -i y -I.

# hdparm /dev/hda

/dev/hda:
multcount = 16 (on)
IO_support = 1 (32-bit)
unmaskirq = 1 (on)
using_dma = 1 (on)
keepsettings = 0 (off)
readonly = 0 (off)
readahead = 256 (on)
geometry = 16383/255/63, sectors = 117210240, start = 0
¡Fenomenal!, la configuración es buena, pero voy ha explicar cada una de ellas para que lo entendáis
La 1ª opción (multcount) esta activa y el valor corresponde a MaxMultSect=16, así que no hay que tocarlo.
2ª opción (IO_support) esta muy bien, un bus de Entrada y Salida de 32 bit al disco duro, pero voy a mirar si mi disco duro soporta sincronismo a 32 bits parra mejorar la transferencia.
3ª opción (unmaskirq) esta bien, utiliza la interrupción de la BIOS y la de disco duro que mejorar la transferencia.
4ª opción (using_dma) es la famosa activación de la DMA.
5ª opción (keepsettings) la de perseverancia de los valores definidos en una secuencia de recuperación de errores del disco duro no esta activada.
El resto no tiene importancia.


MANOS A LA OBRA
Me ha decidido explicarlo en función de la información proporcionada por las salidas de las opciones -i, -I y de la configuración existente que es muy explicita, ver cuadro anterior.
Utilizare un código de colores como los semáforos para indicar la peligrosidad de hacer lo indicado en el párrafo: Negro:Ningún peligro; Azul:Posible corrupción en disco duro y Rojo:Peligroso, aparte de poner como encabezado a los textos que hace necesario la ejecución de la opción indicada.

1.- “R/W multiple sector transfer: Max = XX Current = XX”; “MaxMultSect=XX” y “multcount = XX (on/off)”.
Establecemos el máximo numero de sectores múltiples por la interrupción de I/O en el disco, cuanto mas alto es el numero mayor sera la transferencia en el disco duro, responsable de aumentar el rendimiento del disco duro hasta un 50%, pero este valor esta limitado al valor que nos devuelve las frases del encabezado del parrafo, en mi caso es de 16, la opción responsable de cambiar este valor es “-m valor_a_cambiar”, siendo los posibles valores: 2, 4, 8, 16 sectores; en la ayuda avisa que puede causar corrupción en el sistema de ficheros :

# hdparm -m16 /dev/hda

/dev/hda:
setting multcount to 16
multcount = 16 (on)

2.- “IO_support = X (32-bit)”
Habilita el soporte de entrada y salida de 32 bits a la controladora (E)IDE, para hacer esto es necesario habilitar en la BIOS dicho soporte, una vez habilitado podemos cambiarlo con la opción -c cuyos valores actualmente soportados incluyen 0 para inhabilitar la ayuda 32-bit de I/O, 1 para permitir a transferencias de datos 32-bit, y 3 permitir transferencias de datos 32-bit con una secuencia especial de la sincronización requerida por muchos chipsets.
En mi caso voy habilitar la sincronización, aunque puede provocarme corrupción de datos.

# hdparm -c3 /dev/hda

/dev/hda:
setting 32-bit IO_support flag to 3
IO_support = 3 (32-bit w/sync)

3.- “unmaskirq = X (on/off)”
Esta opción permite al sistema utilizar otras interrupciones durante las interrupciones del disco duro, es decir, compartir la IRQ del disco duro, esto aumenta la velocidad de respuesta del sistema pero puede causar corrupción de datos. La opción es la -u cuyos valores son 0 para inhabilitar, 1 para permitirlo:

# hdparm -u1 /dev/hda

/dev/hda:
setting unmaskirq to 1 (on)
unmaskirq = 1 (on)

4.- “using_dma = X (on/off)”
Usar el acceso directo de memoria da casi siempre el mejor funcionamiento, con rendimiento de procesamiento rápido de I/O y uso bajo de la CPU, es recomendable tenerlo activado si nuestro disco duro lo soporta. La opción es la -d cuyos valores son 0 para inhabilitar, 1 para habilitar:

# hdparm -d1 /dev/hda

/dev/hda:
setting using_dma to 1 (on)
using_dma = 1 (on)

5.- “keepsettings = X (on/off)”
Esta opción SOLO se utiliza en el fichero de arranque de la distribución GNU/Linux, sirve para fijar los valores que configuremos con las demás opciones durante la secuencia de la recuperación de error, es decir, que una vez probado el correcto funcionamiento del sistema lo fijaremos. En la práctica, es necesario probar una configuración (antes de usar - k) debe verificar que no se genera ningunos registros de errores (mensajes del núcleo) en el proceso. Dicha opción “-k1” no se usa como prueba, solo lo introduciremos en el fichero de arranque de la distribución GNU/Linux.

6.- “readonly = X (on/off)”
Esta opción solo sirve para poner nuestro disco duro en “modo solo lectura” para evitar crear errores en el sistema de ficheros, necesario para probar todo este manual, la opción es -r cuyos valores son 0 para inhabilitar el modo de lectura, 1 para habilitarlo. Evidentemente si lo activamos nunca podemos escribir en el disco duro.

7.- “readahead = XXX (on/off)”


CONTINUARA CON MAS OPCIONES.....


EDITAMOS EL FICHERO DE ARRANQUE
Esta es la relación del fichero de arranque y su distribución, segun me informe, lo ampliare.

Ficheros a editar segun la distribuccion
/etc/rc.d/rc.local Mandrake, RedHat, Fedora Core, Ubuntu, Debian, CentOS, etc....
/etc/init.d/boot.local OpenSuse, Suse Enterprise
Ahora editamos el fichero de arranque correspondiente, en este caso es /etc/init.d/boot.local, para introducir una nueva linea del comando y las opciones a arrancar:
hdparm -c3 /dev/hda

Ya que el resto de las opciones las tengo activadas, pasado un tiempo sin mensajes de error del kernel sera cuando fije dicha opción, añadiendo la opción explicada en el punto 5, donde la linea quedara así:
hdparm -c3 -k1 /dev/hda


ANEXO:
Relación de las opciones peligrosas del comando hdparm

# hdparm -h | grep -i dangerous
-r get/set device readonly flag (DANGEROUS to set)
-R register an IDE interface (DANGEROUS)
-U un-register an IDE interface (DANGEROUS)
-w perform device reset (DANGEROUS)
-W set drive write-caching flag (0/1) (DANGEROUS)
-x tristate device for hotswap (0/1) (DANGEROUS)
-X set IDE xfer mode (DANGEROUS)
--security-unlock PWD Unlock drive, using password PWD (DANGEROUS)
--security-set-pass PWD Lock drive, using password PWD (DANGEROUS)
--security-disable PWD Disable drive locking, using password PWD (DANGEROUS)