Quiero crear un archivo grande ~ 10G lleno de ceros y valores aleatorios. He intentado usar:
dd if=/dev/urandom of=10Gfile bs=5G count=10
Crea un archivo de aproximadamente 2 Gb y sale con un estado de salida '0'. No entiendo por qué?
También intenté crear un archivo usando:
head -c 10G </dev/urandom >myfile
Se tarda unos 28-30 minutos en crearlo. Pero quiero que se cree más rápido. ¿Alguien tiene una solución?
También deseo crear múltiples archivos con el mismo patrón (pseudo) aleatorio para comparar. ¿Alguien sabe una manera de hacer eso?
dd
debido al tamaño del bloque. Es posible que desee ver esta publicación stackoverflow.com/questions/6161823/ ... tiene algunas buenas respuestas sobre cómo calcular el mejor tamaño de bloque, así como algunos scripts / programas de usuario y otras sugerencias que se utilizandd
.Respuestas:
¿Qué tal si usamos Falocate? Esta herramienta nos permite preasignar espacio para un archivo (si el sistema de archivos admite esta función). Por ejemplo, asignando 5GB de datos a un archivo llamado 'ejemplo', uno puede hacer:
Esto es mucho más rápido que dd, y asignará el espacio muy rápidamente.
fuente
/dev/zero
?truncate
en el pasado y descubrí que no asigna físicamente el archivo en el dispositivo y solo crea un archivo grande arbitrario hasta que se accede, independientemente del espacio disponible. ¿Estás seguro de que este no es el casofallocate
? Lo comprobaría pero estoy en un móvil ...Puede utilizar
dd
para crear un archivo que consta únicamente de ceros. Ejemplo:Esto es muy rápido porque solo un byte está realmente escrito en el disco físico. Sin embargo, algunos sistemas de archivos no son compatibles con esto.
Si desea crear un archivo que contenga contenido pseudoaleatorio, ejecute:
Sugiero que use 10M como tamaño de búfer (
bs
). Esto se debe a que 10M no es demasiado grande, pero aún así le da un buen tamaño de búfer. Debería ser bastante rápido, pero siempre depende de la velocidad del disco y la potencia de procesamiento.fuente
Usando dd, esto debería crear un archivo de 10 GB lleno de datos aleatorios:
count
Está en megabytes.Fuente: stackoverflow - ¿Cómo crear un archivo con un tamaño dado en Linux?
fuente
dd if=/dev/urandom of=10Gfile bs=500M count=20
, lo que me dio 10237226010 bytes en menos de 20 minutos.Respondiendo la primera parte de tu pregunta:
Intentar escribir un búfer de 5 GB a la vez no es una buena idea, ya que su núcleo probablemente no lo admita. No le dará ningún beneficio de rendimiento en ningún caso. Escribir 1M a la vez es un buen máximo.
fuente
Esta pregunta se abrió hace 5 años. Me encontré con esto y quise agregar mis hallazgos.
Si simplemente usas
funcionará significativamente más rápido como lo explica xiaodongjie. Pero, puedes hacerlo aún más rápido usando
eatmydata
likeLo que
eatmydata
hace es deshabilitar fsync haciendo que el disco escriba más rápido.Puede leer más al respecto en https://flamingspork.com/projects/libeatmydata/ .
fuente
dd
es lo suficientemente rápida para empezar, y se llama libEAT-MY-DATA por alguna razón.