Como limpar o espaço livre em disco no Linux?

145

Quando um arquivo é excluído, seu conteúdo ainda pode ser deixado no sistema de arquivos, a menos que seja explicitamente substituído por outra coisa. O wipecomando pode apagar com segurança os arquivos, mas não parece permitir o espaço livre em disco não usado por nenhum arquivo.

O que devo usar para conseguir isso?

Alex B
fonte
A única solução segura pode ser salvar seus arquivos em outro lugar, limpar a partição inteira, recriar o sistema de arquivos e restaurar seus arquivos. Eu executei o photorec e fiquei chocado com a quantidade de material que pode ser recuperado mesmo depois de 'limpar' o espaço livre. Uma solução de compromisso é mover o limite esquerdo da sua partição em 6% do seu tamanho depois de limpar o espaço aparentemente livre.
User39559

Respostas:

107

Aviso: O hardware moderno do disco / SSD e os sistemas de arquivos modernos podem desviar os dados de locais onde você não pode excluí-los; portanto, esse processo ainda pode deixar os dados no disco. As únicas maneiras seguras de limpar dados são o comando ATA Secure Erase (se implementado corretamente) ou destruição física. Consulte também Como posso apagar com segurança todas as informações em um disco rígido?

Você pode usar um conjunto de ferramentas chamado exclusão segura.

sudo apt-get install secure-delete

Isso tem quatro ferramentas:

srm- excluir com segurança um arquivo existente
smem- excluir com segurança os traços de um arquivo do ram
sfill- limpe todo o espaço marcado como vazio no disco rígido
sswap- limpe todos os dados da troca de espaço.

Na página do manual de srm

O srm foi projetado para excluir dados de mídias de maneira segura, que não podem ser recuperados por ladrões, policiais ou outras ameaças. O algoritmo de limpeza é baseado no artigo "Exclusão segura de dados da memória magnética e de estado sólido" apresentado no 6º Simpósio de segurança da Usenix por Peter Gutmann, um dos principais criptografadores civis.

O processo de exclusão segura de dados do srm é assim:

  • 1 passe com 0xff
  • 5 passes aleatórios. /dev/urandomé usado para um RNG seguro, se disponível.
  • 27 passes com valores especiais definidos por Peter Gutmann.
  • 5 passes aleatórios. /dev/urandomé usado para um RNG seguro, se disponível.
  • Renomeie o arquivo para um valor aleatório
  • Truncar o arquivo

Como medida adicional de segurança, o arquivo é aberto no modo O_SYNC e após cada passagem, uma fsync()chamada é realizada. srmgrava blocos de 32k para fins de velocidade, preenchendo buffers de caches de disco para forçá-los a liberar e sobrescrever dados antigos que pertenciam ao arquivo.

fnord_ix
fonte
5
É difícil localizar a página inicial "oficial" atual da exclusão segura. Uma versão talvez mais antiga alega que não há relatórios de erros, mas, ao mesmo tempo, não existe um sistema aberto de rastreamento de erros em que eu possa relatar um erro que encontrei. A página inicial de exclusão segura também indica que ela pode não limpar todos os blocos de dados não utilizados, dependendo do sistema de arquivos usado, o que é verdadeiro.
user39559
12
Com os discos rígidos modernos (maiores que cerca de 20 GB), é totalmente inútil fazer várias passagens e aguardar idades. Portanto, a instalação de ferramentas especializadas também se tornou inútil (o que pode explicar por que a exclusão segura não tem mais página inicial). Basta fazer isso a partir da partição apropriada: cat /dev/zero >nosuchfile; rm nosuchfile.
mivk
1
@mivk: Por que é inútil fazer mais de um passe? E por que usar / dev / zero em vez de / dev / random? Isso se deve a preocupações com velocidade?
precisa saber é o seguinte
5
Usar / dev / zero é muito mais rápido. Se você escrever espaço livre em / dev / random, o kernel precisará gerar todos esses dados aleatórios em tempo real. É uma maneira divertida de assistir a sua carga média salto até o máximo ...
dafydd
3
A questão de saber se são necessários vários toalhetes é respondida aqui: Por que escrever zeros (ou dados aleatórios) em um disco rígido várias vezes é melhor do que apenas fazê-lo uma vez?
sleske
71

