hdparm: Tire o máximo do seu HD

Neste artigo tentarei explicar os conceitos básicos do hdparm, uma importantíssima ferramenta de configuração que pode deixar o seu HD em ponto de bala, tinindo e pronto pra qualquer tarefa.

[ Hits: 230.511 ]

Por: Davidson Rodrigues Paulo em 19/11/2004 | Blog: http://davidsonpaulo.com/


O gerenciamento acústico e de energia



O gerenciamento acústico é bastante simples, como todas as configurações do hdparm. Basta utilizar a sintaxe.

      hdparm -M<valor> <disco>

O valor pode variar de 128 (lento e quieto) até 254 (rápido e barulhento). Para não perder muito tempo testando valor por valor, utilize aquele que é recomendado pelo fabricante. Utilize o comando:

# hdparm -I <disco> | grep acoustic

Para ver esse valor. Veja esse exemplo:

# hdparm -I /dev/hda | grep acoustic
Recommended acoustic management value: 128, current value: 0

Veja que, nesse caso, o valor recomendado é 128. Então, dê o comando:

# hdparm -M128 /dev/hda
/dev/hda:
 setting acoustic management to 128
 acoustic     =  128 (128=quiet ... 254=fast)

Para desativar o ajuste acústico, utilize -M0. Os HDs atuais geralmente nem precisam desse recurso, pois já são bastante silenciosos. Isso é útil para os mais antigos, que parecem besouros e cigarras quando estão trabalhando. :D

Outra coisa muito útil que pode ser feita com o hdparm é a configuração do tempo de spindown, ou seja, o tempo que o HD deve esperar para desligar o motor caso fique muito tempo sem uso. Isso reduz o consumo de energia e aumenta a vida útil do HD, caso seu computador permaneça muito tempo ligado mas nem sempre em uso.

Para configurar o tempo de spindown a sintaxe é:

      hdparm -S<valor> <disco>

Onde <valor> deve ser substituído pelo código do tempo desejado.

Valores entre 1 e 240 especificam múltiplos de 5 segundos, ou seja, o valor 10 significa um tempo de espera de 50 segundos, e o valor 200 muda esse valor para 1000 segundos (16 minutos e 40 segundos).

Valores de 241 a 251 especificam múltiplos de 30 minutos, variando de 11 minutos (241) até 5 horas e meia (251).

Vamos a um exemplo:

# hdparm -S240 /dev/hda
/dev/hda:
 setting standby to 240 (20 minutes)

Com esse comando, configuramos o HD para desligar após 20 minutos de ociosidade.

Para desativar o recurso spindown, utilize -S0.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Instalação
   3. Obtendo e analisando informações
   4. Configurando o disco
   5. O gerenciamento acústico e de energia
   6. Testando o desempenho
   7. Ativando o hdparm na inicialização do sistema
   8. Considerações finais
Outros artigos deste autor

Hyperic HQ: monitore sua rede like a boss

Grip, the GNOME Ripper

Fundamentos do sistema Linux - usuários e grupos

Vyatta, o concorrente livre dos roteadores Cisco

Debian-BR CDD: Mais um excelente trabalho brazuca

Leitura recomendada

Configurando suporte Firebird no LAMP (xampp) em Lubuntu

Controle de versão usando Git integrado ao Redmine

Interligando o Asterisk com o callcenter

Monitoração com Zabbix no Debian Squeeze

Criando rotas via iptables para acesso remoto com VNC

  
Comentários
[1] Comentário enviado por cvs em 19/11/2004 - 08:27h

Muito bom seu artigo cara, gostei mesmo já usando o hdparm há algum tempo obtive muitas respostas aqui.. .só faço uma ressalva, a respeito da instalação, normalmente ele já vem instalado por default... é só...parabens.

[2] Comentário enviado por rfranzen em 19/11/2004 - 09:16h

Muito bom artigo, bem explicado. Quando chegar em casa vou testar :)

[]'s !

[3] Comentário enviado por gelemeurer em 19/11/2004 - 09:39h

