Criando um arquivo de tamanho grande em menos tempo

13

Eu quero criar um arquivo grande ~ 10G preenchido com zeros e valores aleatórios. Eu tentei usar:

dd if=/dev/urandom of=10Gfile bs=5G count=10

Cria um arquivo de cerca de 2Gb e sai com um status de saída '0'. Não consigo entender por quê?

Eu também tentei criar um arquivo usando:

head -c 10G </dev/urandom >myfile

Demora cerca de 28 a 30 minutos para criá-lo. Mas eu quero que seja criado mais rápido. Alguém tem uma solução?

Além disso, desejo criar vários arquivos com o mesmo padrão (pseudo) aleatório para comparação. Alguém sabe uma maneira de fazer isso?

    
por skane 04.08.2014 / 23:28

4 respostas

11

Que tal usar fallocate, esta ferramenta nos permite pré-alocar espaço para um arquivo (se o sistema de arquivos suportar este recurso). Por exemplo, alocando 5 GB de dados em um arquivo chamado "exemplo", pode-se fazer:

fallocate -l 5G example

Isso é muito mais rápido que o dd e aloca o espaço muito rapidamente.

    
por Colin Ian King 26.07.2016 / 18:35
8

Você pode usar dd para criar um arquivo consistindo apenas de zeros. Exemplo:

dd if=/dev/zero of=zeros.img count=1 bs=1 seek=$((10 * 1024 * 1024 * 1024 - 1))

Isso é muito rápido porque apenas um byte é realmente gravado no disco físico. No entanto, alguns sistemas de arquivos não suportam isso.

Se você quiser criar um arquivo contendo conteúdo pseudo-aleatório, execute:

dd if=/dev/urandom of=random.img count=1024 bs=10M

Sugiro que você use 10M como tamanho do buffer ( bs ). Isso ocorre porque o 10M não é muito grande, mas ainda oferece um bom tamanho de buffer. Deve ser bem rápido, mas sempre depende da velocidade do disco e do poder de processamento.

    
por xiaodongjie 05.08.2014 / 03:39
4

Usando dd, isso deve criar um arquivo de 10 GB preenchido com dados aleatórios:

dd if=/dev/urandom of=test1 bs=1M count=10240

count está em megabytes.

Fonte: stackoverflow - Como criar um arquivo com um determinado tamanho no Linux?

    
por Alaa Ali 04.08.2014 / 23:49
0

Respondendo a primeira parte da sua pergunta:

Tentar escrever um buffer de 5 GB de cada vez não é uma boa ideia, pois o seu kernel provavelmente não suporta isso. Não lhe dará qualquer benefício de desempenho em qualquer caso. Escrever 1M de cada vez é um bom máximo.

    
por cprn 26.07.2016 / 18:28

Tags