Durma o disco rígido e acorde somente quando necessário

10

Quero conectar outro disco rígido ao meu computador, que quero dormir 99% do tempo. Vou usá-lo apenas para algumas coisas, mas preciso que ele seja montado o tempo todo.

Para conseguir isso, gostaria de saber:

  1. Como faço para registrar quais processos acessam um dispositivo? Eu preciso que o log seja capaz de dizer o que está causando o despertar do disco rígido, se houver, para que eu possa agir de acordo.
  2. Preciso fazer algumas configurações especiais do kernel para que o dispositivo durma mais?
  3. Como faço para definir os intervalos de suspensão do disco rígido?
Excluído
fonte

Respostas:

13

O intervalo de suspensão é chamado "APM" (Gerenciamento automático de energia) e spindown_time. Isso é controlado da hdparmseguinte maneira:

hdparm -B 50 -S 36 /dev/disk/by-label/BACKUP-HDD

Isso fará com que o seu HDD fique inativo com ~ 3min de inatividade.

Kolypto
fonte
4

Como você está no Linux, você pode usar o novo fatraceutilitário, que registra todos os acessos a arquivos e informa qual processo é responsável:

https://launchpad.net/fatrace

Mais informações aqui:

http://www.piware.de/2012/02/fatrace-report-system-wide-file-access-events/

Ele faz uso da API linot fanotify ( mais detalhes ) disponível desde o kernel 2.6.37 do linux.

fatrace não foi compactado por todas as distribuições em julho de 2014 (entrou recentemente no debian testing, portanto deve ser enviado em 'jessie'), mas é fácil de instalar a partir do código-fonte.

JosephH
fonte
1
Não sei o que você quer dizer com "maioria" das distribuições. Como sempre, o Debian é a última distribuição a obter algo. Eu já o disponibilizo no Fedora há algum tempo ...
Michael Hampton
3

http://en.wikipedia.org/wiki/Fuser_%28Unix%29 - fuser é um comando UNIX usado para mostrar quais processos estão usando um arquivo, sistema de arquivos ou soquete especificado.

http://sourceforge.net/projects/hdparm/ - obtém / define os parâmetros da unidade ATA / SATA no Linux (procure a opção -S)

http://sg.danny.cz/sg/sg3_utils.html - O pacote sg3_utils contém utilitários que enviam comandos SCSI para os dispositivos. Bem como dispositivos em transportes tradicionalmente associados ao SCSI (procure sg_start)

Maciek Sawicki
fonte
Obrigado pela sua resposta informativa! Parece que o fusor me diz apenas quais processos estão usando um arquivo, sistema de arquivos e soquete na instância da emissão do comando. Embora isso seja muito útil se um processo faz algo rápido, como listar o conteúdo do diretório raiz do dispositivo, eu posso sentir falta mesmo se houver um fusor em execução em loop. Se houvesse algo que esperasse e registrasse todas as atividades até que eu dissesse para parar, seria ainda mais útil nessa situação. Você conhece algum?
Excluído
Eu acho que hdparam é o que eu vou usar para configurar o tempo de espera antes de dormir? E o sg3_utils é apenas uma ferramenta poderosa, mas não vou usá-lo neste caso? (Como eu acho que não terá que especificar manualmente quando o HDD deve dormir depois de configurá-lo usando hdparam?)
Deleted
3

btraceou blktrace(um invólucro btrace) rastreie a E / S do bloco do kernel e pode ajudá-lo lá.

anon
fonte
2

lsof +D /path/to/mount deve mostrar todos os processos que possuem qualquer arquivo aberto no caminho indicado.

Urso de pelúcia
fonte
0

Eu tenho um problema semelhante. Tenho SSD, /dev/sdbcom SO (Linux Mint 18.1 baseado no Ubuntu Xenial) e HDD /dev/sda, com dados, que utilizo de tempos em tempos. Ambos os discos são criptografados. As partições do disco rígido não estão montadas. De qualquer maneira, em períodos de vários minutos, o HDD acorda, depois dorme e depois acorda novamente. Bagunça.

Aqui está uma pergunta duplicada com resposta útil , que sugere auditdencontrar o processo de mau comportamento.

apt-get install auditd
auditctl -w /dev/sda -p rwa

Então eu forço HDD para dormir hdparm -Y /dev/sda. Então aguarde até ouvir o HDD girando novamente. Então corra ausearch -f /dev/sda. No meu caso, mostra entradas como as seguintes.

time->Sat Feb 25 12:38:17 2017
type=PROCTITLE msg=audit(1488022697.651:1744): proctitle=2F7573722F6C69622F756469736B73322F756469736B7364002D2D6E6F2D6465627567
type=PATH msg=audit(1488022697.651:1744): item=0 name="/dev/sda" inode=376 dev=00:06 mode=060660 ouid=0 ogid=6 rdev=08:00 nametype=NORMAL
type=CWD msg=audit(1488022697.651:1744):  cwd="/"
type=SYSCALL msg=audit(1488022697.651:1744): arch=c000003e syscall=2 success=yes exit=12 a0=f3fb90 a1=800 a2=7f4745221f64 a3=30 items=1 ppid=1 pid=18520 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="pool" exe="/usr/lib/udisks2/udisksd" key=(null)

Parte relevante é exe = "/ usr / lib / udisks2 / udisksd" . Embora eu também tivesse smartmontoolsquem smartdtambém era o culpado. Eu desinstalei smartmontoolse parei o udisk2serviço com service udisks2 stop. Depois que o HDD dorme como esperado.

Observe que udisks2será iniciado automaticamente quando eu, por exemplo, abrir o aplicativo Disks , por isso preciso interrompê-lo novamente. Outra desvantagem é que os parâmetros SMART não são monitorados para os dois discos, o que não é bom, mas como solução alternativa, ele se encaixa.

Também uma coisa que não está clara é que este relatório de erro diz udisks2que não faz pesquisa de discos, o que agora é feito pelo kernel. Mas a evidência parece indicar o contrário.

saaj
fonte