¿Qué hace dd que no hace pv?

4

Veo ejemplos en línea todo el tiempo de uso dden combinación con pvpara mostrar el progreso ... Pero, algo que no entiendo es que pves perfectamente capaz de hacer la tarea por sí solo. Entonces, ¿por qué usar ddtambién? ¿Existe alguna ventaja ddque pvno sea así?

Ejemplos usando ambos ddy 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 pvsolo haciendo

pv /dev/sda > /mnt/backup.img
Drew Chapin
fuente
"Algunos de estos son realmente complicados" - Parece una buena razón para usar solo pv. Busqué sobre el tema, la mayoría de los resultados parecen indicar que no hay una forma integrada de informar el progreso. Entonces, dd ha agregado esta característica desde que se hicieron esas declaraciones. Pero pv también parece comunicarse entre dos procesos.
Ramhound
no puedo encontrar una fuente, pero estoy bastante seguro de que pv significa Pipe-View, ya que parece mostrar datos estadísticos sobre las operaciones de tuberías / redireccionamiento. De hecho, estoy seguro de que el comando pv en la lista funcionaría exactamente de la misma manera sin la invocación de pv, aparte de eso, no obtendría el buen resultado de progreso.
Frank Thomas
No me gustó el título que hizo @barlop porque sé lo que pvestá haciendo, pero no entiendo lo que ddestá haciendo y no lo está pv. Entonces, cambié el título a "¿qué hace dd que no hace el pv?"
Drew Chapin
@Ramhound, pero en mi ejemplo pv /dev/sda > /mnt/backup.img, pv¿no se lee desde una tubería? Está leyendo desde el archivo del dispositivo.
Drew Chapin
2
@druciferre: Deberías echar un vistazo a esta interesante pregunta relacionada: ¿es dd mejor que cat?
Karan

Respuestas:

4

Bueno, pvsolo 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 a dd. La respuesta, por supuesto, es no.

Si bien ddpuede parecer que los casos simples de uso funcionan de manera similar a la redirección o canalización de E / S, ddes 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, y pvsolo observa los datos que pasan por una tubería, sin comprenderlo más que contando bytes.

ddcomprende estructuras de disco como bloques y direcciones, de las cuales pvno tiene conocimiento. ddinteractúa con el núcleo en el nivel del controlador, mientras que pvocurre por encima de una gran cantidad de abstracción de E / S.

por ejemplo, ddpodría tomar la copia de seguridad del MBR de un disco (siempre en el bloque 63) con:

dd if=/dev/sda of=MBR_boot.img bs=512 count=1 skip=62

No hay una forma limpia de hacerlo con la redirección / tubería.

Frank Thomas
fuente
¿Qué sucede si se produce pvun error al leer? Sé lo que pasa cuando lo usas dd. Se detiene ... Además, debe pvtener 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.
Drew Chapin
1
Acabo de hacer man pv, y tiene cosas sobre bloques
barlop
@druciferre, lo que voy a decir no responde lo que dijiste, pero puede ser de tu interés. ddrescue es muy bueno, reporta un progreso agradable
barlop
1
verifique el enlace de karan que muestra una respuesta sobre las diferencias entre dd y cat. Su punto principal es que no puede especificar el tamaño del bloque en cat. La cosa es que puedes en pv. Una respuesta sugiere el comando ltrace para monitorear el tamaño de bloque, por ejemplo, puede ver que dd tiene un valor predeterminado de 512 bytes. Hacer esto en ubuntu $ 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.
barlop