Estoy haciendo algunas pruebas de un fragmento de código y quiero llenar un disco duro con datos. Descubrí que dd
puede crear archivos enormes en un instante, pero df
no está 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é necesito hacer para df
reconocer que los datos ahora están tomados? Espero algo rápido que codifique en una prueba unitaria.
linux
hard-drive
Usuario1
fuente
fuente
Respuestas:
El problema con el
seek=<big number>
truco es que el sistema de archivos es (generalmente) inteligente: si parte de un archivo nunca se ha escrito (y por lo tanto es todo ceros), no se molesta en asignarle espacio, así que, como usted ' visto, puede tener un archivo de 10GB que no ocupa espacio (esto se conoce como un "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):
lo que llevará mucho más tiempo, pero en realidad llenará el disco. Recomiendo hacer que el tamaño del bloque sea mucho más alto que uno, porque esto determinará cuántas llamadas al sistema
dd
realiza el proceso: cuanto menor sea el tamaño del bloque, más syscalls y, por lo tanto, más lento se ejecutará. (Aunque más allá de 1 MB más o menos, probablemente no hará mucha diferencia e incluso puede ralentizar las cosas ...)fuente
Como otra opción para esto, puede usar el sí junto con una sola cadena y es aproximadamente 10 veces más rápido que ejecutar dd if = / dev / urandom of = largefile. Me gusta esto
fuente
Ha creado lo que se conoce como un "archivo disperso", un archivo que, debido a que la mayoría está vacío (es decir, se lee como \ 0), no ocupa espacio en el disco además de lo que está realmente escrito (1B, después de 10GB de brecha).
No creo que pueda crear archivos enormes, ocupando espacio en disco real en un instante; ocupar espacio físico significa que el sistema de archivos necesita asignar bloques de disco a su archivo.
Creo que está atrapado con el antiguo "dd if = / dev / zero of = filename bs = 100M count = 100", que está limitado por la velocidad de escritura secuencial de su unidad.
fuente
Si solo está probando casos con sistemas de archivos llenos, quizás Fallocate sea lo suficientemente bueno. ¡Y más rápido también! p.ej
fuente
fallocate -l 150G foo
. Sin embargo, +1 por mencionar la herramienta.Deje de usar
seek
y use un muy grandebs
y / ocount
. Como está haciendo un archivo escaso , y obviamente no necesita hacer eso.fuente
Si quiere literalmente llenar el disco duro, haga esto:
Opcionalmente, puede especificar el recuento si desea limitar el tamaño, pero si omite el recuento, solo se ejecutará hasta que se quede sin espacio en disco.
Como mencionó psmears, obtendrá un mejor rendimiento si establece el tamaño del bloque en 1 MB (bs = 1M) en lugar de 1 B (bs = 1). Esto todavía tomará un tiempo, pero si desea verificar el progreso de su comando, abra una consola separada y ejecute estos comandos:
Use el PID de dd en este comando (reemplace PID con el PID de dd):
Luego ve a ver tu terminal dd. Por supuesto, esto es de uso limitado cuando solo está tratando de llenar la unidad (puede usar df o du para verificar el espacio libre en el disco o el tamaño del archivo, respectivamente). Sin embargo, hay otros momentos en que es útil hacer que la salida dd avance.
Crédito adicional: un uso práctico para poner a cero el espacio libre es que, luego, puede eliminar los archivos "cero" y dd toda la partición (o disco, si ha puesto a cero todas las particiones) a un archivo de imagen de disco (digamos , disk-backup.dd), luego comprima el archivo. El espacio libre ahora es altamente compresible, por lo que su imagen dd comprimida será mucho más pequeña que el dispositivo de bloque original cuyo contenido contiene.
Travesuras: comprime un archivo de ceros grande y envíalo por correo electrónico a todos tus amigos. Diles que es algo realmente genial.
fuente
Crea un archivo de 1 TB no disperso con el siguiente comando:
Esto fue útil para probar lo que sucede cuando se superan las cuotas o cuando se llena un sistema de archivos.
df -h
muestra el espacio disponible cada vez más pequeño.fuente