¿Cómo monitoreas el progreso de la DD?

dd es una maravilla. Le permite duplicar un disco duro en otro,poner a cero completamente un disco duro, etc. Pero una vez que lanzas un dd comando, no hay nada que le diga de su progreso. Simplemente se sienta allí en el cursor hasta que el comando finalmente termina. Entonces, ¿cómo se monitorea el progreso de DD?

Actualización 2016>: Si usa GNU coreutils = 8.24 (predeterminado en Ubuntu Xenial 16.04 en adelante), consulte el método 2 a continuación para obtener una forma alternativa de mostrar el progreso.


Método 1: Mediante el uso de pv

Instalar pv y póngalo solo entre entrada / salida dd comando.

Nota: no se puede utilizar cuando ya se ha iniciado dd.

De la descripción del paquete:

pv - Visor de tuberías: 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, el tiempo que ha tardado, la proximidad de su finalización y una estimación de cuánto tiempo tardará en completarse.

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 el --size si quieres una estimación de tiempo.


Ejemplo Suponiendo que se copia un disco de 2 GB 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 la salida estándar:

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: Nuevo status opción añadida a dd (GNU Coreutils 8.24+)

dd en GNU Coreutils 8.24+ (Ubuntu 16.04 y posteriores) obtuve un nuevo 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

De Cómo: Monitorear el progreso de dd

Puede supervisar el progreso de dd una vez que se está ejecutando sin detenerlo usando el kill comando para enviar una señal al proceso.

Después de empezar dd, abra otra terminal e ingrese bien:

sudo kill -USR1 $(pgrep ^dd$)

O, si estás en BSD u OS X:

sudo kill -INFO $(pgrep ^dd$)

Esto mostrará el progreso en la dd ventana de terminal sin detener el proceso (imprimiendo en su flujo stderr). Por ejemplo:

# dd if=/dev/urandom of=rando bs=1024 count=1048576335822+0 records in335821+0 records out343880704 bytes (344 MB, 328 MiB) copied, 6.85661 s, 50.2 MB/s

Si desea recibir actualizaciones periódicas de la dd progress, luego ingrese:

watch -n5 'sudo kill -USR1 $(pgrep ^dd$)'

watch probará el dd procesar cada-n segundos (-n5 = 5 segundos) e informe sin detenerlo.

Tenga en cuenta las comillas simples adecuadas en los comandos anteriores.

Algunos usos prácticos de muestra con pv y menos mecanografía o más progreso que otras respuestas:

Primero necesitarás instalar pv con el comando:

sudo apt-get install pv

A continuación, algunos ejemplos son:

pv -n /dev/urandom | dd of=/dev/nullpv -tpreb source.iso | dd of=/dev/BLABLA bs=4096 conv=notrunc,noerror

Nota: la primera muestra es de 5 caracteres menos que escribir dd if=/dev/urandom | pv | dd of=/dev/null.

Y mi favorito para clonar una unidad de disco (reemplace X con letras de unidad):

(pv -n /dev/sdX | dd of=/dev/sdX bs=128M conv=notrunc,noerror) 2>&1 | dialog --gauge "Running dd command (cloning), please wait..." 10 70 0

screenshot

fuente: http://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress-while-coping/

También para archivarme.

En aras de la integridad:

Versión 8.24 de la GNU coreutils incluye un parche para dd que introduce un parámetro para imprimir el progreso.

El compromiso la introducción de este cambio tiene el comentario:

dd: nuevo estado=progreso nivel para imprimir estadísticas periódicamente

Muchas distribuciones, incluyendo Ubuntu 16.04.2 LTS utilice esta versión.

Utilizar Ctrl+Shift+T mientras dd se está ejecutando y mostrará el progreso (en bytes):

load: 1.51  cmd: dd 31215 uninterruptible 0.28u 3.67s321121+0 records in321120+0 records out164413440 bytes transferred in 112.708791 secs (1458745 bytes/sec)

Lo mejor es usar http://dcfldd.sourceforge.net/ es fácil de instalar a través de apt-get

Se agregó el estado de progreso nativo a dd!!!

La nueva versión de Coreutils (8.24) añade un estado de progreso a la dd herramienta:

Uso en Xubuntu 15.10:

Abra una terminal y escriba estos comandos:

wget ftp://ftp.gnu.org/pub/gnu/coreutils/coreutils-8.24.tar.xztar -xf coreutils-8.24.tar.xzcd coreutils-8.24./configure && make -j $(nproc)

Ejecutar dd como root:

sudo sucd src./dd if=/dev/sdc of=/dev/sda conv=noerror status=progress

Verá: Bytes, segundos y velocidad (Bytes/segundo).

Para comprobar las versiones de dd:

Nativo:

dd --version

Nuevo:

cd coreutils-8.24/src./dd --version

Si ya ha iniciado dd y está escribiendo un archivo, como al crear 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.

watch ls -l /pathtofile/filename

Para ver solo el tamaño del archivo (h-vista humana):

watch ls -sh /pathtofile/filename

El dd | pv | dd triad hizo que mi copia de máquina virtual de 50 GB tardara 800 segundos, en lugar de 260 segundos con 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 desventaja en hacerlo de la siguiente manera, y obtiene una buena ventaja de velocidad:

Evitaría pv en cualquier cosa grande, y (si uso Bash):

Control-Z el proceso dd

bg para ponerlo en segundo plano. Observe que bg le dará salida como [1] 6011 donde el último número es un identificador de proceso. Por lo tanto, hacer:

while true; do kill -USR1 process_id ; sleep 5; done

donde process_id es el id de proceso que observó. Presiona Control-C cuando veas algo como:

[1]+  Done dd if=/path/file.qcow2 of=/dev/kvm/pxetest bs=4194304 conv=sparse-bash: kill: (60111) - No such process

Has terminado.

Editar: Administrador de Sistemas Tonto! Automatiza tu vida, no trabajes! Si tengo un proceso de dd largo que quiero monitorear, aquí hay una sola línea que se encargará de toda la enchilada por usted; pon todo esto en una línea:

 dd if=/path/to/bigimage of=/path/to/newimage conv=sparse bs=262144 & bgid=$!; while true; do sleep 1; kill -USR1 $bgid || break; sleep 4; done

Por supuesto, puede escribirlo, tal vez hacer de $1 su archivo de entrada y $2 su archivo de salida. Esto se deja como un ejercicio para el lector. Ten en cuenta que necesitas dormir un poco antes de matar o la muerte puede morir tratando de enviar una señal a dd cuando aún no está lista. Ajuste sus horas de sueño según lo desee (tal vez incluso elimine el segundo sueño por completo).

Bash-FTW! :-)

http://linuxcommando.blogspot.com/2008/06/show-progress-during-dd-copy.html

Basicamente:

kill -USR1 < dd pid >