A maneira mais rápida, se você precisa apenas de uma única passagem e deseja substituir tudo por zeros, é:

cat /dev/zero > zero.file
sync
rm zero.file

(execute a partir de um diretório no sistema de arquivos que você deseja limpar)
(o synccomando é uma medida de paranóia que garante que todos os dados sejam gravados no disco - um gerenciador de cache inteligente pode descobrir que pode cancelar gravações para quaisquer blocos pendentes quando o arquivo não está vinculado )

Haverá um tempo durante esta operação em que não haverá espaço livre no sistema de arquivos, o que poderá levar dezenas de segundos se o arquivo resultante for grande e fragmentado, levando um tempo para excluir. Para reduzir o tempo em que o espaço livre é completamente zero:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
cat /dev/zero > zero.file
sync
rm zero.small.file
rm zero.file

Isso deve ser suficiente para impedir que alguém leia o conteúdo antigo do arquivo sem uma operação forense cara. Para uma variante um pouco mais segura, mas mais lenta, substitua /dev/zeropor /dev/urandom. Para mais paranóia, execute várias etapas com /dev/urandom, embora se você precisar de muito esforço, o shredutilitário do pacote coreutils seja o caminho a seguir:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
shred -z zero.small.file
cat /dev/zero > zero.file
sync
rm zero.small.file
shred -z zero.file
sync
rm zero.file

Observe que, acima, o arquivo pequeno é fragmentado antes de criar o maior, para que possa ser removido assim que o maior for concluído, em vez de ter que esperar que seja fragmentado, deixando o sistema de arquivos com espaço livre zero pelo tempo necessário. O processo de fragmentação demora muito tempo em um arquivo grande e, a menos que você esteja tentando ocultar algo da NSA, o IMO não é realmente necessário.

Todas as opções acima devem funcionar em qualquer sistema de arquivos.

Limites de tamanho de arquivo:

Como o DanMoulding aponta em um comentário abaixo, isso pode ter problemas com os limites de tamanho de arquivo em alguns sistemas de arquivos.

Para o FAT32, seria definitivamente uma preocupação devido ao limite de arquivos de 2GiB: a maioria dos volumes é maior que isso atualmente (8TiB é o limite de tamanho de volume IIRC). Você pode contornar isso canalizando a grande cat /dev/zerosaída de saída splitpara gerar vários arquivos menores e ajustar os estágios de destruição e exclusão de acordo.

Com ext2 / 3/4, é menos preocupante: com o bloco 4K padrão / comum, o limite de tamanho do arquivo é 2TiB; portanto, você precisa ter um volume enorme para que isso seja um problema (o tamanho máximo do volume nessas condições é 16TiB).

Com o btrfs (ainda experimental), o tamanho máximo do arquivo e do volume é de 16EiB.

Em NTFS, o tamanho máximo do arquivo é maior que o tamanho máximo do volume, em alguns casos, mesmo.

Pontos de partida para obter mais informações:
http://en.wikipedia.org/wiki/Ext3#Size_limits
http://en.wikipedia.org/wiki/Btrfs
http://en.wikipedia.org/wiki/Ntfs#Scalability

Dispositivos virtuais

