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
Ele cria um arquivo de cerca de 2 GB e sai com o status de saída '0'. Eu não entendo o porquê?
Eu também tentei criar 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?
Também desejo criar vários arquivos com o mesmo padrão aleatório (pseudo) para comparação. Alguém sabe uma maneira de fazer isso?
dd
devido ao tamanho do bloco. Você pode olhar para este post stackoverflow.com/questions/6161823/…, que contém algumas boas respostas sobre como calcular o melhor tamanho de bloco, além de alguns scripts / programas de usuário e outras sugestões de usodd
.Respostas:
Que tal usar fallocate, essa ferramenta nos permite pré-alocar espaço para um arquivo (se o sistema de arquivos suportar esse recurso). Por exemplo, alocando 5 GB de dados em um arquivo chamado 'exemplo', é possível:
Isso é muito mais rápido que o dd e alocará o espaço muito rapidamente.
fonte
/dev/zero
?truncate
no passado e descobri que ele não aloca fisicamente o arquivo no dispositivo e apenas cria um arquivo grande e arbitrário até ser acessado, independentemente do espaço disponível. Tem certeza de que não é esse o casofallocate
? Gostaria de verificar isso, mas eu estou em um móvel ...Você pode usar
dd
para criar um arquivo constituído apenas por zeros. Exemplo: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ê deseja criar um arquivo contendo conteúdo pseudo-aleatório, execute:
Eu sugiro que você use 10M como tamanho do buffer (
bs
). Isso ocorre porque 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.fonte
Usando o dd, isso deve criar um arquivo de 10 GB preenchido com dados aleatórios:
count
está em megabytes.Fonte: stackoverflow - Como criar um arquivo com um determinado tamanho no Linux?
fonte
dd if=/dev/urandom of=10Gfile bs=500M count=20
, o que me deu 10237226010 bytes em menos de 20 minutos.Respondendo à primeira parte da sua pergunta:
Tentar escrever um buffer de 5 GB por vez não é uma boa ideia, pois seu kernel provavelmente não suporta isso. De qualquer forma, não lhe dará nenhum benefício de desempenho. Escrever 1 milhão de cada vez é um bom máximo.
fonte
Esta pergunta foi aberta há 5 anos. Eu apenas tropecei nisso e queria adicionar minhas descobertas.
Se você simplesmente usar
funcionará significativamente mais rápido, conforme explicado por xiaodongjie. Mas você pode torná-lo ainda mais rápido usando
eatmydata
comoO que
eatmydata
faz é desativar o fsync, tornando o disco mais rápido.Você pode ler mais sobre isso em https://flamingspork.com/projects/libeatmydata/ .
fonte
dd
é rápida o suficiente e é chamada libEAT-MY-DATA por um motivo.