Quel est l'équivalent 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 incantation DD? L'idée est de créer un fichier 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
files
dd
sparse-files
badp
la source
la source
dd
est le seul outil traditionnel qui expose l'seek
appel système (voir dd vs cat - dd est-il toujours pertinent de nos jours? mais il existe d'autres façons de dépecer ce chat sur les unités actuelles typiques.Réponses:
D'une manière générale, utilisez simplement
dd
; mais comme vous mentionnez l'utilisation de la virtualisation KVM, vous pourriez envisager d'utiliserqemu-img
:Cela fait la même chose que la
dd
commande dans la réponse de Chris Down, efficacement.Quelle que soit la commande que vous utilisez, pour une utilisation dans la virtualisation, je suggère fortement d'utiliser
fallocate
pour pré-allouer des blocs afin d'éviter la fragmentation et d'augmenter les performances.Cependant, il n'est pas disponible sur toutes les plateformes et tous les systèmes de fichiers. Cela n'écrira pas de zéros, mais affectera simplement des blocs au fichier, plutôt que de le faire à la demande plus tard chaque fois qu'il doit étendre le fichier.
la source
qemu-img
et lesdd
deux effectuent un appel système pour définir la taille du fichier (ftruncate), mais effectueront beaucoup plus pour se charger et charger les bibliothèques auxquelles ils sont liés. Et, à cet égard,dd
va être beaucoup plus efficace queqemu-img
(ce qui est beaucoup plus grand et est lié à beaucoup plus de bibliothèques). GNUtruncate
va être encore plus efficace.dd
a également l'avantage d'être omniprésent. Bon pointfallocate
cependant.qemu-img
c'est juste une alternative évidente dans l'utilisation de la virtualisation KVM.Vous pouvez créer un fichier clairsemé comme celui-ci avec
dd
:la source
2G
une extension GNU pourdd
. Vous pouvez l'utiliserbs=1024 seek=2097152
si vous n'avez pas GNUdd
.G
est une extension, et elle n'est pas prise en charge par la version OpenBSD de dd ... mais,M
etK
est prise en charge, donc peutseek=2048M
- être un peu plus lisible, selon les plates-formes que vousVoir aussi la
truncate
commande GNU :la source