O hdparm é mais uma excelente ferramenta que o Linux disponibiliza. Serve para configurar e optimizar os recursos das unidades de disco, recursos esses que na maioria vem desactivados de fábrica .
Instalando o hdparm
Muitas distribuições já trazem esta ferramenta incluída, no caso do Debian e derivados, podemos instalá-lo via APT:apt-get install hdparm
Testando o desempenho de uma unidade de disco
Antes de se proceder a alterações dos parâmetros dos discos é aconselhável realizar um teste de desempenho, antes e depois das alterações. Assim vamos poder analisar se houve melhoria no desempenho do HD ou não.
Para se obterem resultados mais fiáveis estes testes devem ser feitos com o mínimo de recursos ligados, passar para uma consola virtual premindo, Ctrl+F1 ou F2, etc e seguidamente como root digitar:
init 1Para testar o desempenho, utilizar os parâmetros “-T” e “-t” combinados da seguinte da forma:
hdparm -Tt [dispositivo]Para testar o desempenho da unidade /dev/hda, por exemplo:
hdparm -Tt /dev/hdao retorno será parecido com o seguinte:
/dev/hda: Timing cached reads: 1200 MB in 2.00 seconds = 598.89 MB/sec Timing buffered disk reads: 82 MB in 3.06 seconds = 26.77 MB/sec
Aqui foram feitos dois testes. O primeiro é o de tempo de leitura com cache (cached reads), e o segundo, de tempo de leitura de disco com buffer (buffered disk reads).
NOTA:se quisermos ligar o hdparm na inicialização do sistema, (ver no fim como o fazer) será útil repetirmos estes testes para vermos quanto ganhamos em desempenho nas unidades de disco.
Verificando um dispositivo com o hdparm
Há três formas de analisar um dispositivo e dependem do tipo de relatório que queremos obter:
básica, detalhada e técnica completa
-> para análise básica, executar:
hdparm /dev/hd[letra da unidade]-> para análise detalhada executar:
hdparm -i /dev/hd[letra da unidade]-> para análise técnica completa executar:
hdparm -I /dev/hd[letra da unidade]Exemplo de um relatório simples:
hdparm /dev/hda multcount = 0 (off) IO_support = 0 (default 16-bit) unmaskirq = 0 (off) using_dma = 1 (on) keepsettings = 0 (off) readonly = 0 (off) readahead = 0 (off) geometry = 16383/255/63, sectors = 40020664320, start = 0
-> multcount = 0 (off): o parâmetro multcount está desligado. O multcount é o modo de leitura de sectores múltiplos que permite que a transferência de múltiplos estores por interrupção de I/O. Os HD's actuais têm suporte a essa opção, que incrementa as velocidades de leitura e gravação do disco;
-> IO_support = 0 (default 16-bit): o modo de I/O está definido para 16 bits. Os modos suportados são 16 bits, 32 bits, e 32 bits com uma sequência especial de sincronismo exigida por alguns chipsets. Em HD's que suportam o modo 32 bits, este oferece uma melhor performance se comparado ao modo 16 bits. É possível saber através da BIOS se o nosso HD suporta o modo 32 bits
-> using_dma = 1 (on): o DMA (Direct Memory Access, acesso directo à memória) é um recurso primordial para se obter uma boa performance do HD. A menos que o HD seja muito antigo, ele suporta DMA e esta opção deve estar activa.
-> readahead = 0 (off): o recurso de leitura adiantada está desactivado. A leitura adiantada permite que o HD faça a leitura dos dados antes de começar a transferi-los. Isso funciona como um cache, para evitar pausas nas transferências no caso de qualquer processo que interfira na leitura dos dados no HD. Se possível, este parâmetro deve estar activo para melhorar a performance e a estabilidade das transferências dos dados no HD.
Exemplo de um relatório detalhado:
/dev/hda: Model=ST340014A, FwRev=3.54, SerialNo=3JV89GLK Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4 BuffType=unknown, BuffSize=2048kB, MaxMultSect=16, MultSect=off CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=78165360 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=no WriteCache=enabled Drive conforms to: ATA/ATAPI-6 T13 1410D revision 2:
(o modo que aparece com um *, é o modo que está sendo utilizado)
-> BuffSize=2048kB: esse parâmetro mostra o tamanho do buffer de gravação. Quanto maior o tamanho do buffer, menor é a vulnerabilidade do dispositivos a falhas de gravação;
-> MaxMultSects = 16: isso informa o número máximo de sectores que podem ser lidos simultaneamente. Devemos prestar atenção para não configurar a leitura de sectores múltiplos acima desse valor, o que poderia causar perda de dados;
-> PIO modes: pio0 pio1 pio2 pio3 pio4: aqui são listados os modos de PIO disponíveis para o HD
-> UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5*: estes são os modos de Ultra DMA suportados pelo HD, sendo que o modo que aparece com um (*) é o modo que está sendo utilizado. Quanto maior o valor de UDMA, melhor o desempenho da unidade.
Alterar a configuração de um disco
Há parâmetros que podem ser alterados pelo hdparm, e essas alterações vão interferir directamente no desempenho da unidade de disco, positiva ou negativamente. É preciso então saber interpretar as informações e nunca fazer testes com opções que podem representar perigo para a integridade dos dados contidos no disco.
Sintaxe:
hdparm [parâmetros] [dispositivo]Parâmetros:
-> -c[valor]: este parâmetro especifica o modo de interrupção de I/O. Os valores que pode assumir são:
1: modo 16 bits;
2: modo 32 bits;
3: modo 32 bits em modo especial de sincronismo, exigido por alguns chipsets.
(Para saber se o HD suporta o modo 32 bits, ir á BIOS do computador.)
-> -d[valor]: activa/desactiva o uso do DMA. Para activar, usar o valor 1. Para desactivar, usar 0
-> -X[valor]: selecciona o modo de DMA a ser utilizado. Pode variar de sdma0 (pior), passando por mdma e chegando em udma5 (melhor). Vamos desconsiderar o uso dos modos sdma que são muito antigos. Para utilizar os modos mdma, basta utilizar o número do modo somado com 32. Ou seja: usar 32 para activar mdma0 (32 + 0), e 34 para o mdma2 (32 + 2). Para utilizar os modos udma, utilizar o número do modo somado com 64. Ou seja: use 65 para activar o udma1 (64 +1) e 69 para o udma5 (64 + 5). Para saber qual modo é suportado pelo HD, executar:
hdparm -i /dev/hd[letra da unidade]o retorno do comando será:
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5
O modo que deve ser utilizado é o último que aparece na lista. Nesse caso, é o modo udma5 (69);
-> -m[valor]: especifica o valor do parâmetro MultSects. O valor desse parâmetro não pode ser maior que o parâmetro MaxMultSects, que encontramos na seguinte linha:
BuffType=unknown, BuffSize=2048kB, MaxMultSect=16, MultSect=16
Essa linha é encontrada no relatório gerado com o comando hdparm -i /dev/hdX. Nesse caso, o parâmetro MaxMultSects tem o valor 16, então o valor de MultSects deve ser igual ou menor a esse (de preferência igual);
-> -A[valor]: activa/desactiva o recurso de leitura adiantada. O valor 1 activa, enquanto 0 desactiva.
-> -a[valor]: configura a leitura adiantada. O valor especificado é multiplicado por 512 Bytes. Assim, se usarmos 8, a leitura adiantada será de 4 KB. A recomendação é de que usemos o mesmo valor que usarmos para o parâmetro MultSects.
Ajuste Acústico e Gestão de Energia
O ajuste acústico é um recurso que pode ser útil para uso em HD's antigos, um tanto quanto barulhentos. Trata-se de um controle da velocidade máxima de rotação do disco, o que faz com que ele faça menos barulho durante o trabalho.
Mas ao limitar a velocidade de rotação do HD o seu desempenho é reduzido, uma vez que ele passa a não trabalhar na máxima velocidade.
A sintaxe é a seguinte:
hdparm -M[valor] [dispositivo]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, utilizar aquele que é recomendado pelo fabricante. Para conhecê-lo, utilizar o seguinte comando:
hdparm -I [dispositivo] | grep acoustic
Ver este exemplo:
hdparm -I /dev/hda | grep acousticem que o resultado foi:
Recommended acoustic management value: 128, current value: 0
Como neste caso, o valor recomendado é 128, executar:
hdparm -M128 /dev/hdaPara desactivar o ajuste acústico executar:
hdparm -M0/dev/hdaConfigurar o tempo de inactividade do disco
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 inactivo. Isso reduz o consumo de energia e aumenta a vida útil do HD, caso o computador permaneça muito tempo ligado mas nem sempre em uso.
Para configurar o tempo de spindown utilizar a seguinte sintaxe:
hdparm -S[valor] [dispositivo]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).
Por exemplo se executarmos:
hdparm -S240 /dev/hdatemos por exemplo:
/dev/hda:
setting standby to 240 (20 minutes)
Com este comando, configuramos o HD para desligar após 20 minutos de inactividade.
Para desactivar o recurso spindown, executar:
hdparm -S0/dev/hdaActivando o hdparm na inicialização do sistema
Para utilizar o hdparm no inicialização do sistema, editar o arquivo /etc/hdparm.conf e descomentar as seguintes linhas:
#command_line {
# hdparm -d1 -a4 -m8 /dev/hda
#}
e colocar os parâmetros que estamos utilizando. Por exemplo:
command_line {
hdparm -c1 -d1 -X69 -A1 -a16 -m16 /dev/hda
}
Caso utilizemos mais de uma unidade de disco, acrescentar uma linha para cada unidade. Cconfiguração para um HD e um drive de CD-ROM:
command_line {
hdparm -c1 -d1 -X68 -A1 -a12 -m12 -S120 -m180 /dev/hda
hdparm -c1 -d1 -X66 /dev/hdc
}
Depois, estará tudo pronto e o script /etc/init.d/hdparm start será executado na inicialização do sistema.
NOTA: este artigo foi o resultado de um curso ministrado pela Moodle , no qual participei.

