Actualización 2016 : si usa GNU coreutils> = 8.24 (predeterminado en Ubuntu Xenial 16.04 hacia arriba), consulte el método 2 a continuación para ver una forma alternativa de mostrar el progreso.
Método 1: utilizando pv
Instalar pvy ponerlo entre ddcomandos de entrada / salida solamente .
Nota : no puede usarlo cuando ya comenzó dd.
A partir de la descripción del paquete :
pv- Pipe Viewer: es una herramienta basada en terminal para monitorear el progreso de los datos a través de una tubería. Se puede insertar en cualquier canalización normal entre dos procesos para dar una indicación visual de la rapidez con la que pasan los datos, cuánto tiempo han tardado, cuán cerca de su finalización y una estimación de cuánto tiempo pasará hasta su finalización.
Instalación
sudo apt-get install pv
Ejemplo
dd if=/dev/urandom | pv | dd of=/dev/null
Salida
1,74MB 0:00:09 [ 198kB/s] [ <=> ]
Puede especificar el tamaño aproximado con --sizesi desea una estimación de tiempo.
Ejemplo suponiendo que se copia un disco de 2GB desde / dev / sdb
Comando sin pvsería:
sudo dd if=/dev/sdb of=DriveCopy1.dd bs=4096
Comando con pv:
sudo dd if=/dev/sdb | pv -s 2G | dd of=DriveCopy1.dd bs=4096
Salida:
440MB 0:00:38 [11.6MB/s] [======> ] 21% ETA 0:02:19
Otros usos
Por supuesto, puede usar pvdirectamente para canalizar la salida a stdout:
pv /home/user/bigfile.iso | md5sum
Salida
50,2MB 0:00:06 [8,66MB/s] [=======> ] 49% ETA 0:00:06
Tenga en cuenta que en este caso, pvreconoce el tamaño automáticamente.
Método 2: Nueva statusopción agregada a dd(GNU Coreutils 8.24+)
dden GNU Coreutils 8.24+ (Ubuntu 16.04 y más reciente) tiene una nueva statusopción para mostrar el progreso:
Ejemplo
dd if=/dev/urandom of=/dev/null status=progress
Salida
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=35000obras verificadas. @SopalajodeArrierez, los parámetros se pueden dar en el segundo dd.pv < /dev/sda > /dev/sdbparece mejorar la velocidad ( fuente )dd if=/dev/urandom | pv | of=/dev/sdbproporciona ~ 18 MB / s de escritura,dd if=/dev/zero | pv | of=/dev/sdbproporciona ~ 80 MB / s, y ladd if=/dev/zero of=/dev/sdbversión anterior proporciona ~ 550 MB / s (cerca de la velocidad máxima de escritura SSD). Todo ello conbs=4096000.De Cómo : Monitorear el progreso de dd
Puede controlar el progreso de dd sin detenerlo utilizando el
killcomandoPara ver el progreso de
dduna vez que se está ejecutando, abra otra terminal e ingrese:Esto mostrará el
ddprogreso en laddventana del terminal sin detener el proceso. Si estás en BSD o OS X, úsalo enINFOlugar deUSR1. LaUSR1señal terminará dd.Si desea recibir actualizaciones periódicas del
ddprogreso, ingrese:watchinvestigará elddproceso cada -n segundos (-n5= 5 segundos) e informará sin detenerlo.Tenga en cuenta las comillas simples adecuadas en los comandos anteriores.
fuente
kill -INFO $(pgrep ^dd$)en sistemas BSD (como OSX).sudo pkill -usr1 ddes más fácil de recordar, funciona perfectamente bien (al menos en Ubuntu 14.04) y es menos difícil de escribir.pvque ralentizará la transferencia, como lo demostró TeddHansen. Además, apuesto a que mucha gente está buscando en Google porque ya comenzaron laddoperación;)Algunos ejemplos de usos útiles con
pvmenos tipeo o más progreso que otras respuestas:Primero deberá instalar
pv, con el comando:Entonces algunos ejemplos son:
Nota: la primera muestra tiene 5 caracteres menos escribiendo entonces
dd if=/dev/urandom | pv | dd of=/dev/null.Y mi favorito para clonar una unidad de disco (reemplazar X con letras de unidad):
fuente: http://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress-while-coping/
También por archivarme a mí mismo.
fuente
dialogcon el comandoapt-get install dialogdialogejemplo. SERENIDAD AHORA !dialogesto ayudará increíblemente a escribir scripts de shell: Dbrew install pv dialogpara Mac. También este caballero calcula con estilo. Bravo.Use Ctrl+ Shift+ Tmientras se
ddestá ejecutando, y generará el progreso (en bytes):fuente
dd.^Tal terminal (excepto que muchas aplicaciones de terminal interceptarán Ctrl-Shift-T y abrirán una nueva pestaña). Muchos buscadores de OSX / BSD pueden apreciar esta respuesta, pero debe quedar claro que no es para Ubuntu (o GNU / Linux en general?)En aras de la exhaustividad:
La versión 8.24 de GNU coreutils incluye un parche para dd que introduce un parámetro para imprimir el progreso.
El commit que presenta este cambio tiene el comentario:
Muchas distribuciones, incluida Ubuntu 16.04.2 LTS, usan esta versión.
fuente
apt install build-essentialyapt-get build-dep coreutilsluego descargar coreutils-8.25.tar.xztar xvf coreutils-8.25.tar.xzconfigure --prefix=$HOME/usr/localy ejecutarmake. Recién compiladoddestará bajosrcdir. Puede copiarlo en / bin y reemplazar uno existente o simplemente ejecutar como src / ddLo mejor es usar http://dcfldd.sourceforge.net/ , es fácil de instalar a través de apt-get
fuente
ddy opciónstatus=onpor defecto, para mensajes de progreso,statusinterval=N(N en bloques) para la frecuencia de actualización de mensajes ysizeprobe=[if|of]para un indicador de porcentaje. Lo aliasDD:) :)El estado de progreso nativo se agregó a dd !!!
La nueva versión de Coreutils (8.24) agrega un estado de progreso a la
ddherramienta:Uso en Xubuntu 15.10:
Abra una terminal y escriba estos comandos:
Ejecutar
ddcomo root:Verá: Bytes, segundos y velocidad (Bytes / segundo).
Para verificar las versiones de
dd:Nativo:
Nuevo:
fuente
Si ya ha comenzado dd, y está escribiendo un archivo como cuando crea una copia de un pendrive en el disco, puede usar el comando watch para observar constantemente el tamaño del archivo de salida para ver los cambios y estimar la finalización.
Para ver solo el tamaño del archivo (vista h-humana):
fuente
La
dd | pv | ddtríada hizo que mi copia de 50GB vm tomara 800 segundos, en lugar de 260 segundos usando solo dd. Con esta canalización, al menos, pv no tiene idea de qué tan grande es el archivo de entrada, por lo que no podrá decirle qué tan avanzado está, por lo que no hay inconveniente en hacerlo de la siguiente manera, y obtiene una buena ventaja de velocidad:Evitaría pv en cualquier cosa grande y (si utilizo Bash):
Control-Z el proceso dd
bgpara ponerlo en segundo plano. Observe quebgle dará resultados como[1] 6011donde el último número es una identificación de proceso. Entonces, haz:while true; do kill -USR1 process_id ; sleep 5; donedonde process_id es la identificación del proceso que observaste. Presiona Control-C cuando veas algo como:
Estás listo.
Editar: Silly Systems Administrator! ¡Automatiza tu vida, no trabajes! Si tengo un largo proceso de dd que quiero monitorear, aquí hay una frase que se encargará de toda la enchilada por usted; pon todo esto en una línea:
Puede, por supuesto, escribirlo, tal vez convertir $ 1 en su archivo de entrada y $ 2 en su archivo de salida. Esto se deja como un ejercicio para el lector. Tenga en cuenta que necesita dormir un poco antes de matar o matar puede intentar enviar una señal a dd cuando aún no está listo. Ajuste sus sueños como desee (tal vez incluso elimine el segundo sueño por completo).
Bash- FTW! :-)
fuente
whilebucle. Utilizarwatch.sudo watch pkill dd. Luego mira cómo seddmuestran las estadísticas cómodamente.watch pkill -USR1 -x dd. Como también lo usowatchpara otras tareas similares, esta viene naturalmente.http://linuxcommando.blogspot.com/2008/06/show-progress-during-dd-copy.html
Básicamente:
fuente
Lo más fácil es:
oflag=dsyncmantendrá su escritura sincronizada, por lo que la informaciónstatus=progresses más precisa. Sin embargo, podría ser un poco más lento.fuente
conv=fsynces mejorEn Ubuntu 16.04
Ubuntu 16.04 viene con dd (coreutils) Versión 8.25 . Por lo tanto, la opción
status=progresses compatible :-)Para usarlo, solo agregue
status=progressjunto con suddcomando.Ejemplo:
Da el estado como
fuente
Use la opción
status=progresspara obtener el progreso durante la transferencia.Además,
conv=fsyncmostrará errores de E / S.Ejemplo:
fuente
Realmente me gusta ddrescue, funciona como dd pero da salida y no falla en los errores, por el contrario, tiene un algoritmo muy avanzado e intenta realmente hacer una copia exitosa ... También hay muchas GUI para ello
Proyecto: https://www.gnu.org/software/ddrescue
Wikipedia: https://en.wikipedia.org/wiki/Ddrescue
fuente
He creado bash wrapper
ddque se usarápvpara mostrar el progreso. Póngalo en su.bashrcy useddcomo de costumbre:Fuente:
fuente
#!/bin/bash. En la parte inferior:tmp=":${PATH}:"; tmp=${tmp/:/usr/local/bin:/:}; tmp=${tmp%:}; PATH=${tmp#:}; dd "$@"O tal vez desee codificar laddubicación. Entonces usarlocal dd=/usr/bin/dd. No se olvide de añadir bit de ejecución:chmod +x /usr/local/dd.Así que hoy me sentí un poco frustrado al intentar ejecutar
killen un bucle mientrasddestaba en ejecución, y se me ocurrió este método para ejecutarlos en paralelo, fácilmente:Ahora solo use
vddcualquier lugar que normalmente usaríadd(pasa todos los argumentos directamente) y obtendrá un informe de progreso impreso cada 5 segundos.El único inconveniente es que el comando no regresa inmediatamente cuando se completa dd; por lo tanto, es posible que este comando lo mantenga esperando 5 segundos adicionales después de que dd regrese antes de que se dé cuenta y salga.
fuente
Éste obliga a dd a proporcionar estadísticas cada 2 segundos, lo cual es predeterminado para el reloj:
Para cambiar de cada 2 segundos a cada 5 segundos, agregue la opción -n 5 de esta manera:
fuente
En caso de que alguien de CentOS land encuentre este hilo ...
La opción 'estado = progreso' funciona con CentOS 7.5 y 7.6
La respuesta anterior de @davidDavidson implica que la característica se agregó recientemente en Coreutils 8.24.
Este puede ser el caso, pero CentOS podría no estar siguiendo el mismo esquema de versiones.
La versión de Coreutils que viene con CentOS 7.6.1810 es:
Y la versión de dd que está instalada es:
Esto muestra las versiones 8.22 .
Sin embargo, he probado el 'estado = progreso' con dd en CentOS 7.5 y CentOS 7.6 (ambos con la versión 8.22 de Coreutils) y funciona correctamente.
No sé por qué RedHat elige usar una versión tan antigua de Coreutils, pero la funcionalidad existe con 8.22.
fuente
Como se mencionó anteriormente, al menos con el 'dd' de GNU coreutils, u busybox, responderá a una señal USR1 imprimiendo información de progreso en stderr.
Escribí un pequeño script de envoltura para dd que muestra un buen indicador de porcentaje completo e intenta no interferir con el proceso o la forma de funcionamiento de dd de ninguna manera. Puedes encontrarlo en github:
http://github.com/delt01/dd_printpercent
Desafortunadamente, este truco SIGUSR1 solo funciona con GNU dd (del paquete coreutils) o el modo 'dd' de busybox con esa característica específica habilitada en el momento de la compilación. No funciona con el stock 'dd' incluido con la mayoría de los sistemas BSD, incluidos FreeBSD y OS X ... :(
fuente
Puede ver el progreso de cualquier programa coreutils usando
progress - Coreutils Progress Viewer.Puede monitorear:
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
Puedes ver la página de manual
Puede usarlo en una ventana de terminal separada mientras se ejecuta el comando o ejecutarlo con el comando dd:
Aquí se
&bifurca el primer comando y continúa de inmediato en lugar de esperar hasta que finalice el comando.El comando de progreso se inicia con:
-mpor lo tanto, espera hasta que finalice el proceso monitoreado,-ppor lo que supervisa un pedido determinado y$!es el último comando pid.Si emite dd con sudo, también debe hacerlo con el progreso:
fuente