Este breve artículo explica cómo crear rápidamente un archivo de gran tamaño, con contenido aleatorio.

Si necesitamos crear un archivo de gran tamaño relleno de basura (por ejemplo para realizar pruebas o reservar espacio en disco), necesitamos recurrir a la herramienta dd.

dd se utiliza para copiar archivos. Aunque es posible crear archivos tomando como entrada los dispositivos /dev/random, /dev/zero y otros.

El dispositivo /dev/random es una fuente inagotable de bytes de valor aleatorio.

Entonces, si deseamos crear el archivo /tmp/archivo_grande de exactamente 1 megabyte, utilizamos el siguiente comando:

emi@hal9000:/tmp % dd if=/dev/random of=/tmp/archivo_grande bs=1024 count=1024
1024+0 records in
1024+0 records out
1048576 bytes transferred in 0.011602 secs (90375652 bytes/sec)

El archivo de entrada (origen) es /dev/random, y el archivo de salida /tmp/archivo_grande. El parámetro bs indica el tamaño de bloque a copiar, especificado en bytes. El valor 1024 corresponde exactamente a 1 kilobyte. Lugeo, mediante el parámetro count se especifican la cantidad de bloques a copiar, en este caso 1024, lo que equivale a 1024 kilobytes, o sea 1 megabyte:

emi@hal9000:/tmp % ls -l /tmp/archivo_grande
-rw-r--r--  1 emi  wheel  1048576 Aug 24 12:37 /tmp/archivo_grande
emi@hal9000:/tmp % ls -lh /tmp/archivo_grande
-rw-r--r--  1 emi  wheel   1.0M Aug 24 12:37 /tmp/archivo_grande

El tipo de archivo resultante es "data" (valores binarios en formato no imprimible):

emi@hal9000:/tmp % file archivo_grande 
archivo_grande: data

Además, se observa que su contenido es aleatorio, como era de esperarse>

emi@hal9000:/tmp % hexdump -C /tmp/archivo_grande | head
00000000  6e 03 c8 f7 20 d3 00 8b  db e4 35 2a 03 42 0b 89  |n... .....5*.B..|
00000010  2d ad 79 6d 33 93 e6 b1  5f 11 3f b4 ea 04 83 c1  |-.ym3..._.?.....|
00000020  f0 12 a0 b3 5a 35 bb ee  3b 63 d7 fc 1f f4 a6 50  |....Z5..;c.....P|
00000030  56 bf 56 62 35 c3 ce 99  c0 05 b3 08 6e 06 e9 44  |V.Vb5.......n..D|
00000040  3f d2 3b 1a 97 9f 44 60  78 de 72 ca 95 aa 4d 62  |?.;...D`x.r...Mb|
00000050  6b e0 e1 76 1d 23 af 3d  c3 2b c7 de 89 3a 29 ee  |k..v.#.=.+...:).|
00000060  ed 13 14 82 d1 da 42 ba  83 bb 97 b8 c1 0f 27 c3  |......B.......'.|
00000070  d0 dd 6c 3f 9d de 11 b2  74 b0 d4 db 11 1d bf 09  |..l?....t.......|
00000080  a3 bf cf 8f 26 f8 85 c8  5c 8a 2a 49 c5 90 b3 96  |....&...\.*I....|
00000090  8d db 75 fd 69 62 80 1a  13 c0 ba b8 a1 ba 53 13  |..u.ib........S.|

Si en cambio deseamos crear un archivo de gran tamaño relleno por ceros (por ejemplo para compactar un disco virtual, es decir, recuperar bloques de disco libres cuando se utilizan tecnologías de virtualización), recurrir al dispositivo /dev/zero:

emi@hal9000:/tmp % dd if=/dev/zero of=/tmp/archivo_grande bs=1024 count=1024
1024+0 records in
1024+0 records out
1048576 bytes transferred in 0.002418 secs (433703585 bytes/sec)
emi@hal9000:/tmp % ls -l /tmp/archivo_grande
-rw-r--r--  1 emi  wheel  1048576 Aug 24 12:51 /tmp/archivo_grande
emi@hal9000:/tmp % hexdump -v -C /tmp/archivo_grande | head
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000070  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000080  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000090  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

Referencias

man dd
man random
man zero


Tal vez pueda interesarte


Compartí este artículo