web-dev-qa-db-fra.com

Comment ajouter des données dans un fichier par dd?

Je veux ajouter de nouvelles données dans un fichier stocké dans SSD.

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

Mais df -h indique que la commande dd remplace toujours le fichier de test, mais ajoute de nouvelles données dans le fichier de test. J'ai aussi essayé

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

Cela ne marche pas non plus.

18
city

Qu'en est-il de:

 dd if=/dev/shm/test bs=1G >>/data/sdb/test
11
mdpc
dd if=/dev/shm/test of=/data/sdb/test bs=1G oflag=append conv=notrunc 

C'est ce que je pense que vous auriez dû utiliser.

REF: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=373736

29
Charm_quark

Il existe un moyen plus simple d’ajouter un trou clairsemé à un fichier.

truncate est beaucoup plus rapide que dd. Pour agrandir le fichier avec 10 octets, utilisez:

 truncate -s +10 file.txt 

réponse trouvée dans: https://serverfault.com/a/343726/70242

1
akostadinov

Dans le noyau Linux 4.1, l'option FALLOC_FL_INSERT_RANGE a été ajoutée. Depuis la page de manuel fallocate(2) :

La spécification de l'indicateur FALLOC_FL_INSERT_RANGE (disponible depuis Linux 4.1) en mode augmente l'espace fichier en insérant un trou dans la taille du fichier sans écraser les données existantes. Le trou commencera au décalage et continuera pendant len ​​octets. Lors de l'insertion du trou dans le fichier, le contenu du fichier commençant à offset sera décalé vers le haut (c'est-à-dire, vers un décalage de fichier supérieur) de len octets. L'insertion d'un trou dans un fichier augmente la taille du fichier de len octets.

Et récemment, cette option support a été ajoutée à util-linux:

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

Ainsi, lorsque la version 2.30 de util-linux sera publiée et que votre distribution Linux passera à cette version, nous pourrons augmenter la taille du fichier en un éclair:

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

128M est la taille de fichier actuelle.

1
mixel