Ajout de 0 pour créer un fichier de 1 Mo avec dd

J’ai un fichier binary abc.bin 512 octets de long, et j’ai besoin de générer un fichier d’octet de 1M (1024 x 1024 = 1048576) en ajoutant 0 (0x00) à l’ abc.bin . Comment puis-je le faire avec l’utilitaire dd ?

Par exemple, abc.bin a 512 octets de 0x01 (“11 … 11”), et je dois avoir un helloos.bin de 1048576 octets (“11 … 11000 … 000”); le 0 n’est pas “0”, mais 0x00 et le nombre de 0x00 est 1048576 – 512.

Vous pouvez dire à dd de rechercher la position 1M dans le fichier, ce qui a pour effet de rendre sa taille au moins 1M:

 dd if=/dev/null of=abc.bin obs=1M seek=1 

Si vous souhaitez vous assurer que dd ne s’étend que, ne tronque jamais le fichier, ajoutez conv=notrunc :

 dd if=/dev/null of=abc.bin obs=1M seek=1 conv=notrunc 

Si vous êtes sur un système avec GNU coreutils (comme dans presque tous les systèmes Linux), vous pouvez utiliser la commande truncate au lieu de dd :

 truncate --size=1M abc.bin 

Si vous voulez être sûr que le fichier est seulement étendu, jamais tronqué:

 truncate --size=\>1M abc.bin 

Je suppose que vous voulez réellement allouer 1M de zéros sur le disque, pas seulement un fichier dont la longueur signalée est 1MiB et se lit comme des zéros.

 dd if=/dev/zero count=2047 bs=512 >> abc.bin 

Cette méthode fonctionne également:

  1. Créez un fichier 1M avec 0 (0x00) s – dd if=/dev/zero of=helloos.bin bs=512 count=2048
  2. Ecrivez le fichier abc sur le fichier créé – dd of=helloos.bin conv=notrunc if=abc.bin

Sans l’option conv=notrunc , je n’ai qu’un fichier de 512 octets. Je peux aussi utiliser seek=N pour contrôler la position de départ en sautant N blocs.