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
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)
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 >