Ótimo artigo, valeu!!!

Aqui no IDE aumentou consideravelmente o desempenho, já no scsi: "operation not supported on SCSI disks"

Verei melhor isto mas se tiveres alguma dica...

[]s

Gele


[4] Comentário enviado por y2h4ck em 19/11/2004 - 11:45h

Eu usava o hdparm, melhorou bastante o desempenho, mas infelizmente pelo que andei estu dando meu hd Maxtor 20gb nao permite setar o DMA

Mas o artigo ta show cara, parabens!

Abraços

[5] Comentário enviado por m4sk4r4 em 19/11/2004 - 13:49h

Olá Davidson,

Show de bola seu artigo, gostei muito, value,

t+
[]'s

[6] Comentário enviado por lowpis em 19/11/2004 - 14:01h

O meu dá esse erro:
setting using_dma to 1 (on)
HDIO_SET_DMA failed: Operation not permitted
Alguém sabe o porquê?

E, pra quem usa o Gentoo, edite as configurações no arquivo /etc/conf.d/hdparm
O arquivo eh bem explicado, mas basicamente, você precisa colocar uma variável com os argumentos. Aqui em casa, usei:
hda_args="-c1 -d1 -X69 -A1 -a64 -m16"

Depois, para colocar o hdparm na inicialização, faça:
$ rc-update add hdparm boot

[7] Comentário enviado por gibabsb em 19/11/2004 - 18:56h

Parabéns pelo artigo muito bom mesmo, tem uma máteria sobre hdparm na revista LInux Magazine do mês passado, vale a pena dar uma olhada.
Tenho apenas uma dúvida, uso o RH9 e não encontrei o arguivo hdparm.conf então como faço para habilita-lo logo na inicialização ou ele já inicializa automático?
Um abraço

[8] Comentário enviado por bighead em 19/11/2004 - 20:30h

Muito bom , mas eu queria que vc desse uma olhada neste erro e me ajudasse a corrigi-lo!

# hdparm -c1 -d1 -X69 -m16 -A1 -a64 /dev/hda

/dev/hda:
setting fs readahead to 64
setting 32-bit IO_support flag to 1
setting multcount to 16
setting using_dma to 1 (on)
setting xfermode to 69 (UltraDMA mode5)
HDIO_DRIVE_CMD(setxfermode) failed: Input/output error
setting drive read-lookahead to 1 (on)
multcount = 16 (on)
IO_support = 1 (32-bit)
using_dma = 1 (on)
readahead = 64 (on)
root@darkstar:~# hdparm -i /dev/hda
ai quando eu digito :
root@darkstar:~# hdparm -i /dev/hda

/dev/hda:

