Veo ejemplos en línea todo el tiempo de uso dd
en combinación con pv
para mostrar el progreso ... Pero, algo que no entiendo es que pv
es perfectamente capaz de hacer la tarea por sí solo. Entonces, ¿por qué usar dd
también? ¿Existe alguna ventaja dd
que pv
no sea así?
Ejemplos usando ambos dd
y pv
. Algunos de estos son realmente complicados ...
dd if=/dev/sda | pv | dd of=/mnt/backup.img
dd if=/dev/sda | pv -s 10G | dd of=/mnt/backup.img
dd if=/dev/sda | (pv -s `fdisk -l /dev/sda | grep -o '[0-9]*\{1\} MB' | awk '{print $1}'`m) | dd of=/mnt/backup.img
Puedes lograr lo mismo usando pv
solo haciendo
pv /dev/sda > /mnt/backup.img
linux
command-line
dd
disk-image
Drew Chapin
fuente
fuente
pv
está haciendo, pero no entiendo lo quedd
está haciendo y no lo estápv
. Entonces, cambié el título a "¿qué hace dd que no hace el pv?"pv /dev/sda > /mnt/backup.img
,pv
¿no se lee desde una tubería? Está leyendo desde el archivo del dispositivo.Respuestas:
Bueno,
pv
solo proporciona una visión de una operación de tubería, por lo que la verdadera pregunta es si la tubería / redirección es equivalente add
. La respuesta, por supuesto, es no.Si bien
dd
puede parecer que los casos simples de uso funcionan de manera similar a la redirección o canalización de E / S,dd
es una herramienta bastante complicada con muchas características relacionadas con la conversión de datos de archivos (las tuberías apenas saben qué es un archivo, y mucho menos qué tipo de orden de bytes / codificarlo es), mientras que la redirección solo empuja bits, ypv
solo observa los datos que pasan por una tubería, sin comprenderlo más que contando bytes.dd
comprende estructuras de disco como bloques y direcciones, de las cualespv
no tiene conocimiento.dd
interactúa con el núcleo en el nivel del controlador, mientras quepv
ocurre por encima de una gran cantidad de abstracción de E / S.por ejemplo,
dd
podría tomar la copia de seguridad del MBR de un disco (siempre en el bloque 63) con:No hay una forma limpia de hacerlo con la redirección / tubería.
fuente
pv
un error al leer? Sé lo que pasa cuando lo usasdd
. Se detiene ... Además, debepv
tener una bandera para especificar cuántos bytes leer. así que podría hacer una copia de seguridad de los primeros 512 bytes, pero no podría saltarse los primeros 62.$ ltrace pv </dev/zero >/dev/null
muestra pv usando un tamaño de bloque de 128 KB. Puede decir pv -s 2M y luego usa 2MB. Por lo tanto, pv le permite especificar totalmente el tamaño del bloque y está en man pv.