Copiei um arquivo grande para um disco USB montado em um sistema Linux com assíncrono. Isso retorna para um prompt de comando de forma relativamente rápida, mas quando eu digito sync
, é claro, tudo precisa ir para o disco, e isso leva muito tempo.
Entendo que vai ser lento, mas existe algum lugar onde eu possa assistir a um contador descer para zero? Assistindo buffers
em top
não ajuda.
linux
filesystems
io
async
mattdm
fonte
fonte
Respostas:
Observar
/proc/meminfo
mostrará oDirty
número diminuindo ao longo do tempo, à medida que todos os dados serão processados; algumas delas também podem se espalharWriteback
. Esse será um resumo de 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á oDirty
número grande quando iniciar esync
terminar quase ao mesmo tempo em que se aproxima de 0. Tente isto para obter uma exibição interativa:Em discos regulares, normalmente posso ignorar
Writeback
, mas não tenho certeza se ele está envolvido com mais frequência no caminho de transferência USB. Se ele apenas saltar para cima e para baixo sem uma tendência clara, provavelmente você pode apenas olhar para oDirty
número.fonte
Você pode procurar no
/sys/block/<device>/stat
arquivo o dispositivo apropriado enquanto estiver sincronizando. A 9 ª coluna indicará o número de pedidos em voo sobre o dispositivo, que deve ir para baixo a zero quando a sincronização está feito.Não sabe como traduzir isso para um número de bytes, mas deve fornecer uma idéia aproximada de quanto "material" ainda está pendente.
Veja o arquivo stat.txt na documentação do kernel para um pouco mais de informação. (Também há um
inflight
arquivo nesse diretório no meu sistema que pode conter solicitações de leitura e gravação em andamento, mas não consigo encontrar documentos para isso.)fonte
watch -t -n1 'awk "{ print \$9 }" /sys/block/sdd/stat'
sync
depois. Ele chega a 0, mas apenas no final. Isso torna a outra resposta mais útil para observar impacientemente o progresso.du
para calcular os dados reais que são sincronizados na unidade.Usando a resposta de Greg, você pode simplesmente
sync
executar em segundo plano enquanto exibe o estado do bloco Dirty na memória.Para conseguir isso, basta executar este comando:
Isso chamará
sync
em segundo plano enquanto estiver executandowatch
na frente. Quando osync
comando terminar (aproximadamente quando o tamanho do bloco Dirty atingir 0), você terá uma saída semelhante a esta:Isso significa que o comando foi concluído e você pode matá-lo
watch
com Ctrl+ C.fonte