Então aqui está o que está acontecendo.
Iniciei um backup de uma unidade no meu servidor através de um USB ao vivo do Linux. Comecei a copiar a primeira unidade com o dd
comando vanilla; apenas sudo dd if=/dev/sda of=/dev/sdc1
então lembrei que isso deixa o console em branco até terminar.
De qualquer maneira, eu precisava executar um backup diferente na mesma unidade, então iniciei esse também sudo dd if=/dev/sdb of=/dev/sdc3 status=progress
e recebi uma linha de texto que mostra a taxa atual de transferência e o progresso em bytes.
Eu estava esperando por um método que mostra uma porcentagem do backup em vez de fazer a matemática de quantos bytes são salvos em backup de 1,8 TB. Existe uma maneira mais fácil de fazer isso do que status = progress?
fonte
dd
já havia terminado todas aswrite()
chamadas do sistema efsync
ouclose
estava bloqueado aguardando a gravação chegar ao disco. Com um pen drive lento, os limites padrão de buffer de E / S do Linux para o tamanho dos grandes buffers de gravação sujos levam a um comportamento qualitativamente diferente do que os arquivos grandes em discos rápidos, porque os buffers são tão grandes quanto o que você está copiando e ainda leva um tempo perceptível.dd
é realmente grande informação, especialmente para servidores onde você não pode / não deseja instalarpv
Minha ferramenta principal para esse tipo de coisa é
progress
:Acho particularmente útil porque:
pv
pipe oudcfldd
, não preciso me lembrar de executar um comando diferente ao iniciar a operação, posso monitorar as coisas após o fato;kill -USR1
, ele funciona em praticamente qualquer comando, não preciso sempre verificar a página de manual para ter certeza de que não estou matando acidentalmente a cópia; Além disso, é bom que, quando chamado sem parâmetros, mostre o progresso de qualquer comando "transferência de dados" comum em execução no momento, para que eu nem precise procurar o PID;pv -d
, novamente, não preciso procurar o PID.fonte
--command <command-name>
.Execute
dd
, então, em um shell separado, chame o seguinte comando:Isso fará com que o pv obtenha estatísticas sobre todos os descritores de arquivos abertos do
dd
processo. Ele mostrará a você onde estão os buffer de leitura e gravação.fonte
/proc/$PID/fdinfo
para as posições dos arquivos e/proc/$PID/fd
para ver quais arquivos (e, portanto, os tamanhos). Então, sim, é uma idéia muito legal e boa para um recurso, mas eu não chamaria de "incrível", porque existem APIs do Linux que permitem pesquisar as posições dos arquivos de outro processo.pv
oleodutos com antecedência.) Obviamente, presumi isso quando vi que isso funciona.Há uma alternativa para
dd
:dcfldd
.http://dcfldd.sourceforge.net/
https://linux.die.net/man/1/dcfldd
fonte
Como porcentagem, você teria que fazer algumas contas, mas é possível obter o progresso de um dd na forma legível por humanos, mesmo depois de já começar, fazendo
kill -USR1 $(pidof dd)
O processo dd atual será exibido semelhante a:
11117279 bytes (11 MB, 11 MiB) copiados, 13.715 s, 811 kB / s
fonte
status=progress
dá