6 comentários:
Excelente post porém sempre que vejo alguém escrever ou falar do "hdparm" até me dá arrepios...
Convém sempre avisar para os backup e que isto pode ser muito perigo!
Apesar de ser um perigo quando bem tratado é máquina!
@braço.
Oi jocaferro :-)
Pá penso que se não se exceder os limites que os discos suportam penso que não há perigo de perca de dados.
Eu fiz todos so testes e por acaso nos meus discos não compensa ter o hdparm activado pois num dos testes o ganho é pouco significativo e no outro teste até perdia performance, isto com o sistema de ficheiros em ext3.
Quanto aos backups isso é verdade convém ter sempre os dados mais importantes salvaguardados. Ainda aqui há dias a testar o profile do thunderbird perdi todo o directório "Arquivo" onde está toda a minha vida informática.
A sorte é que uma semana antes tinha feito um bakcup e o que perdi não foi significativo. Apanhei um susto que nem te conto.
Abraço ;-)
Pois eu nem sequer estou curioso em experimentar ;-) ... Porque será ? Excelente post e dica (Moodle)!!
Cumprimentos
Peço desculpa João pois só agora é que vi o teu comentário :-(
Quanto ao hdparm, se fizerem com está no tutorial não há perigo, mas como diz o jocaferro e muito bem, convém ter sempre backups actualizados dos nossos dados, eu costumo ter e isso já me safou de vários desastres.
Quanto á moodle, é uma excelente oportunidade cedida pelos nossos irmãos Brasileiros de se aprender alguma coisa.
Tomara cá em Portugal haver iniciativas idênticas por parte do nosso governo.
Abraço ;-)
Não esquecer do sdparm que é o mesmo programa para discos sata, depois é só substituir os hd* por sd*
Bom post
Boa bruno, excelente dica, eu como não tenho discos sata não pensei que houvesse utilitário equivalente para eles e nunca me preocupei em pesquisar sobre o assunto.
Obrigado pela dica e pelo apoio.
Abraço ;-)
Enviar um comentário