Como encontrar o que está escrito no sistema de arquivos no linux

1

Como posso descobrir quais processos gravam em um disco específico ao longo do tempo?

No meu caso particular eu tenho um pequeno homeserver rodando 24/7 e incluí um script no crontab para desligar todas as unidades que não são usadas (nenhuma mudança em / proc / diskstats por 15 minutos).

Mas o disco do meu sistema não desce. Eu estou suspeitando de logs, mas provavelmente não são apenas os logs gravados no sistema de arquivos no disco do sistema e eu não quero mover todos os arquivos de log para outra coisa apenas para descobrir que o disco ainda não gira e não há nada que eu possa fazer contra isso.

    
por bardiir 03.10.2012 / 10:36

2 respostas

2

Eu não sei, mas estou adivinhando que não há nada que você possa fazer sobre isso. Aqui está o meu raciocínio:

Quando você diz "disco do sistema", imagino que você esteja falando do disco que contém o sistema de arquivos raiz.

O sistema de arquivos raiz contém vários diretórios e arquivos que são monitorados por vários utilitários, incluindo /etc/cron.* , que é observado e executado pelo cron. Você provavelmente poderia colocar / etc em um sistema de arquivos diferente de /, mas quase certamente seria mais problema do que vale a pena, e certamente não é uma configuração comum.

/proc/diskstats inclui atividade de leitura de disco, não apenas gravações.

Toda vez que o cron executa seu script para verificar se houve alguma atividade de disco, isso quase certamente resulta em várias leituras (mesmo se não gravar em) vários locais: crontabs, interpretadores de comandos, bibliotecas usadas por eles etc. você está executando o sistema com noatime , essas leituras também resultam em gravações para atualizar os registros de data e hora do tempo de acesso nos arquivos / inodes em questão.

Assim, toda vez que seu script é executado para verificar se houve alguma atividade de disco de acordo com / proc / diskstats, isso em si resulta em atividade de disco de acordo com / proc / diskstats. Seus critérios de "sem valores alterados" nunca serão atingidos e a unidade nunca será desativada.

Se esta é uma grande preocupação para você , sugiro mover tudo o que não precisa estar no sistema de arquivos raiz para um sistema de arquivos diferente e executar o sistema de arquivos raiz SSD ou dispositivo flash, talvez até montado somente leitura. Isso deve permitir que a unidade giratória pare de funcionar quando não houver atividade explícita. No entanto, imagino que isso seja mais problemático do que vale a pena. Se você quer apenas que as unidades girem para se livrar do ruído, mover o que você tem agora no sistema de arquivos raiz para um pequeno dispositivo de estado sólido (SSD ou flash) provavelmente realizará a mesma coisa com consideravelmente menos esforço. Basta levar em conta o fato de que eles têm um número limitado de ciclos de gravação antes da falha (no mínimo, considere executar com noatime ou com um sistema de arquivos projetado com SSDs em mente).

    
por 03.10.2012 / 11:33
4

Use o comando iotop .

Isso mostrará em detalhes todos os comandos que estão gravando no disco.

Exemplo de saída:

Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    4 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0]
    6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
    8 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]
   10 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/1]
   11 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:1]
   12 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/1]
   13 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [cpuset]
   14 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khelper]
   15 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kdevtmpfs]
   16 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [netns]
   17 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [sync_supers]
   18 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [bdi-default]
   19 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kintegrityd]
   20 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kblockd]
   21 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ata_sff]
   22 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khubd]
   23 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [md]
   24 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/1:1]
   25 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khungtaskd]
   26 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kswapd0]
   27 be/5 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksmd]

Além disso, use o comando iostat que exemplo de saída se parece com isto:

Linux 3.2.6 (z)         10/03/2012      _i686_  (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.14    0.01    0.26    0.01    0.00   99.59

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.81        13.67         9.14    8968739    5996546

Por favor, tente mais ao procurar por perguntas já respondidas.

    
por 03.10.2012 / 10:58