Conforme mencionado nos comentários recentemente, há considerações adicionais para dispositivos virtuais:

  • Para discos virtuais esparsamente alocados, outros métodos, como os usados ​​por zerofree, serão mais rápidos (embora diferentemente cate ddessa não seja uma ferramenta padrão em que você possa confiar em estar disponível em praticamente qualquer sistema operacional unix-like).

  • Esteja ciente de que zerar um bloco em um dispositivo virtual esparso pode não limpar o bloco no dispositivo físico subjacente ; na verdade, eu diria que é improvável - o gerenciador de disco virtual apenas fará o bloco como não é mais usado para que possa ser alocado para outra coisa posteriormente.

  • Mesmo para dispositivos virtuais de tamanho fixo, você pode não ter controle de onde o dispositivo vive fisicamente, para que possa ser movido pela sua localização atual ou para um novo conjunto de discos físicos a qualquer momento, e o máximo que você pode limpar é a localização atual, não quaisquer locais anteriores em que o bloco tenha residido no passado.

  • Para os problemas acima em dispositivos virtuais: a menos que você controle o (s) host (s) e possa fazer uma limpeza segura do espaço não alocado depois de limpar os discos na VM ou mover o dispositivo virtual, não há nada que você possa fazer depois disso. facto. O único recurso é usar criptografia de disco completa desde o inícioportanto, nada não criptografado é todo gravado na mídia física em primeiro lugar. Ainda é possível que haja uma limpeza de espaço livre na VM, é claro. Observe também que o FDE pode tornar os dispositivos virtuais esparsos muito menos úteis, pois a camada de virtualização não pode realmente ver quais blocos não estão sendo usados. Se a camada do sistema de arquivos do sistema operacional envia comandos de apara para o dispositivo virtual (como se fosse um SSD) e o controlador virtual os interpreta, isso pode resolver isso, mas não conheço nenhuma circunstância em que isso realmente aconteça e uma resposta mais ampla. a discussão disso é uma questão para outro lugar (já estamos chegando perto de ser um tópico fora de questão para a pergunta original, portanto, se isso despertou seu interesse, algumas perguntas de experimentação e / ou acompanhamento podem estar em ordem).

David Spillett
fonte
4
Aparentemente, o zeramento simples também pode ser feito com as secure-deleteferramentas: usar sfill -llzreduz todo o procedimento a uma passagem que apenas grava '0'.
Fora o
Isso demora um pouco. É realmente a maneira mais rápida? Eu acho que escrever GB de dados sempre vai demorar um pouco ... #
21159
2
@ endolith: se você deseja deixar em branco o espaço livre em um sistema de arquivos ativo, não poderá contornar a necessidade de gravar tantos dados através da sobrecarga do sistema de arquivos. As ferramentas de exclusão segura sugeridas por fnord_ix podem ser mais rápidas, porque são otimizadas para esse tipo de tarefa.
precisa
2
@endolith: da descrição na página de manual, eu esperaria que a variante do zerofree seja apenas mais rápida para discos virtuais esparsamente alocados; na verdade, pode ser mais lenta em discos virtuais de tamanho real ou fixo se estiver fazendo uma leitura antes da gravação para confirmar que o bloco não tem conteúdo. O balão para um disco virtual não deve acontecer, pois a maioria dos drivers de disco esparsos usa todos os zeros como "não aloque esse bloco". Além disso, cate ddestão disponíveis em praticamente qualquer sistema operacional Unix-a-like, pois são consideradas ferramentas padrão, onde zerofreenão é provavelmente a menos que tenha sido adicionado explicitamente.
David Spillett
1
@ endolith: tendo dito o exposto acima, zerofreecertamente funcionaria, é claro que a coisa "todo o sistema de arquivos temporariamente cheio" mencionado na página do manual (quase mas não completamente atenuada pelo pokery small.file do jiggery nos meus exemplos) é uma preocupação genuína se você estiver fazendo isso em um sistema ativo no momento, e for zerofreerealmente mais rápido na instância específica, ele é otimizado para: dispositivos de bloco virtual esparsamente alocados. Embora você não possa confiar em qualquer limpeza em um dispositivo virtual por motivos de segurança: a única resposta verdadeira nesse caso é a criptografia completa do dispositivo desde o início.
precisa
45

AVISO

Fiquei chocado com quantos arquivos o photorec pôde recuperar do meu disco, mesmo após a limpeza.

Se há mais segurança no preenchimento do "espaço livre" apenas 1 vez com 0x00 ou 38 vezes com diferentes padrões cabalísticos, é mais uma discussão acadêmica. O autor do artigo seminal de 1996 sobre trituração escreveu para si mesmo um epílogo dizendo que isso é obsoleto e desnecessário para o hardware moderno. Não há nenhum caso documentado de dados sendo zerados fisicamente substituídos e recuperados posteriormente.

