Atualização 2016 : Se você usa o GNU coreutils> = 8.24 (padrão no Ubuntu Xenial 16.04 para cima), consulte o método 2 abaixo para obter uma maneira alternativa de exibir o progresso.
Método 1: usando pv
Instale pv
e coloque-o entre os dd
comandos somente de entrada / saída .
Nota : você não pode usá-lo quando você já iniciou dd
.
Na descrição do pacote :
pv
- Pipe Viewer - é uma ferramenta baseada em terminal para monitorar o progresso dos dados através de um pipeline. Ele pode ser inserido em qualquer pipeline normal entre dois processos para fornecer uma indicação visual da rapidez com que os dados estão passando, quanto tempo demorou, quão perto está da conclusão e uma estimativa de quanto tempo levará até a conclusão.
Instalação
sudo apt-get install pv
Exemplo
dd if=/dev/urandom | pv | dd of=/dev/null
Resultado
1,74MB 0:00:09 [ 198kB/s] [ <=> ]
Você pode especificar o tamanho aproximado com o --size
se desejar uma estimativa de tempo.
Exemplo Supondo que um disco de 2 GB seja copiado de / dev / sdb
Comando sem pv
seria:
sudo dd if=/dev/sdb of=DriveCopy1.dd bs=4096
Comando com pv
:
sudo dd if=/dev/sdb | pv -s 2G | dd of=DriveCopy1.dd bs=4096
Resultado:
440MB 0:00:38 [11.6MB/s] [======> ] 21% ETA 0:02:19
Outros usos
Obviamente, você pode usar pv
diretamente para canalizar a saída para o stdout:
pv /home/user/bigfile.iso | md5sum
Resultado
50,2MB 0:00:06 [8,66MB/s] [=======> ] 49% ETA 0:00:06
Observe que, nesse caso, pv
reconhece o tamanho automaticamente.
Método 2: Nova status
opção adicionada ao dd
(GNU Coreutils 8.24+)
dd
no GNU Coreutils 8.24+ (Ubuntu 16.04 e versões mais recentes) obteve uma nova status
opção para exibir o progresso:
Exemplo
dd if=/dev/urandom of=/dev/null status=progress
Resultado
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
dd if=/dev/zero bs=1M count=35000 | pv | dd of=VirtualDisk.raw
.pv bigfile.iso | dd of=VirtualDisk.raw bs=1M count=35000
obras, verificadas. @SopalajodeArrierez, os parâmetros podem ser dados no segundo dd.pv < /dev/sda > /dev/sdb
parece ficar melhor velocidade ( fonte )dd if=/dev/urandom | pv | of=/dev/sdb
fornecem ~ 18MB / s de gravação,dd if=/dev/zero | pv | of=/dev/sdb
~ 80MB / s, e o velho comumdd if=/dev/zero of=/dev/sdb
fornece ~ 550MB / s (próximo à velocidade máxima de gravação do SSD). Tudo combs=4096000
.Do HowTo: Monitorar o progresso do dd
Você pode monitorar o progresso do dd sem interrompê-lo usando o
kill
comandoPara ver o progresso de
dd
uma vez em execução, abra outro terminal e digite:Isso exibirá o
dd
progresso nadd
janela do terminal sem interromper o processo. Se você estiver no BSD ou no OS X, use emINFO
vez deUSR1
. OUSR1
sinal terminará dd.Se você deseja obter atualizações regulares do
dd
progresso, digite:watch
sondará odd
processo a cada -n segundos (-n5
= 5 segundos) e relatará sem interromper.Observe as aspas simples apropriadas nos comandos acima.
fonte
kill -INFO $(pgrep ^dd$)
em sistemas BSD (como o OSX).sudo pkill -usr1 dd
é mais fácil de lembrar, funciona perfeitamente (pelo menos no Ubuntu 14.04) e é menos digitado.pv
retardar a transferência, como TeddHansen mostrou. Além disso, aposto que muitas pessoas pesquisam isso no Google porque já iniciaram add
operação;)Alguns exemplos úteis de uso com
pv
menos digitação ou mais progresso do que outras respostas:Primeiro você precisará instalar
pv
, com o comando:Então, alguns exemplos são:
Nota: a primeira amostra possui 5 caracteres a menos que digita
dd if=/dev/urandom | pv | dd of=/dev/null
.E o meu favorito para clonar uma unidade de disco (substitua X pelas letras da unidade):
fonte: http://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress- while- coping/
Também para me arquivar.
fonte
dialog
com o comandoapt-get install dialog
dialog
exemplo. SERENIDADE AGORA !dialog
isso ajudará insanamente a escrever scripts de shell: Dbrew install pv dialog
para Mac. Também este cavalheiro calcula com estilo. Bravo.Use Ctrl+ Shift+ Tenquanto
dd
estiver em execução e ele produzirá o progresso (em bytes):fonte
dd
.^T
para o terminal (exceto que muitos aplicativos de terminal interceptam Ctrl-Shift-T e abrem uma nova guia). Muitos pesquisadores no OSX / BSD pode apreciar esta resposta, mas deve ficar claro que não é para Ubuntu (ou GNU / Linux em geral?)Por uma questão de completude:
A versão 8.24 dos coreutils do GNU inclui um patch para o dd introduzindo um parâmetro para imprimir o progresso.
O commit que introduziu essa alteração tem o comentário:
Muitas distribuições, incluindo o Ubuntu 16.04.2 LTS, usam esta versão.
fonte
apt install build-essential
eapt-get build-dep coreutils
, faça o download do coreutils-8.25.tar.xz,tar xvf coreutils-8.25.tar.xz
configure --prefix=$HOME/usr/local
e executemake
. Recém compiladodd
estará sobsrc
dir. Você pode copiá-lo para / bin e substituir existente ou jus executados como src / DDO melhor é usar http://dcfldd.sourceforge.net/ , é fácil de instalar através do apt-get
fonte
dd
e opçãostatus=on
por padrão, para mensagens de progressostatusinterval=N
(N em blocos) para a frequência de atualização de mensagens esizeprobe=[if|of]
para um indicador de porcentagem. Vou apelidar-lo paraDD
:)O status de progresso nativo foi adicionado ao dd !!!
A nova versão do Coreutils (8.24) adiciona um status de progresso à
dd
ferramenta:Uso no Xubuntu 15.10:
Abra um terminal e digite estes comandos:
Executar
dd
como root:Você verá: Bytes, segundos e velocidade (Bytes / segundo).
Para verificar as versões de
dd
:Nativo:
Novo:
fonte
Se você já iniciou o dd e está escrevendo um arquivo, como ao criar uma cópia de um pendrive no disco, pode usar o comando watch para observar constantemente o tamanho do arquivo de saída para ver as alterações e estimar a conclusão.
Para ver apenas o tamanho do arquivo (exibição h-humana):
fonte
A
dd | pv | dd
tríade fez minha cópia de 50GB vm demorar 800 segundos, em vez de 260 segundos usando apenas dd. Com esse pipeline, pelo menos, o pv não tem idéia de quão grande é o arquivo de entrada, para que não seja capaz de lhe dizer quanto tempo você está, portanto, não há desvantagem em fazê-lo da seguinte maneira - e você obtém uma boa vantagem de velocidade:Eu evitaria o pv em qualquer coisa grande e (se estiver usando o Bash):
Control-Z o processo dd
bg
para colocá-lo em segundo plano. Observe quebg
você fornecerá uma saída como[1] 6011
onde o último número é uma identificação de processo. Então faz:while true; do kill -USR1 process_id ; sleep 5; done
onde process_id é a identificação do processo que você observou. Pressione Control-C quando vir algo como:
Você terminou.
Edit: Administrador de Sistemas Silly! Automatize sua vida, não trabalhe! Se eu tenho um longo processo de dd que quero monitorar, aqui está uma lista que cuidará de toda a enchilada para você; coloque tudo isso em uma linha:
Você pode, é claro, fazer um script, talvez transformar $ 1 em seu arquivo de entrada e $ 2 em seu arquivo de saída. Isso é deixado como um exercício para o leitor. Observe que você precisa de um pouco de sono antes que a matança ou a matança possam morrer tentando enviar um sinal para dd quando ainda não estiver pronto. Ajuste o sono conforme desejado (talvez até remova o segundo sono completamente).
Bash- FTW! :-)
fonte
while
loop. Usewatch
.sudo watch pkill dd
. Então assistadd
as estatísticas de saída confortavelmente.watch pkill -USR1 -x dd
. Desde que eu também usowatch
para outras tarefas semelhantes, esta vem naturalmente.http://linuxcommando.blogspot.com/2008/06/show-progress-during-dd-copy.html
Basicamente:
fonte
O mais fácil é:
oflag=dsync
manterá sua escrita sincronizada, para que as informaçõesstatus=progress
sejam mais precisas. No entanto, pode ser um pouco mais lento.fonte
conv=fsync
é melhorNo Ubuntu 16.04
O Ubuntu 16.04 vem com a versão 8.25 do dd (coreutils) . Portanto, a opção
status=progress
é suportada :-)Para usá-lo, basta adicionar
status=progress
junto com o seudd
comando.Exemplo:
Dá o status de
fonte
Use a opção
status=progress
para obter o progresso durante a transferência.Além disso,
conv=fsync
exibirá erros de E / S.Exemplo:
fonte
Eu realmente gosto de ddrescue, ele funciona como dd, mas gera resultados e não falha em erros, pelo contrário, possui um algoritmo muito avançado e tenta realmente fazer uma cópia bem-sucedida ... Existem também muitas GUIs para isso
Projeto: https://www.gnu.org/software/ddrescue
Wikipedia: https://en.wikipedia.org/wiki/Ddrescue
fonte
Eu criei o wrapper bash
dd
que será usadopv
para mostrar o progresso. Coloque-o no seu.bashrc
e use-dd
o normalmente:Fonte:
fonte
#!/bin/bash
. Na parte inferior:tmp=":${PATH}:"; tmp=${tmp/:/usr/local/bin:/:}; tmp=${tmp%:}; PATH=${tmp#:}; dd "$@"
ou você pode codificar add
localização. Então uselocal dd=/usr/bin/dd
. Não se esqueça de adicionar bit executável:chmod +x /usr/local/dd
.Hoje, fiquei um pouco frustrado ao tentar executar
kill
um loop enquantodd
estava em execução e criei esse método para executá-los em paralelo, facilmente:Agora basta usar em
vdd
qualquer lugar que você normalmente usariadd
(ele passa todos os argumentos diretamente) e você obterá um relatório de progresso impresso a cada 5s.A única desvantagem é que o comando não retorna imediatamente quando o dd é concluído; portanto, é possível que esse comando possa esperar 5s extras depois que o dd retornar antes que ele note e saia.
fonte
Isso força o dd a fornecer estatísticas a cada 2 segundos, que é o padrão para o relógio:
Para alterar a cada 2 segundos a cada 5 segundos, adicione a opção -n 5 como esta:
fonte
Apenas no caso de alguém do CentOS ter encontrado esse tópico ...
A opção 'status = progress' funciona com o CentOS 7.5 e 7.6
A resposta acima de @davidDavidson implica que o recurso foi adicionado recentemente no Coreutils 8.24.
Pode ser esse o caso, mas o CentOS pode não estar seguindo o mesmo esquema de versão.
A versão do Coreutils que acompanha o CentOS 7.6.1810 é:
E a versão do dd instalada é:
Isso mostra as versões 8.22 .
No entanto, testei o 'status = progress' com o dd no CentOS 7.5 e no CentOS 7.6 (ambos com a versão 8.22 do Coreutils) e ele funciona corretamente.
Não sei por que o RedHat escolhe usar uma versão tão antiga do Coreutils, mas a funcionalidade existe com a 8.22.
fonte
Como mencionado acima, pelo menos com o 'dd' do GNU coreutils, ou busybox, ele responderá a um sinal USR1 imprimindo informações de progresso no stderr.
Escrevi um pequeno script wrapper para o dd que mostra um bom indicador de porcentagem completa e tenta não interferir no processo ou no modo de funcionamento do dd. Você pode encontrá-lo no github:
http://github.com/delt01/dd_printpercent
Infelizmente, esse truque do SIGUSR1 funciona apenas com o GNU dd (do pacote coreutils) ou o modo 'dd' do busybox com esse recurso específico ativado no momento da compilação. Ele não funciona com o estoque 'dd' incluído na maioria dos sistemas BSD, incluindo FreeBSD e OS X ... :(
fonte
Você pode assistir o progresso de qualquer programa coreutils usando
progress - Coreutils Progress Viewer
.Pode monitorar:
cp mv dd tar cat rsync grep fgrep egrep cut sort md5sum sha1sum sha224sum sha256sum sha384sum sha512sum adb gzip gunzip bzip2 bunzip2 xz unxz lzma unlzma 7z 7za zcat bzcat lzcat split gpg
Você pode ver a página de manual
Você pode usá-lo em uma janela de terminal separada enquanto o comando estiver em execução ou iniciá-lo com o comando dd:
Aqui
&
bifurca-se o primeiro comando e continua imediatamente, em vez de esperar até que o comando termine.O comando progress é iniciado com:
-m
portanto, aguarda até o processo monitorado terminar,-p
para monitorar um determinado pid e$!
é o último comando pid.Se você emitir dd com o sudo, também precisará fazer progresso:
fonte