Como posso controlar o tempo de rotação do HDD?


71

Eu tenho 2 HDs no meu PC. O Ubuntu está desligando o disco rígido secundário muito rapidamente após cerca de 15 minutos, o que é curto para mim. Eu preciso controlar esse tempo. Como eu posso fazer isso?

Eu tentei o gerenciamento de energia do GNOME, mas não achei útil.

Respostas:


67

Dê uma olhada hdparm.

A partir do manual ( man hdparmna linha de comando):

-S Defina o tempo limite de espera (spindown) para a unidade. Este valor é usado pelo inversor para determinar quanto tempo esperar (sem atividade de disco) antes de desligar o motor do eixo para economizar energia. Sob tais circunstâncias, a unidade pode levar até 30 segundos para responder a um acesso subsequente ao disco, embora a maioria das unidades seja muito mais rápida.

A codificação do valor do tempo limite é um tanto peculiar. Um valor zero significa "tempos limite desativados": o dispositivo não entrará automaticamente no modo de espera. Valores de 1 a 240 especificam múltiplos de 5 segundos, produzindo tempos limite de 5 segundos a 20 minutos. Os valores de 241 a 251 especificam de 1 a 11 unidades de 30 minutos, produzindo tempos limite de 30 minutos a 5,5 horas. Um valor de 252 significa um tempo limite de 21 minutos. Um valor de 253 define um período de tempo limite definido pelo fornecedor entre 8 e 12 horas e o valor 254 é reservado. 255 é interpretado como 21 minutos mais 15 segundos. Observe que algumas unidades mais antigas podem ter interpretações muito diferentes desses valores.

Então sudo hdparm -I /dev/sdb | grep level, mostrará o valor atual de spindown, por exemplo:

Advanced power management level: 254

No manual: 254 está reservado, então espero que seja o padrão do Ubuntu (alguém pode confirmar / expandir isso, por favor?)

Exemplo:

sudo hdparm -S 25 /dev/sdb = spindown após 25 * 5 segundos.

sudo hdparm -S 245 /dev/sdb = spindown após (245-240) * 30 minutos.


graças Rinzwind para as pontas, que me ajudou muito, mas eu gostaria de ver gui para isso na próxima versão do ubuntu ou poderia ser integrado no gerenciador de energia gnome
user16295

4
Em relação à resposta do lzap, você parece usar o grepAPM ( -Bparm), mas fala sobre -So problema. Você também sabe algo sobre APM?
turbo

3
A -Bconfiguração atual é mostrada como indicado acima. Como posso ver a -Sconfiguração atual ?
SabreWolfy

5
sudo hdparm -y /dev/sdbmata a fera imediatamente
siamii 03/03

11
@SabreWolfy Eu fiz isso como uma pergunta separada: como descobrir o tempo atual de rotação da unidade?
Aprndrük

46

Utilitário de disco -> selecione unidade de disco rígido -> clique no ícone "Mais ações ..." no canto superior direito -> Configurações da unidade ...

O meu é assim: captura de tela


