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 pv
y ponerlo entre dd
comandos 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 --size
si desea una estimación de tiempo.
Ejemplo suponiendo que se copia un disco de 2GB desde / dev / sdb
Comando sin pv
serí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 pv
directamente 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, pv
reconoce el tamaño automáticamente.
Método 2: Nueva status
opción agregada a dd
(GNU Coreutils 8.24+)
dd
en GNU Coreutils 8.24+ (Ubuntu 16.04 y más reciente) tiene una nueva status
opció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=35000
obras verificadas. @SopalajodeArrierez, los parámetros se pueden dar en el segundo dd.pv < /dev/sda > /dev/sdb
parece mejorar la velocidad ( fuente )dd if=/dev/urandom | pv | of=/dev/sdb
proporciona ~ 18 MB / s de escritura,dd if=/dev/zero | pv | of=/dev/sdb
proporciona ~ 80 MB / s, y ladd if=/dev/zero of=/dev/sdb
versió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
kill
comandoPara ver el progreso de
dd
una vez que se está ejecutando, abra otra terminal e ingrese:Esto mostrará el
dd
progreso en ladd
ventana del terminal sin detener el proceso. Si estás en BSD o OS X, úsalo enINFO
lugar deUSR1
. LaUSR1
señal terminará dd.Si desea recibir actualizaciones periódicas del
dd
progreso, ingrese:watch
investigará eldd
proceso 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 dd
es más fácil de recordar, funciona perfectamente bien (al menos en Ubuntu 14.04) y es menos difícil de escribir.pv
que ralentizará la transferencia, como lo demostró TeddHansen. Además, apuesto a que mucha gente está buscando en Google porque ya comenzaron ladd
operación;)Algunos ejemplos de usos útiles con
pv
menos 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
dialog
con el comandoapt-get install dialog
dialog
ejemplo. SERENIDAD AHORA !dialog
esto ayudará increíblemente a escribir scripts de shell: Dbrew install pv dialog
para Mac. También este caballero calcula con estilo. Bravo.Use Ctrl+ Shift+ Tmientras se
dd
está ejecutando, y generará el progreso (en bytes):fuente
dd
.^T
al 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-essential
yapt-get build-dep coreutils
luego descargar coreutils-8.25.tar.xztar xvf coreutils-8.25.tar.xz
configure --prefix=$HOME/usr/local
y ejecutarmake
. Recién compiladodd
estará bajosrc
dir. 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
dd
y opciónstatus=on
por 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
dd
herramienta:Uso en Xubuntu 15.10:
Abra una terminal y escriba estos comandos:
Ejecutar
dd
como 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 | dd
trí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
bg
para ponerlo en segundo plano. Observe quebg
le dará resultados como[1] 6011
donde el último número es una identificación de proceso. Entonces, haz:while true; do kill -USR1 process_id ; sleep 5; done
donde 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
while
bucle. Utilizarwatch
.sudo watch pkill dd
. Luego mira cómo sedd
muestran las estadísticas cómodamente.watch pkill -USR1 -x dd
. Como también lo usowatch
para 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=dsync
mantendrá su escritura sincronizada, por lo que la informaciónstatus=progress
es más precisa. Sin embargo, podría ser un poco más lento.fuente
conv=fsync
es mejorEn Ubuntu 16.04
Ubuntu 16.04 viene con dd (coreutils) Versión 8.25 . Por lo tanto, la opción
status=progress
es compatible :-)Para usarlo, solo agregue
status=progress
junto con sudd
comando.Ejemplo:
Da el estado como
fuente
Use la opción
status=progress
para obtener el progreso durante la transferencia.Además,
conv=fsync
mostrará 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
dd
que se usarápv
para mostrar el progreso. Póngalo en su.bashrc
y usedd
como 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 ladd
ubicació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
kill
en un bucle mientrasdd
estaba en ejecución, y se me ocurrió este método para ejecutarlos en paralelo, fácilmente:Ahora solo use
vdd
cualquier 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:
-m
por lo tanto, espera hasta que finalice el proceso monitoreado,-p
por 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