¿Cómo puedo hacer rápidamente un archivo grande?

26

¿Cuál es una manera rápida y fácil de hacer un archivo que tenga, digamos, 2 GB de tamaño?

ændrük
fuente

Respuestas:

36

El método de relleno cero (modificado aquí para evitar posibles cuellos de botella en la memoria ) tardó 17 segundos en crear un archivo de 10 GB en un SSD y provocó que la interfaz gráfica de Ubuntu dejara de responder.

$ time sh -c 'dd if=/dev/zero iflag=count_bytes count=10G bs=1M of=large; sync'
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 17.2003 s, 624 MB/s

real    0m17.642s
user    0m0.008s
sys     0m9.404s
$ du -B 1 --apparent-size large
10737418240     large
$ du -B 1 large
10737422336     large

Falocate crea archivos grandes instantáneamente al manipular directamente el espacio en disco asignado al archivo:

$ time sh -c 'fallocate -l 10G large; sync'

real    0m0.038s
user    0m0.000s
sys     0m0.016s
$ du -B 1 --apparent-size large
10737418240     large
$ du -B 1 large
10737422336     large

truncar también funciona instantáneamente y crea archivos dispersos que no usan espacio en disco real hasta que los datos se escriban más adelante:

$ time sh -c 'truncate -s 10G large; sync'

real    0m0.014s
user    0m0.000s
sys     0m0.004s
$ du -B 1 --apparent-size large
10737418240     large
$ du -B 1 large
0       large
ændrük
fuente
dd ... bs=2G count=1lee 2 GB en la memoria (en una read(2)llamada). Si tienes presión de memoria, probablemente ese no sea el camino a seguir. Más, los bloques más pequeños pueden ser más rápidos si significa menos paginación.
claymation
19

Una manera fácil sería usar el ddcomando para escribir un archivo lleno de ceros.

dd if=/dev/zero of=outputFile bs=2G count=1
  • if = archivo de entrada
  • de = archivo de salida
  • bs = bytes

Utilice G en el argumento de tamaño si desea gigabytes de computadora (1024 * 1024 * 1024), o GB si desea gigabytes humanos (1000 * 1000 * 1000).

MikeVB
fuente
1
Solo agregaré que si no desea todos los ceros, puede elegir if = / dev / random
Denwerko
Aunque / dev / random tomará más tiempo.
con-f-use
10
El uso de / dev / random tendrá un horrible mucho tiempo. Úselo /dev/urandomen ese caso (no bloquea, pero no se garantiza que tenga el mismo nivel de aleatoriedad). Sacar 2 GB de cualquiera de ellos seguramente agotará por completo la entropía de su sistema, por lo que no haga nada criptográfico por un tiempo después.
un CVn
1

ftp://ftp.fsf.hu/testfiles/maketestfiles.sh

o Buscar es el tamaño del archivo que desea en bytes - 1.

dd if=/dev/zero of=filename.big bs=1 count=1 seek=1048575 # 1 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=10485759 # 10 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=104857599 # 100 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=1073741823 # 1024 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=42949672959 # 40960 MByte
LanceBaynes
fuente