¿Cuál es el equivalente de la consola del siguiente código de Python?
target = file("disk", "w") # create a file
target.seek(2*1024*1024*1024) # skip to 2 GB
target.write("\0")
target.close()
Tal vez algún dd encantamiento? La idea es crear un archivo con el tamaño aparente de 2 GB para usar, por ejemplo, en la virtualización.
kvm disk -cd whatever.iso #Only allocate space as necessary
files
dd
sparse-files
badp
fuente
fuente
dd
es la única herramienta tradicional que expone laseek
llamada al sistema (ver dd vs cat - ¿dd sigue siendo relevante en estos días? pero hay otras formas de desollar a este gato en los dispositivos actuales típicos)Respuestas:
En términos generales, solo use
dd
; pero al mencionar el uso de la virtualización KVM, podría considerar usarqemu-img
:Hace lo mismo que el
dd
comando en la respuesta de Chris Down, efectivamente.Independientemente del comando que use, para usar en la virtualización, sugeriría encarecidamente usarlo
fallocate
para preasignar bloques para evitar la fragmentación y aumentar el rendimiento.Sin embargo, no está disponible en todas las plataformas y sistemas de archivos. Esto no escribirá ceros, sino que solo asignará bloques al archivo, en lugar de hacerlo a pedido cada vez que tenga que extender el archivo.
fuente
qemu-img
ydd
ambos realizan una llamada al sistema para establecer el tamaño del archivo (ftruncate), pero realizarán mucho más para cargarse y las bibliotecas a las que están vinculados. Y, en ese sentido,dd
será mucho más efectivo queqemu-img
(que es mucho más grande y está vinculado a muchas más bibliotecas). GNUtruncate
va a ser aún más efectivo.dd
También tiene la ventaja de ser omnipresente. Buen punto sobrefallocate
sin embargo.qemu-img
es solo una alternativa obvia en el uso de la virtualización KVM.Puede crear un archivo disperso como este con
dd
:fuente
2G
es una extensión de GNU paradd
. Puedes usarlobs=1024 seek=2097152
si no tienes GNUdd
.G
es una extensión, y no es compatible con la versión de dd de OpenBSD ... pero,M
yK
es compatible, por lo que tal vezseek=2048M
sea un poco más legible, dependiendo de las plataformas a las que seVea también el
truncate
comando GNU :fuente