Pergunta

Meu sistema operacional e drive é

OS: Windows XP sp2 or Linux SUSE 9 or Cygwin
Compiler: Visual C++ 2003 or Gcc or Cygwin
PC and os are both 32 bits

Então, como posso criar um arquivo de super-huge em segundos

Disseram -me para usar funções do MappingFile. Eu não consegui criar arquivos acima de 2G, então ... suas respostas quentes serão todas apreciadas, obrigado

Foi útil?

Solução

Usando dd No Linux, para criar um arquivo de 1 GB, leva 57 segundos de tempo de parede em uma caixa um pouco carregada com um disco lento e cerca de 17 segundos tempo do sistema:

$ time dd if=/dev/zero of=bigfile bs=G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 53.9903 s, 19.9 MB/s

real    0m56.685s
user    0m0.008s
sys     0m17.113s
$

Outras dicas

Você pode usar DD

dd if=/dev/zero of=bigfile.txt bs=$((1024*1024)) count=100

ou apenas script e conteúdo simples de shell não importa

1) create a dummy file with a few lines, eg 10 lines
2) use cat dummy >> bigfile in a while loop

eg

    while true
    do
      cat dummy >> bigfile.txt 
      #check for number of lines more than 10000 for example and break out of loop
    done

Faça outra hora

while true
do
  cat bigfile >> bigfile2.txt           
  # check for size and break out..
done
rm -f dummy bigfile

O arquivo tem que ocupar espaço em disco real? Caso contrário, você sempre pode (em Cygwin ou Linux):

dd if=/dev/zero of=bigfile seek=7T bs=1 count=1

Isso criará um arquivo de 7 TB vazio em uma fração de segundo. Claro, ele não alocará muito espaço em disco real: você terá um grande arquivo esparso.

Escrevendo um programa sob Cygwin ou Linux, você pode fazer a mesma coisa em um programa C com uma chamada para ftruncato.

Dependendo dos limites do seu sistema, você pode criar um grande arquivo em uma fração de segundo ...

FILE *fp = fopen("largefile" ,"w");
for(int i = 0; i < 102400; i++)
{
    fseek(fp, 10240000, SEEK_CUR);
}
fprintf(fp, "%c", 'x');
fclose(fp);

Brinque com isso.

gato /dev /urandom >> /home /mybigfile

Ele será um erro quando o espaço do disco acabar.

Isto é para Linux/BSD/possivelmente CGywin

Em Suse em uma VM eu fiz dd if=/dev/zero of=file;rm file que preencheu o disco e quando foi excluído o arquivo. Isso me permitiu comprimir a imagem um pouco mais por algum motivo, e eu li sobre fazê -la em um fórum em algum lugar.

Você pode usar o comando "fsutil" para win2000/xp/7:

C:> fsutil Arquivo CreateNew Uso: FSUTIL ARQUIVO CREATENEW EG: FSUTIL ARQUIVO CREATENEW C: TESTFILE.TXT 1000

Reagds

Se você deseja um arquivo esparso, também pode fazer isso no Windows (nos volumes NTFS), usando createfile, Deviceiofunction com FSCTL_SET_SPARSE e FSCTL_SET_ZERO_DATA; Para mais informações, consulte aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top