¿Cómo agregar datos en un archivo por dd?

19

Quiero agregar nuevos datos en un archivo almacenado en SSD.

dd if=/dev/shm/test of=/data/sdb/test bs=1G oflag=append

Pero df -h muestra que el comando dd siempre sobrescribe el archivo de prueba, en su lugar agrega nuevos datos en el archivo de prueba. También intenté

dd if=/dev/shm/test of=/data/sdb/test bs=1G conv=notrunc

Tampoco funciona.

ciudad
fuente

Respuestas:

12

Qué pasa:

 dd if=/dev/shm/test bs=1G >>/data/sdb/test
mdpc
fuente
Su solución funciona. Gracias. ¿Pero sabes por qué mis soluciones no funcionan? He revisado la página del manual. No puedo encontrar la razón. Gracias.
ciudad
1

En Linux kernel 4.1 FALLOC_FL_INSERT_RANGEse agregó la opción. Desde la fallocate(2) página del manual :

Especificar el indicador FALLOC_FL_INSERT_RANGE (disponible desde Linux 4.1) en modo aumenta el espacio de archivo al insertar un agujero dentro del tamaño del archivo sin sobrescribir ningún dato existente. El agujero comenzará en el desplazamiento y continuará para los bytes len. Al insertar el agujero dentro del archivo, el contenido del archivo que comienza en el desplazamiento se desplazará hacia arriba (es decir, a un desplazamiento de archivo más alto) por len bytes. Insertar un agujero dentro de un archivo aumenta el tamaño del archivo en len bytes.

Y recientemente, esta opción de soporte se agregó a util-linux:

   -i, --insert-range
          Insert a hole of length bytes from offset, shifting existing
          data.

Entonces, cuando se util-linuxlance la versión 2.30 y su distribución de Linux se actualice a esta versión, podremos aumentar el tamaño del archivo en un instante ejecutando:

fallocate -i -l 1G -o 128M /path/to/file

donde 128Mes el tamaño actual del archivo.

Mixel
fuente
1

Hay una manera más fácil de agregar un agujero escaso a un archivo.

truncateEs mucho más rápido que dd. Para hacer crecer el archivo con 10 bytes use:

 truncate -s +10 file.txt 

respuesta encontrada en: /server//a/343726/70242

akostadinov
fuente