Model=WDC WD100EB-00BHF0, FwRev=15.15M15, SerialNo=WD-WMA6K6151472
Config={ HardSect NotMFM HdSw>15uSec SpinMotCtl Fixed DTR>5Mbs FmtGapReq }
RawCHS=16383/16/63, TrkSize=57600, SectSize=600, ECCbytes=40
BuffType=DualPortCache, BuffSize=2048kB, MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=19541088
IORDY=on/off, tPIO={min:120,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=no WriteCache=enabled
Drive conforms to: device does not report version:

* signifies the current active mode

Viu ele não modificou a opção para o modo udma5 , será que tem como consertar este erro.

[9] Comentário enviado por davidsonpaulo em 19/11/2004 - 20:36h

bighead,

HDIO_DRIVE_CMD(setxfermode) failed: Input/output error

Essa mensagem siginifica que houve erro de entrada/saída no instante em que o hdparm tentava setar o seu HD para o modo UDMA5. Isso pode ter diversos motivos, e um deles é o seu HD na verdade não suportar o modo UDMA5, apesar de o hdparm reconhecer que suporta. Tente ativar os modos udma4 (-X68) e udma3 (-X67). Ou então, configure o /etc/hdparm.conf e reinicie o computador para ver se as configurações funcionam corretamente quando aplicadas no momento do boot.

Abraços

[10] Comentário enviado por removido em 20/11/2004 - 01:10h

SCRIPT DE EXECUÇÃO DO HDPARM

O script abaixo está diponível em http://www.guiadohardware.net/kurumin/dicas/005/index.php#01 e é de autoria do Alan Rafael Rodrigo Batista.
Bom proveito!
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
. Ganho de performance no HD
Por Alan Rafael Rodrigo Batista

Crie um arquivo:

sudo kedit harddisk.sh

Coloque nele o conteúdo abaixo:

#!/bin/sh
echo "mostrando na tela as configurações do disco"
hdparm -c -d -t /dev/hda #corrija aqui caso seu disco não seja o hda
echo
echo "melhorando a leitura e escrita do hda"
hdparm -c 1 -d 1 -t /dev/hda #corrija aqui caso seu disco não seja o hda
echo "feito!"

Agora dê a permissão:

sudo chmod a+x harddisk.sh

E execute no terminal como root:

./harddisk.sh



[11] Comentário enviado por pop_lamen em 20/11/2004 - 01:30h

Muito bom o artigo, bem completo, estudado.
Prabéns, todos os artigos da comunidade deveriam ser como o seu, e não assuntos cobertos só pela metade.
Wainer.Chiari

[12] Comentário enviado por nemphilis em 20/11/2004 - 22:21h

este artigo me chamou a atenção, além da boa linguagem utilizada, sanou todas as duvidas dos topicos abordados. Parabéns bozolinux, eeeeeeeesse menino vai longe!!!

[13] Comentário enviado por bighead em 21/11/2004 - 13:19h

Muito obrigado Davidson.
Será que o hdparm pode resolver um problema num hd que apresenta este erro:artition check:
hda: hda1 hda2 hda3
hdb:hdb: dma_intr: status=0x51 { DriveReady SeekComplete Er
ror }
hdb: dma_intr: error=0x10 { SectorIdNotFound }, LBAsect=0, s
ector=0
hdb: dma_intr: status=0x51 { DriveReady SeekComplete Error }
hdb: dma_intr: error=0x10 { SectorIdNotFound }, LBAsect=0, s
ector=0
hdb: dma_intr: status=0x51 { DriveReady SeekComplete Error }
hdb: dma_intr: error=0x10 { SectorIdNotFound }, LBAsect=0, s
ector=0
hdb: dma_intr: status=0x51 { DriveReady SeekComplete Error }
hdb: dma_intr: error=0x10 { SectorIdNotFound }, LBAsect=0, s
ector=0
hda: DMA disabled
hdb: DMA disabled
ide0: reset: success
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
ide0: reset: success
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
end_request: I/O error, dev 03:40 (hdb), sector 0
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
ide0: reset: success
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
ide0: reset: success
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
end_request: I/O error, dev 03:40 (hdb), sector 2
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
ide0: reset: success
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
ide0: reset: success
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
end_request: I/O error, dev 03:40 (hdb), sector 4
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
ide0: reset: success
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
ide0: reset: success
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
end_request: I/O error, dev 03:40 (hdb), sector 6
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
Muito obrigado a vc pela atenção e a todos da comunidade!!!!!!!!!

[14] Comentário enviado por davidsonpaulo em 23/11/2004 - 16:04h

bighead,

Essas mesmas mensagens aparecem num computador velho de um amigo meu, e o problema é a quantidade de 'bad blocks' (setores defeituosos) no HD. O hdparm não vai consertar isso, pois sua função não é corrigir problemas em HDs, mas somente configurá-los com os devidos recursos a fim de melhorar a performance de leitura e escrita.

Abraços

[15] Comentário enviado por GrupoFimdeprova em 01/02/2005 - 09:32h

Muito legal o artigo!
Espero que aumente a performance do meu disco

[16] Comentário enviado por impalerdrumer em 27/02/2005 - 19:35h

cara nenhum dos meus dois hds estao setando o udma4(o máximo suportado pela minha placa mãe q é ata66), ele dá o seguinte erro:
/dev/hda:
setting xfermode to 68 (UltraDMA mode4)
HDIO_DRIVE_CMD(setxfermode) failed: Input/output error

vi vc falando pra um cara aqui q estava com a mesma duivida, q esse problema pode ser relacionado ao hd nao suportar o modo q se esta tentando setar, mas tenho certeza de que meus hds suportam, tanto que um deles é um Samsung novinho de 7200rpm, q suporta até ata133 por sinal.....

se puder me ajudar fico muitissimo grato
Álvaro

[17] Comentário enviado por himura_kenshin em 28/04/2006 - 09:00h

root@yakuza:/home/kurosaki# hdparm -d1 /dev/hda

/dev/hda:
setting using_dma to 1 (on)
HDIO_SET_DMA failed: Operation not permitted
using_dma = 0 (off)

alguem poderia me ajudar aki?!?! nao consigo ativar o dma

[18] Comentário enviado por mtarcinalli em 14/09/2006 - 11:34h

Pode ser que o módulo do IDE do seu micro não esteja habilitado no kernel, aqui recompilei e resolveu

[19] Comentário enviado por leorm037 em 17/12/2006 - 20:13h

Parabéns, aqui funcionou tudo certinho.

No meu caso uso o slack, acho que o melhor lugar para colocar é no /etc/rc.d/rc.local, porque também não tenho o /etc/hdparm.conf

Abraços,

Leo

[20] Comentário enviado por marcus-rj em 08/02/2007 - 20:28h

Muito bom o artigo!! Ja conheci o hdparm, mas nao de forma tao completa como nesse artigo. Valeu pela rica informação!!

Nota 10!

[21] Comentário enviado por cytron em 23/02/2007 - 15:51h

Encontrei a solução para o SATA, veja bem como estava fácil de achar:

HDA = hdparm

SDA = shparm

O site é http://sg.torque.net/sg/sdparm.html, mas já vou avisando, é coisa para alienígena! Eu não consegui configurar nada, é muito diferente do hdparm.

Se alguém conseguir fazer alguma melhoria avise.

Tem pra smart também: http://smartmontools.sourceforge.net/man/smartctl.8.html

[22] Comentário enviado por removido em 12/07/2007 - 03:54h

Davidson,

Achei seu artigo show! Aumentar o desempenho de um disco é imprescindível, principalmente, quando o assunto se trata de servidores, onde a velocidade do disco é um fator crucial.

Atenciosamente,

Slackmaster ( jlgomessouza@gmail.com )

http://dangercode.blogspot.com

[23] Comentário enviado por juno em 06/08/2007 - 14:44h

Cara,
Parabéns pelo artigo !
Me ajudou bastante.

Abraços,
Juno

[24] Comentário enviado por wagnux em 08/02/2008 - 10:05h

Estou com o mesmo problema apresentado pelos colegas:

Depois de executar esse comando # hdparm -d 1 /dev/hda
/dev/hda:
setting using_dma to 1 (on)
HDIO_SET_DMA failed: Operation not permitted
using_dma = 0 (off)

Alguém teria uma sugestão pra resolver esse problema?

[25] Comentário enviado por removido em 25/06/2008 - 09:57h

3 ano e meio depois e este artigo ainda tá salvando a minha pele... parabéns...

[26] Comentário enviado por marcelohcm em 16/01/2012 - 11:46h

olá
quando digito hdparm -i /dev/sda
ele me dá essa saída

/dev/sda:
HDIO_DRIVE_CMD(identify) failed: Invalid exchange
HDIO_GET_IDENTITY failed: Invalid argument


gostaria de saber se isso é algum problema do hd...

[27] Comentário enviado por davidsonpaulo em 16/01/2012 - 11:54h

marcelohcm, o hdparm só serve para discos IDE, e ao que tudo indica o seu disco é SCSI ou SATA. Nesse caso, você precisará utilizar o comando sdparm. Um grande abraço!

[28] Comentário enviado por removido em 23/01/2014 - 12:41h

Artigo excelente! Parabéns!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts