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.659 ]

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


Introdução



Não é novidade que os discos rígidos de hoje em dia são dotados de alta tecnologia, tanto no que diz respeito a capacidade de armazenamento quanto a velocidade de leitura e escrita. Tecnologias como UDMA, PIO, ATA, SATA têm feitos dos HD's dispositivos de gravação extremamente rápidos se comparados aos mesmos dispositivos de poucos anos atrás.

Mas como sabemos, uma boa parte dos recursos suportados pelos HD's são ativados via software, o que torna possível ter um HD de última geração que não funcione a contento, pelo simples fato de este não estar configurado. Você sabia, por exemplo, que em muitos casos após a instalação do Linux os HD's podem estar até mesmo sem DMA ativado?

Pois é. Isso pode comprometer a velocidade do sistema todo. Por isso, sem mais delongas, vou apresentar-lhes o hdparm. Um software que tem por finalidade analisar dispositivos de disco rígido e configurá-los, ativando ou desativando recursos.

    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

Fundamentos do sistema Linux - Gerenciadores de inicialização

Compilando o Squid e criando o pacote para Slackware

Criando um repositório local do Fedora

Instalando um sistema Debian GNU/Linux completo em 20 minutos

Debian-BR CDD: Mais um excelente trabalho brazuca

Leitura recomendada

Instalação do Nagios Core no CentOS 5.5

Squid configurado como proxy no Ubuntu Server

Distribuição híbrida

Programando para um servidor IIS e administrando o Microsoft SQL Server via Linux

Apache 2.4 - Módulos de Multiprocessamento - MPM

  
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