Imprimir post Imprimir post
 

Trocando o comando dd por dcfldd

Um dos principais problemas do comando dd é fazer tudo em silêncio. Com isso, nunca sabemos o que está acontecendo. Uma solução é o comando dcfldd.

O dcfldd mostra o progresso de uma cópia e também calcula hashes. A sua sintaxe básica é idêntica ao do dd. Veja:

# dcfldd if=/dev/sdb of=imagem-hd.img

A diferença é que ele mostra o progresso da cópia. Veja outro exemplo:

canopus:~# dcfldd if=/dev/sda1 of=1GB_de_particao-windows.img bs=1MB count=1024
512 blocks (512Mb) written.

Ele também pode calcular hashes e faz isso enquanto copia os dados, tornando a operação muito mais rápida. Vamos ver os hashes MD5 (default), SHA1 e SHA512:

canopus:~# dcfldd if=/dev/sda1 of=1GB_de_particao-windows.img bs=1MB count=128 hash=md5,sha1,sha512
Total (md5): 7967be906cf636a47cccf1fae753ec27
Total (sha1): 8764f7bb5a8e7ffce331c20f24480523ac0a406c
Total (sha512): 12537e2268ad55533741317806c99d774461f7d3c0456197859410eff6a782135f99161d543c981d9b62d1bf6021be9caad8318dde422e7e2d3771c4793365b8
128+0 records in
128+0 records out

Se você quiser, ele coloca o resultado do hash dentro de um arquivo. Vamos fazer isso com o MD5 e o SHA512. O SHA1 vai apenas aperecer na tela. O comando final é o seguinte:

# dcfldd if=/dev/sda1 of=1GB_de_particao-windows.img bs=1MB count=128 hash=md5,sha1,sha512 md5log=particao.md5 sha512log=particao.sha512

Para medirmos a diferença de tempo entre o dd + cálculo de hash e o dcfldd, vamos emitir duas linhas de comando. A primeira:

canopus:~# time dd if=/dev/sda1 of=1GB_de_particao-windows.img bs=1MB count=128; time md5sum 1GB_de_particao-windows.img; time sha512sum 1GB_de_particao-windows.img
128+0 registros de entrada
128+0 registros de saída
128000000 bytes (128 MB) copiados, 1,89711 s, 67,5 MB/s
real    0m1.932s
user    0m0.000s
sys     0m0.688s
ebfad6c49d035bb6047f192e109a9676  1GB_de_particao-windows.img
real    0m0.549s
user    0m0.396s
sys     0m0.108s
82b67eadd8fe07ee4db737006f7aa8225936867cdc4f76bb9af618593d5a634c7e1cf8d5fdb5321a0e49f2db3be2ea2bb5d20a7d203ad6f9f3370cc85ac9a8a5  1GB_de_particao-windows.img
real    0m7.449s
user    0m7.180s
sys     0m0.132s

O tempo total foi (1.932 + 0.549 + 7.449) = 9.93s. Agora veja o dcfldd:

canopus:~# time dcfldd if=/dev/sda1 of=1GB_de_particao-windows.img bs=1MB count=128 hash=md5,sha512
Total (md5): 7967be906cf636a47cccf1fae753ec27
Total (sha512): 12537e2268ad55533741317806c99d774461f7d3c0456197859410eff6a782135f99161d543c981d9b62d1bf6021be9caad8318dde422e7e2d3771c4793365b8

128+0 records in
128+0 records out

real    0m7.523s
user    0m6.136s
sys     0m0.696s

Resultado: mais rápido! E isso fica mais evidente em imagens grandes. Bom proveito.

Tags:, , , , ,

9 Comments

jader
mar 7, 2010 at 9:00 pm

Olá Eriberto,

Vc conhece o ddpt(http://sg.danny.cz/sg/ddpt.html), é um excelente DD mas turbinado, e conta com verbose.

Abs


 
Eriberto
mar 7, 2010 at 10:35 pm

Jader, não conheço. Vou testar. Obrigado!


 
Eriberto
mar 8, 2010 at 9:31 am

Jader, li toda a página do ddpt e não encontrei o download dele. Devo estar cego. 🙁


 
fabceolin
nov 8, 2010 at 11:00 am

Ao enviar o sinal USR1 para o dd original ele mostra o progresso.
kill -USR1 $(pidof dd)


 
Diego
ago 27, 2011 at 10:07 pm

Ótima explicação, obrigado.


 
Fernando
set 11, 2012 at 11:20 pm

Boa explicação. Profº você sabe se é possível a cada split de uma imagem passar o arquivo e o hash calculado para outro programa?


 
Eriberto
set 15, 2012 at 12:37 am

Fernando, em princípio não.


 

Reply

*

Copyright © 2017 Eriberto Blog All rights reserved.
desk-mess-mirrored v theme from BuyNowShop.com.