Estoy probando un fragmento de código y quiero llenar un disco duro con datos. Descubrí que dd
puedes crear archivos enormes en un instante, pero df
no estoy de acuerdo. Esto es lo que probé:
dd if=/dev/zero of=filename bs=1 count=1 seek=$((10*1024*1024*1024))
ls -lh
muestra un archivo 10G. Sin embargo, df -h
muestra que la partición no se redujo. Entonces, ¿qué debo hacer para df
reconocer que los datos ahora están tomados? Espero algo rápido que codifique en una prueba unitaria.
Respuesta1
El problema con este seek=<big number>
truco es que el sistema de archivos es (generalmente) inteligente: si nunca se ha escrito parte de un archivo (y por lo tanto es todo ceros), no se molesta en asignarle espacio, así que, como usted' Como hemos visto, puedes tener un archivo de 10 GB que no ocupa espacio (esto se conoce como "archivo disperso" y puede ser muy útil en algunos casos, por ejemplo, ciertas implementaciones de bases de datos).
Puede forzar la asignación del espacio con (por ejemplo):
dd if=/dev/zero of=filename bs=$((1024*1024)) count=$((10*1024))
lo que llevará mucho más tiempo, pero en realidad llenará el disco. Recomiendo hacer que el tamaño del bloque sea mucho mayor que uno, porque esto determinará cuántas llamadas al sistema dd
realiza el proceso: cuanto más pequeño sea el tamaño del bloque, más llamadas al sistema y, por lo tanto, más lento se ejecutará. (Aunque más allá de 1 MB probablemente no hará mucha diferencia e incluso puede ralentizar las cosas...)
Respuesta2
Como otra opción, puede usar sí junto con una sola cadena y es aproximadamente 10 veces más rápido que ejecutar dd if=/dev/urandom of=largefile. Como esto
yes abcdefghijklmnopqrstuvwxyz0123456789 > largefile
Respuesta3
Ha creado lo que se conoce como un "archivo disperso": un archivo que, debido a que la mayor parte está vacío (es decir, se lee como \0), no ocupa espacio en el disco además de lo que realmente está escrito (1B, después de 10GB). de brecha).
No creo que puedas crear archivos enormes, ocupando espacio real en el disco en un instante; ocupar espacio físico significa que el sistema de archivos necesita asignar bloques de disco a tu archivo.
Creo que estás atrapado con el anticuado "dd if=/dev/zero of=filename bs=100M count=100" que está limitado por la velocidad de escritura secuencial de tu unidad.
Respuesta4
Deje de usarlo seek
y use uno muy grande bs
y/o count
. Tal como están las cosas, estás haciendo unarchivo escaso, y obviamente no es necesario que hagas eso.