O verdadeiro link frágil neste procedimento é o sistema de arquivos . Alguns sistemas de arquivos reservam espaço para uso especial e não são disponibilizados como "espaço livre". Mas seus dados podem estar lá . Isso inclui fotos, e-mails pessoais em texto simples, o que for. Acabei de pesquisar no espaço reservado + space + ext4 e aprendi que 5% da minha homepartição estava reservada. Acho que foi aqui que photorecencontrei muito do meu material. Conclusão: o método de trituração não é o mais importante, mesmo o método de múltiplas passagens ainda deixa os dados no lugar .

Você pode tentar # tune2fs -m 0 /dev/sdn0antes de montá-lo. (Se essa for a partição raiz após a reinicialização, execute -m 5ou -m 1desmonte).

Mas ainda assim, de uma maneira ou de outra, pode haver algum espaço restante.

A única maneira verdadeiramente segura é limpar toda a partição, criar um sistema de arquivos novamente e restaurar seus arquivos a partir de um backup.


Maneira rápida (recomendado)

Execute a partir de um diretório no sistema de arquivos que você deseja limpar:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
rm zero.file

Notas: o objetivo do arquivo pequeno é reduzir o tempo em que o espaço livre é completamente zero; o objetivo da sincronização é garantir que os dados sejam realmente gravados.

Isso deve ser bom o suficiente para a maioria das pessoas.

Caminho lento (paranóico)

Não há casos documentados de recuperação de dados após a limpeza acima. Seria caro e exigente em recursos, se possível.

No entanto, se você tiver um motivo para pensar que as agências secretas gastariam muitos recursos para recuperar seus arquivos, isso deve ser suficiente:

dd if=/dev/urandom of=random.small.file bs=1024 count=102400
dd if=/dev/urandom of=random.file bs=1024
sync ; sleep 60 ; sync
rm random.small.file
rm random.file

Demora muito mais tempo.

Aviso. Se você escolheu o caminho paranóico, depois disso, você ainda deseja fazer a limpeza rápida, e isso não é paranóia. A presença de dados puramente aleatórios é fácil e barata de detectar e levanta a suspeita de que na verdade são dados criptografados. Você pode morrer sob tortura por não revelar a chave de descriptografia.

Caminho muito lento (paranóico louco)

Até o autor do artigo seminal de 1996 sobre trituração escreveu um epílogo dizendo que isso é obsoleto e desnecessário para o hardware moderno.

Mas se você ainda tem muito tempo livre e não se importa de desperdiçar seu disco com muita substituição, lá vai:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
sync ; sleep 60 ; sync
shred -z zero.small.file
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
shred -z zero.file
sync ; sleep 60 ; sync
rm zero.file

Nota: isso é essencialmente equivalente ao uso da ferramenta de exclusão segura.


Antes da edição, este post era uma reescrita de David Spillett. O comando "cat" produz uma mensagem de erro, mas não consigo escrever comentários nas postagens de outras pessoas.

user39559
fonte
Você pode comentar em posts de outras pessoas com 50 reputação .
Gnoupi
1
O catcomando é esperado para dar um erro "sem espaço deixado" em meus exemplos, no final da sua corrida. Você pode ocultar isso redirecionando o stderr para /dev/nullse houver algum problema. Eu costumo usar, em pvvez de catou ddpara esse tipo de coisa, para obter uma indicação útil do progresso.
precisa
4
...raises the suspicion that it is actually encrypted data. You may die under torture for not revealing the decryption key.Heh, era exatamente isso que eu estava pensando. Eu acho que isso significa que eu sou paranóico ...
Navin
2
O Root sempre pode usar o espaço reservado. Portanto, se você fizer seu preenchimento zero como raiz, também poderá preencher o espaço reservado de 5%; os tunefs são desnecessários. Ainda é concebível que possa haver dados em outras partes do sistema de arquivos.
Nate Eldredge
1
@NateEldredge Você tem alguma fonte que indique que ddexecutar como root dá acesso a mais do sistema de arquivos do que ddsem raiz? Eu quero acreditar que isso é verdade, mas não vejo razão para isso no momento.
Hashim
27

Há um utilitário zerofree pelo menos no Ubuntu:

