Posso ver o progresso de uma operação de 'sincronização'?

87

Eu copiei um arquivo grande para um disco USB montado em um sistema Linux com async. Isso retorna para um prompt de comando relativamente rápido, mas quando eu digito sync , é claro, tudo tem que ir para o disco, e isso leva muito tempo.

Eu entendo que vai ser lento, mas há algum lugar onde eu possa assistir a um contador descer para zero? Assistir buffers em top não ajuda.

    
por mattdm 15.09.2012 / 04:09

3 respostas

138

Observar / proc / meminfo mostrará o número "Dirty" encolhendo com o tempo, à medida que todos os dados são apagados; algumas delas podem se espalhar em "Writeback" também. Isso será um resumo em relação a todos os dispositivos, mas nos casos em que um dispositivo no sistema é muito mais lento que o restante, você geralmente terminará onde tudo nessa fila está relacionado a ele. Você provavelmente encontrará o número sujo grande quando começar e a sincronização terminar no mesmo intervalo em que ele se aproximar 0. Tente isso para obter uma exibição interativa:

watch grep -e Dirty: -e Writeback: /proc/meminfo

Com discos regulares, normalmente posso ignorar o Writeback, mas não tenho certeza se ele está envolvido com mais frequência no caminho de transferência do USB. Se ele simplesmente salta para cima e para baixo sem uma tendência clara para isso, você provavelmente pode apenas olhar para o número sujo.

    
por 15.09.2012 / 08:55
19

Você pode ver o arquivo /sys/block/<device>/stat do dispositivo apropriado enquanto está sincronizando. A coluna 9 th indicará o número de solicitações em andamento no dispositivo, que deve ser reduzido a zero quando a sincronização for concluída.
Não conheço uma maneira de traduzir isso para vários bytes, mas ele deve fornecer uma ideia aproximada de quanto "material" ainda está pendente.

Veja o arquivo stat.txt na documentação do kernel para mais informações. (Há também um arquivo inflight nesse diretório no meu sistema que parece conter solicitações de leitura e gravação em andamento, mas não consigo encontrar documentos para isso.)

    
por 15.09.2012 / 07:38
6

Ao usar a resposta de Greg, você pode simplesmente ter sync executado em segundo plano enquanto exibe o estado do bloco Dirty na memória.

Para conseguir isso, basta executar este comando:

sync & watch -n 1 grep -e Dirty: /proc/meminfo

Isso chamará sync em segundo plano enquanto executa watch na frente. Quando o comando sync tiver terminado (quando o tamanho do bloco Dirty atingir 0), você terá uma saída assim:

1]  + 27260 done        sync

Isto significa que o comando terminou e você pode matar o comando watch com Ctrl + C .

    
por 24.05.2017 / 16:03