Descubra quais processos estão gravando no disco rígido

31

No meu Lenovo T400 e Ubuntu, a luz para gravação no disco rígido continua piscando. Eu queria saber se no Linux é possível descobrir quais processos estão fazendo E / S no disco rígido? Assim como top, você pode descobrir quais processos estão usando mais CPU e memória.

Tim
fonte

Respostas:

41

Iotop é uma boa ferramenta para o que você deseja. Também permite exibir a quantidade acumulada de E / S em qualquer um dos discos de leitura, gravação de disco, troca e E / S (porcentagem geral). Isto é através de uma interface bacana:

  • Você apenas pressiona ao teclado e ele classifica os processos mais famintos no topo.
  • Invertendo a ordem, basta pressionar r.
  • Se você deseja classificar por outras colunas, basta pressionar a tecla esquerda / direita.

Como top, a apresentação é bastante ocupada. Outra coisa é que ele não tem as inúmeras opções que existem top(por exemplo, não posso escolher ocultar nenhuma das colunas nas quais estou desinteressado), mas a ferramenta é mais que suficiente para seu objetivo específico.

tshepang
fonte
3
Powertop também é útil para descobrir o que está consumindo a bateria em um laptop; O iotop ainda é o primeiro lugar para procurar acessos ao disco.
Gilles 'SO- stop be evil'
pode-se passar -o( --only) para filtrar todas as tarefas que não fazem nenhuma E / S. Isso torna a lista menos cheia
Marcin Orlowski 18/07
15

Você pode usar lsof( man lsof ). A seguir, retornará uma lista de todos os arquivos abertos para gravação:

lsof | grep -e "[[:digit:]]\+w"
James Sumners
fonte
11
Quais arquivos estão abertos e quais arquivos estão realmente sendo acessados ​​são duas coisas diferentes.
Psusi
@psusi É muito provável que um arquivo aberto para gravação seja "acessado". Além disso, mais informações podem ser recuperadas aprendendo lsof através de sua página de manual.
James Sumners
5
Os arquivos abertos para gravação podem ser gravados em algum momento, mas não necessariamente no momento. Muitos arquivos são mantidos abertos, mas raramente são gravados. Por outro lado, os arquivos que estão sendo gravados podem ser abertos e fechados rapidamente e, portanto, não aparecerão em lsof. De qualquer forma, é de pouca ajuda descobrir qual processo está realmente gravando no disco no momento.
Psusi
A wpartir do comando acima, você faz grep para arquivos abertos apenas para gravação . Os arquivos abertos para gravação e leitura ( u) não serão exibidos, mas também podem ser gravados. Se você gostaria de ver arquivos de abrir para escrita e para + leitura e escrita, acredito que isso é o que você está procurando:lsof | grep -e "[[:digit:]]\+[wu]\{1\}"
Martijn
11
@Martijn Você vai querer usar grep -e**w**a correspondência evitar [0-9]\+[wu]dentro de outro colunas
2

Use strace.

Mehrdad
fonte
6
Isso lhe dirá o que um processo específico está fazendo, não ajudará a descobrir qual processo está fazendo algo.
Gilles 'SO- stop be evil'
2

Especialmente para baixa atividade de disco, é necessário usar o iotop no modo em lote, para evitar que linhas de acesso curtas desapareçam rapidamente. A resposta de Como faço para registrar / ler o sistema de arquivos por nome de arquivo no Linux? mostra como fazer isso.

Até agora iotopé a melhor solução geral. O comando a seguir fornece uma saída em tempo real de todos os processos usando o disco.

iotop -bktoqqq -d .5

where: -b     is batch mode
       -k     is kilobytes/s
       -t     adds timestamp
       -o     only show processes or threads actually doing I/O
       -qqq   removes output headers
       -d .5  updates every .5 seconds

Depois de ter o ID do processo, você também pode encontrar os arquivos com

 lsof -p $PID
Frank Breitling
fonte
11
Como esta resposta difere das respostas acima (muito antigas)? É bom responder uma pergunta antiga para explicar como sua resposta difere das respostas anteriores. Isso ajuda o leitor a classificar entre as respostas.
Stephen Rauch
Obrigado por apontar isso. Editei esta resposta levando em consideração o seu comentário.
Frank Breitling