http://manpages.ubuntu.com/manpages/natty/man8/zerofree.8.html

   zerofree — zero free blocks from ext2/3 file-systems

   zerofree  finds  the  unallocated, non-zeroed blocks in an ext2 or ext3
   filesystem (e.g. /dev/hda1) and fills them with zeroes. This is  useful
   if  the  device  on  which this file-system resides is a disk image. In
   this case, depending on the type of disk image, a secondary utility may
   be  able  to  reduce the size of the disk image after zerofree has been
   run.

   The usual way to achieve  the  same  result  (zeroing  the  unallocated
   blocks)  is to run dd (1) to create a file full of zeroes that takes up
   the entire free space on the drive, and then delete this file. This has
   many disadvantages, which zerofree alleviates:

      ·  it is slow;

      ·  it makes the disk image (temporarily) grow to its maximal extent;

      ·  it  (temporarily)  uses  all  free  space  on  the disk, so other
         concurrent write actions may fail.

   filesystem has to be unmounted or mounted  read-only  for  zerofree  to
   work.  It  will exit with an error message if the filesystem is mounted
   writable. To remount the  root  file-system  readonly,  you  can  first
   switch to single user runlevel (telinit 1) then use mount -o remount,ro
   filesystem.

Verifique também este link sobre o zerofree: Mantendo as imagens do sistema de arquivos dispersas - é de seu autor - Ron Yorston (9 de agosto de 2012)

osgx
fonte
3
É importante que o sistema de arquivos precise ser desmontado ou montado como somente leitura para que o zerofree funcione.
AntonioK
1
Seria bom incluir algumas informações sobre como fazer isso no sistema de arquivos raiz. Meu sentimento é que isso não funcionará, porque você teria que desmontar o sistema de arquivos enquanto executava a ferramenta simultaneamente no referido sistema de arquivos.
Ant6n 16/03/19
Isso também vem com o CentOS
davidgo
3

Veja como fazer isso com uma GUI.

  1. Instale o BleachBit
  2. Execute como root clicando em Aplicativos - Ferramentas do sistema - BleachBit como administrador.
  3. Nas preferências, diga quais caminhos você deseja. Geralmente os adivinha bem. Você deseja incluir um caminho gravável para cada partição. Geralmente é / home / nome de usuário e / tmp, a menos que sejam a mesma partição; nesse caso, basta escolher uma.
  4. Marque a caixa Sistema - Limpe o espaço livre em disco.
  5. Clique em Excluir.

O avanço do BleachBit sobre o dd (que de outra forma é muito bom) é quando o disco está finalmente cheio, o BleachBit cria pequenos arquivos para limpar os inodes (que contém metadados como nomes de arquivos, etc.).


fonte
Inspecione o código python de código aberto do Bleachbit para limpar o espaço livre de uma unidade para você.
shadowbq
2

Uso ddpara alocar um ou mais arquivos grandes para preencher o espaço livre e, em seguida, uso um utilitário de exclusão segura.

Para alocar arquivos com o dd, tente:

dd if=/dev/zero of=delete_me bs=1024 count=102400

Isso irá gerar um arquivo com delete_metamanho de 100 MB. (Aqui bsestá o "tamanho do bloco" definido como 1k e counté o número de blocos a serem alocados).

Em seguida, use seu utilitário de exclusão segura favorito (eu venho usando shred) nos arquivos criados.

NOTA: O buffer significa que, mesmo que você faça o disco inteiro , talvez não obtenha absolutamente tudo!


Este link recomenda scruba limpeza de espaço livre. Ainda não tentei.

dmckee
fonte
Ah, se a memória me serve, tentei scrubuma vez e corrompeu todo o sistema de arquivos. Felizmente, tive o bom senso de experimentar primeiro um sistema de arquivos de teste, NÃO meus dados reais.
landroni
2

Limpe uma unidade na velocidade máxima.

Hoje em dia, as instruções típicas para criptografar uma unidade dizem para você primeiro limpar a unidade.

O comando abaixo preencherá sua unidade com texto cifrado AES.

Use um CD ao vivo se precisar limpar sua unidade de inicialização principal.

Abra um terminal e eleve seus privilégios:

sudo bash