6
Mais fácil de longe, obrigado! (Aliás, o pacote que você precisa instalar se não o tiver gnome-disk-utility.
Gerhard Burger

caminho a percorrer linux! +1
neu-rah

Sim, extremamente fácil - feliz que isso esteja aqui.
Zzzach ... 15/05

@ Ray Você, senhor, é incrível! Basicamente, eu não tinha esperança de que funcionasse para um disco rígido externo, mas funcionou!
UTF-8

11
Por que a maioria das dicas envolve edição propensa a erros ou operações de console, enquanto ferramentas amigáveis ​​como essa já existem!
WooYek

30

Se você estiver interessado em fazer a configuração do hdparm persistente entre as reinicializações, em vez de adicioná-la ao crontab, você pode usar o /etc/hdparm.conf. Eu tenho o seguinte, observe o uso de capital S, não em minúsculas:

command_line {
    hdparm -S 25 /dev/disk/by-uuid/f6c52265-d89f-43a4-b03b-302c3dadb215 
}

Adicione essa linha substituindo o UUID pelo seu, ou você também pode especificar o dispositivo usando o /dev/sdXformato. Você pode descobrir o UUID do seu disco com o comando sudo blkid.


3
É correto usar command_linehoje em dia? Eu tenho exemplos diferentes no meu /etc/hdparm?
Dims 22/10

11
A resposta de Ondra Žižka parece estar mais atualizada.
Raphael

9
  1. Encontre o UUID do seu disco .

    sudo lsblk --output NAME,FSTYPE,LABEL,UUID,MODE
    
  2. Editar /etc/hdparm.conf

    sudo -H gedit /etc/hdparm.conf  # Be careful from now on
    
  3. Procure spindown-timeou a seção de configurações do disco.

    /dev/disk/by-label/4TB {
        spindown_time = 1200
    }
    
  4. Prefiro me referir ao disco por UUID, que permanece o mesmo em diferentes instalações (a menos que você o altere no próprio HW).

    /dev/disk/by-uuid/91e32677-0656-45b8-bcf5-14acce39d9c2 {
        spindown_time = 1200
    }
    
  5. Se o script init causar problemas de inicialização, você poderá transmitir nohdparm a linha de comando do kernel, e o script não será executado.


Quais são as unidades para esse parâmetro?
detly 6/08/16

IIRC, são segundos. Ou talvez esse seja o parâmetro que tinha regras malucas como "se for menor de 10 anos, então são dezenas de segundos, se abaixo de 100, então são minutos" e assim por diante. Eu precisaria encontrar.
Ondra Žižka

2
Não são unidades, verifique isto: wiki.archlinux.org/index.php/Hdparm
Ondra Žižka

Saúde, por algum motivo eu não consegui encontrar man hdparm.conf.
detly 9/08/16

man hdparm.confindiretamente lê que o valor é passado para, -Sportanto, para valores <255 deve ser compatível com a regra na resposta superior . Qualquer informação adicional é bem-vinda.
dma_k

8

Depois de passar horas e horas, descobri que minha unidade WDC não suporta o comando hdparm -S, independentemente do valor do atributo idle3 (google: idle3ctl). E esse é um problema comum com as unidades WD. Mas tenho o prazer de anunciar que o hd-idle ( http://hd-idle.sourceforge.net/ ) funciona perfeitamente. Se instalado a partir do pacote dpkg-builded (consulte as Notas de instalação), ele cria o daemon no ubuntu e no debian (a configuração está em / etc / default / hd-idle). Funciona bem depois de sair da hibernação também.

mc padrão # ps aux | grep hd-ocioso | grep -v grep | corte -c 66-; para f em [ad]; do hdparm -C / dev / sd $ f | grep -v "^ $"; feito
/ usr / sbin / hd-idle -i 1800 -a sdc -i 600 -a sdd -i 60 -l /var/log/hd-idle.log
/ dev / sda:
 estado da unidade: ativo / inativo
/ dev / sdb:
 o estado da unidade é: em espera
/ dev / sdc:
 o estado da unidade é: em espera
/ dev / sdd:
 o estado da unidade é: em espera



5

Descobri que o comportamento spindown do Samsung HD204UI depende do nível de APM ( hdparm -B). Se o nível de APM for 127, o tempo limite de spindown é de 10 s. Se o nível de APM for 150, o tempo limite de spindown será definido pela -Sopção.


O hdparm pode definir, mas não obter a -Sopção (consulte Como determinar o tempo de rotação do disco ). Para obtê-lo, use o software da GUI "Disco". Veja a outra resposta com a captura de tela.
KrisWebDev

5

Eu adiciono algo como:

@reboot sudo hdparm -S244 /dev/disk/by-uuid/71492809-e463-41fa-99e2-c09e9ca90c8e  > /dev/null 2> /dev/null

ao crontab da raiz. Usar o uuid é melhor, acho que porque sda/ sdbetc parece mudar a cada reinicialização


10
Por que não usar hdparm.conf?
Aprndrük

3

No Ubuntu 14.04

Discos> destaque drive> clique na engrenagem no canto superior direito> Configurações da unidade> agora você tem as configurações de espera, APM, AAM e cache de gravação em uma GUI fácil de usar!


Como você faz isso funcionar? Eu configurei isso e, após a reinicialização, se eu voltar, lembrou que a unidade deve desligar, mas nunca o faz. O hdparm -C sempre mostra que está ativo e apenas a execução do hdparm -S xxx na linha de comando faz com que funcione.
dan carter

11
Onde você encontra "Discos"?
Nellmcb

1

No Debian, com unidades WD, acho que definir qualquer nível com o hdparm -S resulta no retorno do nível 254 na unidade hdparm -I subsequente . Então, eu realmente não tenho certeza se eles estão girando para baixo ou não. Eu acho que eles ainda estão girando para baixo.

Essas unidades estão em uma matriz de servidores e eu realmente não quero que elas diminuam. No passado, julguei isso definindo um trabalho cron para atualizar um arquivo a cada poucos minutos.


1

Não tive sorte com o hdparm em um HDD externo montado em um gabinete USB, que eu uso para servir mídia com minidlna.

Me deparei com uma ideia daqui: https://serverfault.com/questions/562738/keeping-usb-backup-drive-from-sleeping- while - mounted

Os melhores resultados vêm do uso do uuid do disco, que você pode encontrar com:

sudo blkid

O método a seguir requer acesso root, mas o hdparm também. Isso usa o crontab para ler um bloco aleatório da unidade a cada 5 minutos e ignora todas as mensagens. Para garantir que você tenha o UUID correto, teste-o na linha de comando como esta (certifique-se de usar o UUID desejado, não este):

sudo dd if=/dev/disk/by-uuid/f01df4b5-6865-476a-8d3b-597cbd886d41 of=/dev/null count=1 skip=$RANDOM

Você deve ver uma saída como esta:

1+0 records in
1+0 records out
512 bytes copied, 0.000738308 s, 693 kB/s`

Para suprimir essa mensagem, que pode acabar sendo escrita em algum lugar, potencialmente o sistema de arquivos / (que está em um SSD no meu caso), abaixo está o que estou usando no crontab raiz. Você chega lá com

sudo crontab -e

Então, sob os comentários:

*/5 * * * * bash -c 'dd if=/dev/disk/by-uuid/f01df4b5-6865-476a-8d3b-597cbd886d41 of=/dev/null count=1 skip=$RANDOM' >/dev/null 2>&1

Espero que isso ajude alguém com problemas semelhantes. Infelizmente, isso ainda é gravado no syslog, mas existem maneiras potencialmente de suprimir isso; veja esta publicação ServerFault .

07-01-2017 09:02:

Consegui suprimir essas mensagens editando /etc/rsyslog.d/50-default.conf para alterar esta linha:

*.*;auth,authpriv.none -/var/log/syslog

para isso:

*.*;cron,auth,authpriv.none -/var/log/syslog

Infelizmente, isso suprime todas as mensagens cron; Não foi possível ao cron redirecionar o logoff do sistema de arquivos raiz (que está em um SSD antigo no meu caso, por isso quero limitar as gravações), mas como esse é apenas um servidor doméstico, provavelmente não estou perdendo muito. Definitivamente, não recomendaria essa estratégia para uma máquina de produção.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.