Comment pouvez-vous couper les files en utilisant la command line?

Quel est l'équivalent de la console du code Python suivant:

target = file("disk", "w") # create a file target.seek(2*1024*1024*1024) # skip to 2 GB target.write("\0") target.close() 

Peut-être une certaine incantation dd? L'idée est de faire un file avec la taille apparente de 2 Go pour une utilisation par exemple dans la virtualisation.

 kvm disk -cd whatever.iso #Only allocate space as necessary 

D'une manière générale, il suffit d'utiliser dd , mais comme vous mentionnez l'utilisation de la virtualisation KVM, vous pouvez envisager d'utiliser qemu-img :

 qemu-img create -f raw disk 2G 

Il fait la même chose que la command dd dans la réponse de Chris Down, effectivement.

Quelle que soit la command utilisée pour la virtualisation, je suggère fortement d'utiliser fallocate pour pré-allouer les blocs afin d'éviter la fragmentation et d'augmenter les performances.

 fallocate -l 2G disk 

Il n'est cependant pas disponible sur toutes les plateforms et tous les filesystems. Cela n'écrit pas de zéros, mais affecte simplement des blocs au file, plutôt que de le faire à la request plus tard chaque fois qu'il doit étendre le file.

Vous pouvez créer un file fragmenté comme ceci avec dd :

 dd of=file bs=1 seek=2G count=0 
 $ du file 0 disk $ du --apparent-size file 2097152 disk 

Voir aussi la command GNU truncate :

 truncate -s 2G some-file