Vamos listar todas as unidades no sistema para serem seguras:

cat /proc/partitions

NOTA: Substitua /dev/sd{x}pelo dispositivo que deseja limpar.

AVISO: Isto não é para amadores! Você pode deixar seu sistema não inicializável !!!

sudo openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > /dev/sd{x}

Estou surpreso com a rapidez com que isso é.

Roger Lawhorn
fonte
2

Você provavelmente já possui o pacote GNU coreutils instalado no seu sistema. Ele fornece o comando shred .

dkaylor
fonte
4
Shred não vai limpar o espaço em disco não utilizado sem torná-lo em arquivos primeiro ...
dmckee
2

Você pode limpar seu espaço livre usando o pacote de exclusão segura.

Nesse pacote, você encontra a sfillferramenta projetada para excluir os dados que estão no espaço em disco disponível nas mídias, de maneira segura e que não pode ser recuperada por ladrões, policiais ou outras ameaças.

Para instalar o pacote de exclusão segura no Linux (Ubuntu), instale-o pelo seguinte comando:

$ sudo apt-get install secure-delete

Em seguida, para apagar seus dados sem espaço livre, tente o seguinte comando:

sfill -f -v -ll /YOUR_MOUNTPOINT/OR_DIRECTORY

Onde / YOUR_MOUNTPOINT / OR_DIRECTORY é seu ponto de montagem ( df -h, mount) ou diretório para limpar o espaço livre.

Leia o manual em http://manpages.ubuntu.com/manpages/hardy/man1/sfill.1.html

kenorb
fonte
1

use dd e apenas zere o espaço livre. trata-se de um dado de mito que precisa ser sobrescrito várias vezes (basta perguntar a Peter Guntmann) e dados aleatórios, em oposição a 1 e então 0 implica atividade não natural. então o resultado final é uma unidade limpa, com muito menos tempo gasto escrevendo. além disso, os programas de exclusão segura não podem garantir que eles sobrescrevam o arquivo real em sistemas de arquivos modernos (registrados em diário). faça um favor a si mesmo e obtenha o photorec, analise sua unidade para ver a bagunça, limpe-a com zeros e, opcionalmente, com zeros para torná-la intacta. se o photorec ainda encontrar alguma coisa, lembre-se de que está digitalizando tudo o que está disponível; faça isso com cuidado novamente com o usuário root.

lembre-se, a cia / fbi / nsa não possui uma máquina sofisticada capaz de ler o estado real de seus bits de mídia magnética. isso foi apenas um artigo escrito há muito tempo. um "e se". você só precisa limpar uma vez.

fred
fonte
1
Você disse algumas coisas interessantes, mas você realmente tem alguma fonte para apoiar essas informações? É difícil acreditar que toda essa substituição seja inútil. Além disso, melhore sua postagem, é difícil ler com pontuação assim.
Gronostaj
@gronostaj: A afirmação "é um mito que os dados precisam ser sobrescritos várias vezes" para unidades modernas, pelo menos, foi comprovada por vários estudos. Todos os 30 passes recomendados por Gutmann não são mais necessários, como reconhecido pelo próprio autor.
Karan
1

Mais fácil é usar o scrub :

scrub -X dump

Isso criará uma dumppasta no local atual e criará o arquivo até que o disco esteja cheio. Você pode escolher um padrão com a -popção ( nnsa|dod|bsi|old|fastold|gutmann).

Não é fácil instalar o scrub ( consulte os Fóruns do Ubuntu sobre isso ), mas depois que a instalação estiver concluída, você terá uma ferramenta realmente SIMPLES e eficiente em suas mãos.

FMaz008
fonte
Se a memória me serve, tentei scrubuma vez e corrompeu todo o sistema de arquivos. Felizmente, tive o bom senso de experimentar primeiro um sistema de arquivos de teste, NÃO meus dados reais.
landroni
Não sei o que você fez ou o que aconteceu, mas, basicamente, crie um novo arquivo até preencher o sistema de arquivos. Ele não joga com o arquivo existente, também não excluir qualquer deles (pelo menos não o comando que eu dei) ...
FMaz008
1
De fato. Tentei scrub -X dump_dire parece ter funcionado bem. BTW, a instalação no Ubuntu 14.04 é muito simples: apt-get install scrub.
landroni
1

