¿Hay alternativas para `dd`?


14

¿Qué otras herramientas debo usar para leer y escribir archivos con truncamiento, búsqueda y omisión? Las opciones de línea de comando de dd parecen inconvenientes y extrañas y no me gusta elegir entre el modo de búsqueda lento, pero preciso ( bs=1) y el modo rápido, pero inflexible ( bs=4ko lo que sea).

¿Existen herramientas más modernas para leer 555 bytes de un archivo (o tubería o socket o dev) desde la posición 31337 y escribirlos en el otro archivo en la posición 128205 (usando los bloques 512 + 43), con o sin truncamiento?


2
Todavía no veo con qué está mal dd. Siempre puede colocar un envoltorio de script de shell a su alrededor si no le gusta la interfaz. ddestá en el estándar POSIX , que es una gran ventaja.
jw013

2
El principal error es la incapacidad de buscar u omitir bloques fraccionarios. Segunda cosa incorrecta que status=noxferno es predeterminada y está rota y que necesito iflag=fullblock(omitir en algún script => datos rotos).
Vi.

44
1. bs=1=> toda la tubería es lenta. Por ejemplo, es posible que desee volcar el archivo de video a partir de un cuadro exacto. 2. "Se necesita algo de aritmética" => no muy adecuado para líneas y comandos de rutina.
Vi.

1
PSA: dd conv=seek_byteshará el seektrabajo con precisión de byte.
i336_

1
@ i336_ Creo que solo significa que la opción más segura para nosotros sería evitar usar un script de shell y escribir un ejecutable independiente vinculado estáticamente. Solo estaba buscando alternativas porque de vez en cuando escuché sobre cosas locas posibles directamente en bash, y me preguntaba si el acceso directo a los archivos podría ser una de esas cosas locas.
Trejkaz

Respuestas:


4

Existe la herramienta ddrescue(cuidado, también dd_rescuehay un programa diferente con casi la misma funcionalidad). Utiliza la sintaxis más familiar con el guión único para guiones cortos o dobles para opciones largas. Desde la página del manual:

   -i, --input-position=<bytes>
          starting position in input file [0]

   -K, --skip-size=<bytes>
          initial size to skip on read error [64 KiB]

   -M, --retrim
          mark all failed blocks as non-trimmed

   -o, --output-position=<bytes>
          starting position in output file [ipos]

1
ddrescue - --> Infile and outfile are the same., ddrescue /dev/stdin /dev/stdout-> Infile and outfile are the same.. Mal comienzo de la historia ...
Vi.

Solo lo intenté con dd_rescue. Lanza una advertencia de que el archivo (stdin) no se puede buscar, pero continúa. Puedes darle una oportunidad. Sin embargo, se ddrescuesiente más completo y maduro.
Marco

1
@ Vi .: No dispares al mensajero. ddrescuees correcto, las tuberías no son buscables. Si desea comenzar a leer en un punto específico de un archivo, debe darle acceso al archivo en cuestión, no a los datos canalizados desde otro programa. También tenga en cuenta que el uso de tuberías lucha contra este deseo suyo para obtener la máxima velocidad, ya que la única forma de emular la búsqueda en una tubería es leer y tirar las partes que no desea procesar. Buscar dentro de un archivo real es mucho más eficiente.
Warren Young

De hecho, dado que la herramienta está diseñada para rescatar datos rotos, no hay capacidad de tubería. Esto es un poco vergonzoso cuando desea la flexibilidad de buscar a través de un archivo de entrada pero solo quiere canalizar el resultado a stdout. Sin embargo, para su propósito previsto, es genial.
Lightness compite con Monica el

2

dcfldd es otra alternativa dd. No aborda la pregunta del OP sobre la flexibilidad de búsqueda de entrada / salida, pero puede ser útil para otras personas que llegan aquí a través de la búsqueda de Google.

Está basado en gnu dd, con las siguientes características adicionales:

  • Hashing sobre la marcha: dcfldd puede hacer hash de los datos de entrada a medida que se transfieren, lo que ayuda a garantizar la integridad de los datos.
  • Salida de estado: dcfldd puede actualizar al usuario sobre su progreso en términos de la cantidad de datos transferidos y cuánto tiempo llevará la operación.
  • Toallitas de disco flexibles: dcfldd se puede usar para limpiar discos rápidamente y con un patrón conocido si se desea.
  • Verificación de imagen / borrado: dcfldd puede verificar que una unidad de destino coincida bit a bit con el archivo o patrón de entrada especificado.
  • Múltiples salidas: dcfldd puede generar múltiples archivos o discos al mismo tiempo.
  • Salida dividida: dcfldd puede dividir la salida en varios archivos con más capacidad de configuración que el comando dividir.
  • Salida y registros canalizados: dcfldd puede enviar todos sus datos de registro y salida a comandos y archivos de forma nativa.

2

Una buena alternativa es pv. No solo calcula automáticamente el tamaño de bloque más eficiente, esencialmente acelerando las cosas, sino que también proporciona progreso, entre otras cosas. Su uso es simple:

pv < /dev/sda > sda.img

También juega bien con la compresión. Una forma rápida de hacer una copia de seguridad y comprimir un disco en un solo movimiento es así:

pv < /dev/sdb | pigz -9 > disk.img.gz

Puedes aprender más aquí .


1
La característica principal esperada es buscar en los archivos de salida y entrada, que pv (vista de tubería) no proporciona, ya que no hay búsqueda de tuberías.
Vi.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.