Estou testando um pedaço de código e quero preencher um disco rígido com dados. Descobri que dd
pode criar arquivos enormes em um instante, mas df
discordo. 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 encolheu. Então, o que eu preciso fazer para df
reconhecer que os dados já foram obtidos? Espero algo rápido que eu codifique em um teste de unidade.
linux
hard-drive
Usuário1
fonte
fonte
Respostas:
O problema com o
seek=<big number>
truque é que o sistema de arquivos é (geralmente) inteligente: se parte de um arquivo nunca foi gravada (e, portanto, é tudo zeros), não se preocupa em alocar espaço para ele; portanto, como você ' Como já vimos, é possível ter um arquivo de 10 GB 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 (por exemplo):
o que levará muito mais tempo, mas realmente preencherá o disco. Eu recomendo aumentar o tamanho do bloco muito mais do que um, porque isso determinará quantas chamadas de sistema o
dd
processo faz - quanto menor o tamanho do bloco, mais syscalls e, portanto, mais lento será executado. (Embora além de 1 MB, provavelmente não fará muita diferença e pode até atrasar as coisas ...)fonte
Como outra opção, você pode usar o yes junto com uma única string e é cerca de 10 vezes mais rápida que executar o dd se = / dev / urandom of = largefile. Como isso
fonte
Você criou o que é conhecido como "arquivo esparso" - um arquivo que, como a maioria está vazia (ou seja, lê como \ 0), não ocupa espaço no disco além do que está realmente escrito (1B, após 10 GB). de diferença).
Não acredito que você possa criar arquivos enormes, ocupando espaço em disco real em um instante - ocupar espaço físico significa que o sistema de arquivos precisa alocar blocos de disco ao seu arquivo.
Eu acho que você está preso com o antiquado "dd se = / dev / zero de = nome do arquivo bs = 100M count = 100", que é limitado pela velocidade de gravação seqüencial da sua unidade.
fonte
Se você está apenas testando casos com sistemas de arquivos cheios, talvez o fallocate seja bom o suficiente. E mais rápido também! por exemplo
fonte
fallocate -l 150G foo
. No entanto, +1 por mencionar a ferramenta.Pare de usar
seek
e use um muito grandebs
e / oucount
. Como está, você está criando um arquivo esparso e, obviamente, não precisa fazer isso.fonte
Se você deseja literalmente preencher o disco rígido, faça o seguinte:
Opcionalmente, você pode especificar a contagem se quiser limitar o tamanho, mas se você omitir a contagem, ela será executada até você ficar sem espaço em disco.
Como psmears mencionado, você obterá melhor desempenho se definir o tamanho do bloco como 1 MB (bs = 1M) em vez de 1 B (bs = 1). Isso ainda levará um tempo, mas se você quiser verificar o andamento do seu comando, abra um console separado e execute estes comandos:
Use o PID do dd neste comando (substitua o PID pelo PID do dd):
Então vá olhar para o seu terminal dd. Obviamente, isso é de uso limitado quando você está apenas tentando preencher a unidade (você pode usar df ou du para verificar o espaço livre em disco ou o tamanho do arquivo, respectivamente). No entanto, há outros momentos em que é útil fazer com que o dd output progrida.
Crédito extra: um uso prático para zerar o espaço livre é que, posteriormente, você poderá excluir os arquivos "zero" e copiar a partição inteira (ou disco, se você zerou todas as partições) em um arquivo de imagem de disco (por exemplo, , disk-backup.dd) e comprima o arquivo. O espaço livre agora é altamente compressível, portanto, sua imagem dd compactada será muito menor que o dispositivo de bloco original, cujo conteúdo contém.
Transtornos: feche um arquivo zeros grande e envie por e-mail para todos os seus amigos. Diga a eles que é algo muito legal.
fonte
Você cria um arquivo de 1 TB não esparso com o seguinte comando:
Isso foi útil para testar o que acontece quando as cotas são atingidas ou um sistema de arquivos é preenchido.
df -h
mostra o espaço disponível diminuindo.fonte