Aqui está o script "sdelete.sh" que eu uso. Veja os comentários para obter detalhes.

# Install the secure-delete package (sfill command).

# To see progress type in new terminal:
# watch -n 1 df -hm

# Assuming that there is one partition (/dev/sda1). sfill writes to /.
# The second pass writes in current directory and synchronizes data.
# If you have a swap partition then disable it by editing /etc/fstab
# and use "sswap" or similar to wipe it out.

# Some filesystems such as ext4 reserve 5% of disk space
# for special use, for example for the /home directory.
# In such case sfill won't wipe out that free space. You
# can remove that reserved space with the tune2fs command.
# See http://superuser.com/a/150757
# and https://www.google.com/search?q=reserved+space+ext4+sfill

sudo tune2fs -m 0 /dev/sda1
sudo tune2fs -l /dev/sda1 | grep 'Reserved block count'

sudo sfill -vfllz /

# sfill with the -f (fast) option won't synchronize the data to
# make sure that all was actually written. Without the fast option
# it is way too slow, so doing another pass in some other way with
# synchronization. Unfortunately this does not seem to be perfect,
# as I've watched free space by running the "watch -n 1 df -hm"
# command and I could see that there was still some available space
# left (tested on a SSD drive).

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
rm zero.file

sudo tune2fs -m 5 /dev/sda1
sudo tune2fs -l /dev/sda1 | grep 'Reserved block count'
Czarek Tomczak
fonte
1

Encontrei uma solução simples que funciona no Linux e no MacOS. Mova a pasta raiz do seu disco e inicie este comando:

for i in $(seq 1 //DISKSPACE//); do dd if=/dev/zero of=emptyfile${i} bs=1024 count=1048576; done; rm emptyfile*;

onde // DISKSPACE // é o tamanho em GB do seu disco rígido.

Enrico
fonte
0

Às vezes eu uso este bash one-liner:

while :; do cat /dev/zero > zero.$RANDOM; done

Quando começar a dizer que o disco está cheio, basta pressionar Ctrl+ Ce remover os zero.*arquivos criados .

Funciona em qualquer sistema, independentemente do tamanho do arquivo.
Ignore os cat: write error: File too largeerros.

Nicolas Raoul
fonte
0

Esta não é uma resposta! Apenas um comentário para aqueles que desejam usar pv... então não se preocupe em votar.

No Linux Mint 17.3, você pode usar pv( exibição de pipe ) para obter progresso na gravação. Por exemplo:

# Install pv (pipe view)
sudo apt-get install pv

# Write huge file of approximate size of /dev/sdb, using urandom data:
pv --timer --average-rate --progress --numeric --eta --interval 5 --size "$(blockdev --getsize64 /dev/sda )" /dev/urandom >rand.file

A vantagem aqui é que você obtém uma barra de progresso, ETA e taxa de dados atualizada continuamente. A desvantagem é que isso está escrito em uma linha e, quando o disco está cheio (retornando um erro), ele desaparece. Isso acontece porque o tamanho total é aproximado, pois o sistema operacional provavelmente usará o disco enquanto essa operação muito longa estiver ocorrendo, especialmente no volume do sistema operacional.

Em um HD muito antigo, recebo uma taxa de dados de cerca de 13 MB / s usando /dev/urandome cerca de 70 MB / s ao usá-lo /dev/zero. Provavelmente isso melhoraria ainda mais ao usar um raw ddou catnão pv.

not2qubit
fonte
-13

Depois que o arquivo sai do registro do sistema de arquivos, os dados que são deixados no disco rígido ficam sem sequência de 1 e 0. Se você deseja substituir essa sequência sem sentido por outra sequência sem sentido, posso aconselhar alguns produtos comerciais para apagar unidades com segurança, como arconis.

Ilya Biryukov
fonte
22
Pedaços contíguos do conteúdo de arquivos anteriores ainda permanecem no disco e não têm sentido se os dados brutos do disco forem examinados diretamente.
Alex B