Como preencher um disco rígido no Linux

22

Estou fazendo alguns testes de um código e quero preencher um disco rígido com dados. Descobri que dd pode criar arquivos enormes em um instante, mas df discorda. Aqui está o que eu tentei:

dd if=/dev/zero of=filename bs=1 count=1 seek=$((10*1024*1024*1024))

ls -lh mostra um arquivo 10G. No entanto, df -h mostra que a partição não diminuiu. Então, o que preciso fazer para que df reconheça que os dados foram obtidos agora? Eu estou esperando por algo rápido que eu codifique em um teste de unidade.

    
por User1 17.12.2010 / 16:22

7 respostas

25

O problema com o truque seek=<big number> é que o sistema de arquivos é (geralmente) inteligente: se parte de um arquivo nunca foi gravado (e, portanto, é todo zeros), não se preocupa em alocar espaço para ele - assim, como você viu, você pode ter um arquivo de 10GB que não ocupa espaço (isso é conhecido como "arquivo esparso" e pode ser muito útil em alguns casos, por exemplo, certas implementações de banco de dados).

Você pode forçar o espaço a ser alocado com (por exemplo):

dd if=/dev/zero of=filename bs=$((1024*1024)) count=$((10*1024))

, que demorará muito mais tempo, mas preencherá o disco. Eu recomendo que o tamanho do bloco seja muito maior do que um, porque isso determinará quantas chamadas do sistema o processo dd faz - quanto menor o tamanho do bloco, maior o tamanho da tela e, portanto, mais lento será executado. (Embora além de 1MB ou mais, provavelmente não fará muita diferença e pode até retardar as coisas ...)

    
por 17.12.2010 / 16:30
17

Como outra opção para isso, você pode usar o sim junto com uma única string e é cerca de 10 vezes mais rápido do que executar o dd se = / dev / urandom de = largefile. Assim

yes abcdefghijklmnopqrstuvwxyz0123456789 > largefile
    
por 06.04.2011 / 04:36
7

Você criou o que é conhecido como "arquivo esparso" - um arquivo que, como a maior parte está vazio (ou seja, é lido como \ 0), não ocupa espaço no disco além do que está realmente escrito (1B , depois de 10GB de gap).

Eu não acredito que você possa criar arquivos enormes, ocupando espaço em disco instantâneo - ocupar espaço físico significa que o sistema de arquivos precisa alocar blocos de disco em seu arquivo.

Eu acho que você está preso com o antiquado "dd if = / dev / zero de = nome do arquivo bs = 100M count = 100", que é limitado pela sua velocidade de gravação seqüencial do disco.

    
por 17.12.2010 / 16:28
6

Se você está apenas testando para casos com sistemas de arquivos preenchidos, talvez o fallocate seja bom o suficiente. E mais rápido também! por exemplo,

fallocate -l 150G

    
por 21.06.2016 / 08:10
3

Pare de usar seek e use bs e / ou count muito grandes. Como você está fazendo um arquivo esparso , e obviamente você não precisa fazer isso.

    
por 17.12.2010 / 16:27
3

Se você quiser literalmente preencher o disco rígido, faça o seguinte:

dd if=/dev/zero of=zeros bs=1M

Você pode, opcionalmente, especificar count se quiser limitar o tamanho, mas se omitir a contagem, ela será executada apenas até você ficar sem espaço em disco.

dd if=/dev/zero of=zeros bs=1M count=10240

Como o psmears mencionou, você obterá melhor desempenho se definir o tamanho do bloco como 1 MB (bs = 1M) em vez de 1 B (bs = 1). Isso ainda vai demorar um pouco, mas se você quiser verificar o progresso do seu comando, abra um console separado e execute estes comandos:

ps aux | grep dd

Use o PID do dd neste comando (substitua o PID pelo PID do dd):

kill -USR1 PID

Depois, olhe para o seu terminal dd. Claro, isso é de uso limitado quando você está apenas tentando encher a unidade (você poderia apenas usar df ou du para verificar o espaço livre em disco ou o tamanho do arquivo, respectivamente). No entanto, há outras ocasiões em que é útil fazer com que o dd produza seu progresso.

Crédito extra: um uso prático para zerar o espaço livre é que, depois, você pode excluir os arquivos "zero" e depositar toda a partição (ou disco, se você tiver zerado todas as partições) em uma imagem de disco. arquivo (digamos, disk-backup.dd) e depois compactar o arquivo. O espaço livre agora é altamente compressível, então sua imagem dd compactada será muito menor que o dispositivo de bloco original cujo conteúdo contém.

Shenanigans: feche um grande arquivo zeros e envie por e-mail para todos os seus amigos. Diga-lhes que é algo muito legal.

    
por 06.04.2011 / 00:21
2

Você cria um arquivo não esparso de 1 TB com o seguinte comando:

dd if=/dev/zero of=bigfile1 bs=10000000000 count=512

Isso foi útil para testar o que acontece quando as cotas são excedidas ou quando um sistema de arquivos é preenchido.

df -h mostra o espaço disponível ficando menor.

    
por 05.04.2011 / 22:17