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.
Qu'en est-il de:
dd if=/dev/shm/test bs=1G >>/data/sdb/test
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
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
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
où 128M
est la taille de fichier actuelle.