Introdução
Recentemente, precisei criar arquivos com tamanhos específicos e com conteúdo completamente aleatório, cuja finalidade era testar alguns comandos do sistema. Pesquisando um pouco, notei que essa tarefa é também bastante comum e essencial para se testar algoritmos de compressão, velocidade de transmissão em rede, manuseio de quotas e várias outras.
O comando dd, bastante conhecido no ambiente *nix, pode ser usado para se criar arquivos de conteúdo aleatório e com um determinado tamanho. Embora esse comando não seja o mais ideal para isso [1] por existir alternativas mais velozes (ex: fallocate), ele parece ser o mais portável por estar presente em quase todos sistemas unix-like e por isso será adotado aqui.
Criando junk files
Uma maneira de criarmos um arquivo de determinado tamanho é utilizando o dd em cima do dispositivo /dev/urandom e alterando seus parâmetros bs e count para obtermos o tamanho necessário.
O seguinte comando cria um arquivo de 100MB:
$ dd if=/dev/urandom of=arquivo_100.bin bs=1M count=100 $ du -h arquivo_100.bin 100M arquivo_100.bin
Um arquivo de 100MB foi criado. Em bs é possível passar indicadores de tamanhos como K, M e G para se indicar kilo bytes, mega bytes e giga bytes, respectivamente. Em count passamos o tamanho total do arquivo.
Para criarmos um arquivo de 1GB, fazemos:
$ dd if=/dev/urandom of=arquivo_1GB.bin bs=1G count=1
Com o arquivo criado, podemos por exemplo, ver quanto tempo é necessário para transferi-lo para outra máquina:
$ time scp arquivo_1GB.bin username@hostremoto:/home/usuario/arquivo_1GB.bin
Referências
[1] Quickly create a large file on a linux system? by stackoverflow (Acessado em: Novembro/2012)
http://stackoverflow.com/questions/257844/quickly-create-a-large-file-on-a-linux-system
[2] Why does dd from /dev/random give different file sizes? by stackexchange (Acessado em: Novembro/2012)
http://unix.stackexchange.com/questions/32988/why-does-dd-from-dev-random-give-different-file-sizes
[3] Create a junk file by WizRd (Acessado em: Novembro/2012)
http://blog.controlunlimited.net/?p=45